Mybatis批量插入数据返回主键的实现
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Mybatis批量插入数据返回主键的实现 Mybatis是当前最流行的持久层框架之一,它提供了强大的批量插入功能,但是在批量插入数据时如何返回主键是一个常见的问题本文将详细介绍Mybatis批量插入数据返回主键的实现。 在Mybatis中,批量插入数据可以通过使用foreach语句来实现,而返回主键可以通过使用useGeneratedKeys和keyProperty两个属性来实现。下面是一个示例代码: 在持久层的Mapper文件中,我们需要定义一个批量插入的语句: ``` <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> ``` 在上面的语句中,我们使用了useGeneratedKeys属性来指定该语句是否返回主键,而keyProperty属性指定了返回的主键的名称。在这个示例中,我们将返回的主键命名为"id"。 在service层中,我们可以使用Mapper来执行批量插入语句: ``` @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; } ``` 在控制层中,我们可以使用POST请求来调用service层的方法: ``` @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; } ``` 在上面的代码中,我们首先对请求参数进行非空校验,然后将json格式的参数转换为List<Map<String,Object>>,最后调用service层的方法来执行批量插入语句。 在请求方可以使用POST请求来调用控制层的方法,并传入批量插入的数据: ``` 请求方式:http://localhost/xxx/test 请求参数:{ "data": [ {"studentName": "张三","classNo": "一班"}, {"studentName": "李四","classNo": "二班"}, {"studentName": "王五","classNo": "一班"} ] } ``` 在这个示例中,我们使用了Mybatis的批量插入功能来插入多个学生信息,并返回每个学生的主键。在实际应用中,这种方式可以用于批量插入大量数据,并返回每个数据的主键,以便后续的处理。 需要注意的是,在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"。
- 粉丝: 5
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助