在我们开发过程中,在插入数据到数据库时,很多时候都需要把其主键返回,这里就说一下mybatis是怎么获取的。

其中mysql和oracle是不同的做法,因为mysql本身就提供字段自增的属性,而oracle则需要使用序列。

mysql

insert into users (id, user_name, password,

real_name, status, email,

created_at, updated_at)

values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},

#{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},

#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})

配置中,keyProperty表示返回的id要保存到对象的那个属性中,这里的名字要和对象的字段名对应上。而useGeneratedKeys表示主键id为自增长模式。mysql的话只要加上这两个属性就可以了,加上后会自动把主键set到对象的属性上。

注意:useGeneratedKeys,这会令MyBatis 使用JDBC 的getGeneratedKeys方法来获取由数据库内部生成的主键,比如,像MySQL和SQLServer这样的关系数据库管理系统的自动递增字段。

oracle

SELECT SEQ_USER.NEXTVAL as id from DUAL

insert into users (id, user_name, password,

real_name, status, email,

created_at, updated_at)

values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},

#{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},

#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})

因为oracle没有自增的说法,所以不能使用useGeneratedKeys了。而是使用selectKey把id获取并set到对象的属性中。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐