MyBatis自增主键配置(MySQL/Oracle)

Mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是Oracle Sequece和Mysql自增主键。

1、不返回自增主键值

如果考虑到插入数据的主键不作为其他表插入数据的外键使用,那么可以考虑使用这种方式

对于MySQL

由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,不指定插入ID字段即可。主键的自增交由Mysql来管理。

<sql id='TABLE_NAME'>TEST_USER</sql>
<!-- 注意这里的插入SQL中是没有指明ID字段的! -->
<insert id="insert" parameterType="User">
    insert into <include refid="TABLE_NAME" /> (NAME,AGE)
    values (#{name}, #{age} )
</insert>

注意:不能在完成插入操作后将插入时的主键值存放到保存的对象中

对于Oracle

Oracle数据库中没有自增主键,只能用序列号来进行操作

<sql id='TABLE_NAME'>TEST_USER</sql>
<sql id='TABLE_SEQUENCE'>SEQ_TEST_USER_ID.nextval</sql>
<!-- 注意这里直接调用sequence的nextval函数 -->
<insert id="insert" parameterType="User">
    insert into <include refid="TABLE_NAME" /> (ID,NAME,AGE)
    values ( <include refid="TABLE_SEQUENCE" /> ,#{name}, #{age} )
</insert>
注意:不能在完成插入操作后将插入时的主键值存放到保存的对象中

2、插入后获取自增主键值

有时候遇到类似一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键使用Mybatis提供的<selectKey />来单独配置针对自增逐渐的处理。

当然有两种方式:一种是使用useGemeratedKeys,一种是使用<selectKey/>的方式

对于MySQL


将selectKey放在insert之后,通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值

完成插入操作后将插入时的主键值存放到保存的对象中

对于Oracle


完成插入操作后将插入时的主键值存放到保存的对象中

注意:

当数据插入操作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式来配置插入语句,这样可以避免额外的SQL开销。

当执行插入操作后需要立即获取插入的自增主键值,比如一次操作中保存一对多这种关系的数据,那么就要使用 插入后获取自增主键值 的方式配置。

序列号命名还是要注意一下,可以执行SQL语句进行验证。当建立序列的时候,序列的名字最好是写成大写,虽然Oracle会自动进行转换,但是最近在用的时候却没有注意,写成的小写序列名字并没有转成大写,可能造成错误。

参考地址

https://blog.csdn.net/lin910429/article/details/22808963

https://blog.csdn.net/zknxx/article/details/53558850

http://www.cnblogs.com/yangchao/archive/2010/09/28/2044415.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值