zoukankan      html  css  js  c++  java
  • MyBatis的useGeneratedKeys使用(添加并返回自增主键)

    业务需求,用户表为主键自增,添加完用户之后,通过用户ID和角色表进行关联。

    问题:由于主键自增,所以在用户添加之前是不知道ID的,当然可以通过查询得到当前的ID,不过需要自己多一步操作。

    解决方案:使用useGeneratedKeys属性,以及keyProperty

    useGeneratedKeys

    (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false

    keyProperty

    仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。

    个人理解:下图比较详细

     可能引发问题:有时候使用批量添加操作,在service层将所有的数据通过for循环进行遍历,调用底层的单个添加操作的方法(xml中useGeneratedKeys属性为true),添加到第二条时,会提示主键已存在的异常(数据库设置的为主键自增)。

     原因:因为useGeneratedKeys属性为true所以将第一条添加的数据主键返回了,而第二条数据没有将id主键重新设置为null,直接使用第一条添加数据并返回的主键id,导致主键重复异常。

     解决方案:循环遍历添加时,将id设置为null即可。

    for (int i = 0; i < 3; i++) {
           user.setUserId(null);  //将用户id重新设置为null即可
           // 新增用户信息
           rows = userMapper.insertUser(user);
           // 新增用户岗位关联
           insertUserPost(user);  
    }
  • 相关阅读:
    JSON AND BSON
    xom报错 Exception in thread "main" java.net.UnknownHostException: file
    创建weblogic受管理服务器和安全文件
    创建weblogic domain
    安装weblogic步骤
    python读取excel表格生成sql语句 第一版
    nutz框架使用记录之Cnd.wrap
    IDEA 导入cordova3.5工程目录注意事项
    javascript类继承
    使用nodejs 访问mongodb
  • 原文地址:https://www.cnblogs.com/qcq0703/p/15193023.html
Copyright © 2011-2022 走看看