当前位置: 首页 > 编程笔记 >

Mybatis批量插入数据返回主键的实现

吕天逸
2023-03-14
本文向大家介绍Mybatis批量插入数据返回主键的实现,包括了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}
  ]
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Mybatis批量插入返回成功的数目实例,包括了Mybatis批量插入返回成功的数目实例的使用技巧和注意事项,需要的朋友参考一下 Mybatis批量插入返回影响的行数 环境: postgresql 9.6.5 spring 4.1 mybatis3 junit4 log4j ThesisMapper.xml: Mapper.java 借口: 服务类: ThesisService: 测

  • 本文向大家介绍Mybatis返回插入主键id的方法,包括了Mybatis返回插入主键id的方法的使用技巧和注意事项,需要的朋友参考一下 在mapper的xml文件中配置  useGeneratedKeys 以及 keyProperty 返回Id即可 PS:Mybatis中insert中返回主键ID的方法 1、XyzMapper.xml 或 2、XyzMapper.java 3、要在map或c中有一

  • 本文向大家介绍Mybatis返回插入的主键问题解决方案,包括了Mybatis返回插入的主键问题解决方案的使用技巧和注意事项,需要的朋友参考一下 MyBatis添加记录后获取主键ID,这是一个很常见的需求。这个需求有分为两种情况:(1)添加单条记录时获取主键值;(2)获取批量添加记录时各记录的主键值。 备注:MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值。 1、添加单一记录

  • 问题内容: 我正在尝试使用in 进行批量插入,这是执行操作时遇到的错误; 是由于系统空间不足还是批量插入功能本身不起作用?我的版本是,版本也是。 批量插入逻辑代码; 问题答案: 正如Val在评论中所说,您一次发送的数据可能会超出集群的处理能力。看来您可能正在尝试在 一个* 批量请求中发送 所有 文档,但对于许多文档或大型文档而言,这可能无法正常工作。 * 使用时,除了可以同时发送到集群的批量请求数

  • 本文向大家介绍如何在mybatis中向BLOB字段批量插入数据,包括了如何在mybatis中向BLOB字段批量插入数据的使用技巧和注意事项,需要的朋友参考一下   最近接手一个需求,需要用xxl-job定时任务同步三方库中新增的数据,粗略一看挺得意,以为一两小时就搞定了,但事与愿违,编码两小时却被一个BLOB字段玩了一下午。   每次获取50条数据过来,每条数据中有一个字段是BLOB类型的图片,需

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作

  • 我最近开始学习使用myBatis。我现在面临这样一个场景,我需要通过WebService不断获取一个新的对象列表,然后对于这个列表,我需要通过myBatis将每个对象插入/更新到oracle DB表中。 棘手的是,我不能每次都简单地进行批量插入,因为有些对象可能已经存在于数据库中,对于这些记录,我需要更新它们的字段,而不是新的插入。 我目前的解决方案可能非常愚蠢,使用Java,从webservic

  • 本文向大家介绍MySQL批量插入数据脚本,包括了MySQL批量插入数据脚本的使用技巧和注意事项,需要的朋友参考一下 MySQL批量插入数据脚本 新建表格就可以了 插入十万的数据为./jiaoben.sh 100000