当前位置: 代码网 > it编程>编程语言>Java > Mybatis配置useGeneratedKeys参数的方式

Mybatis配置useGeneratedKeys参数的方式

2026年01月25日 Java 我要评论
mybatis配置usegeneratedkeys参数mybatis 配置文件 usegeneratedkeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如

mybatis配置usegeneratedkeys参数

mybatis 配置文件 usegeneratedkeys 参数只针对 insert 语句生效,默认为 false。

当设置为 true 时,表示如果插入的表以自增列为主键,则允许 jdbc 支持自动生成主键,并可将自动生成的主键返回。

配置mybatis的配置文件

设置usegeneratedkeys属性值为true:

 <settings>   
        <setting name="usegeneratedkeys" value="true" />   
  </settings>

编写一个pojo类

/*
 * 使用示例:表对应的 pojo
 * */
public class user {
    private int id;
    private string name;
    private integer age;

    public int getid() {
        return id;
    }

    public void setid(int id) {
        this.id= id;
    }
    //... 省略其它 getter 和 setter
}

此时再usermapper中插入user表的语句可以这样写:

<insert id="adduser" parametertype="com.model.user"  keyproperty="id">
    insert into user(name, age) values(#{name}, #{age})
</insert>

keyproperty标记了一个属性

mybatis会通过 getgeneratedkeys 设置这个属性的值,dao 调用 adduser 后,user 对象参数中就保存了新增的 user 的 id 属性了。

这个时候你是否能够感觉到usegeneratedkeys配置与selectkey的作用是那么的类似?那么它俩又有什么关系呢?

这样的场景,当你使用的关系型数据库时oracle 这样不支持自增主键列的数据库时,如果把usegeneratedkeys 参数配置为 true,在插入数据时则可能会出现 ora-00933: sql command not properly ended 这样的错误。

这时,可以将 usegeneratedkeys 配置为 false,那怎么实现获取上次生成id的功能呢?可以使用 mybatis 提供的 selectkey 手动提供类似自增序列的效果。

总结

如果数据库支持自增长主键字段(比如mysql、sql server)设置usegeneratedkeys=”true”和keyproperty,这样就可以获得插入的主键id值,并赋值给返回的pojo对象(或者单纯的id值); 

oracle则不支持自增长id,需要设置usegeneratedkey=”false”,如果设置true则会有报错信息。然后通过nextval函数,如seq_table.nextval生成id,插入更新一条数据时,可以使用selectkey获取id操作。

<insert id="insert">
 <selectkey keyproperty="id" resulttype="int" order="before">
  <if test="_databaseid == 'oracle'">
   select seq_users.nextval from dual  </if>
  <if test="_databaseid == 'db2'">
   select nextval for seq_users from sysibm.sysdummy1"  </if>
 </selectkey>
 insert into users values (#{id}, #{name})</insert>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com