天天看點

Mybatis批量插入資料傳回主鍵

響應效果(id為主鍵):

{
    "data": [
        {"studentName": "張三","classNo": "一班","id": 111},
        {"studentName": "李四","classNo": "二班","id": 112},
        {"studentName": "王五","classNo": "一班","id": 113}
    ]
}
           

控制層:

@PostMapping("/test")
	@ResponseBody
	public Map<String, Object> test(@RequestBody String data) {
		Map<String, Object> resultMap = new HashMap<String, Object>();
                //非空校驗
		if (!checkParams.checkString(data)) {
			resultMap.put("code", "1");
			resultMap.put("msg", "參數為空。");
			return resultMap;
		}
                //json轉List<Map<String, Object>>
		JSONObject json= new JSONObject(data);
		String dataString = json.get("data").toString();
		com.google.gson.Gson gson = new Gson();
				List<Map<String, Object>> list = gson.fromJson(dataString, new      com.google.common.reflect.TypeToken<List<Map<String, Object>>>() {
				}.getType());
                //請求接口
		resultMap=registerService.test(list);
		return resultMap;
	}
           

接口:

public Map<String, Object> test(List<Map<String,Object>> data);
           

實作類:

@Override
	public Map<String, Object> test(List<Map<String,Object>>  data) {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		registerMapper.test( data);
		resultMap.put("data",data);
		return resultMap;
	}
           

持久層:

public void test(List<Map<String,Object>> list);
           

statement:

<!-- =========================批量插入傳回主鍵示例======================== -->
	<insert id="test" parameterType="list" useGeneratedKeys="true" keyProperty="id" >
		INSERT INTO student_info(student_name,class_no)VALUES
		<foreach collection="list" item="item" separator=",">
			(
			#{item.studentName},
			#{item.classNo}
			)
		</foreach>
	</insert>
           

請求方式:

http://localhost/xxx/test
           

請求參數:

{
    "data": [
        {"studentName": "張三","classNo": "一班"},
        {"studentName": "李四","classNo": "二班"},
        {"studentName": "王五","classNo": "一班"}
    ]
}
           

注意事項:

statement中keyProperty的指派是可以自定義的,如果将keyProperty的值改為key,即改成如下:

<!-- =========================批量插入傳回主鍵示例======================== -->
	<insert id="test" parameterType="list" useGeneratedKeys="true" keyProperty="key" >
		INSERT INTO student_info(student_name,class_no)VALUES
		<foreach collection="list" item="item" separator=",">
			(
			#{item.studentName},
			#{item.classNo}
			)
		</foreach>
	</insert>
           

則響應效果(key為主鍵)如下:

{
    "data": [
        {"studentName": "張三","classNo": "一班","key": 111},
        {"studentName": "李四","classNo": "二班","key": 112},
        {"studentName": "王五","classNo": "一班","key": 113}
    ]
}
           

繼續閱讀