mybatis mysql自增主键_mybatis 自增主键配置

本文介绍了在MyBatis中如何配置MySQL自增主键,包括不返回和插入后获取主键值的方法,并提供了相关配置示例。通过这两种方式,可以适应不同的业务需求,例如在一对多关系中获取新插入记录的主键。
摘要由CSDN通过智能技术生成

mybatis 自增主键配置

mybatis自增主键配置(?)

mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会

遇到的就是 Oracle Sequece 和 Mysql 自增主键,至于其他的手动生成唯一主键的问题在这里就不讨论

了,这里主要说明下在mybatis中对于自增主键的配置。

不返回自增主键值

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

Oracle Sequence 配置

TEST_USER

SEQ_TEST_USER_ID.nextval

insert into (ID,NAME,AGE)

values ( ,#{name}, #{age} )

当插入语句如上配置时,那么针对如下语句

User user = new User();

user.setName("test");

user.setAge(24);

userMapper.insert(user);

System.out.println(user.id); // user.id 为空

user.id为空,也就是说如上的配置并不能在完成插入操作后将插入时的主键值存放到保存的对象中

Mysql自增主键配置

由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,

不指定插入ID字段即可。主键的自增交由Mysql来管理。

TEST_USER

insert into (NAME,AGE)

values (#{name}, #{age} )

同样,针对Mysql如此配置mybaits,插入完成后user.id为空。

插入后获取自增主键值

上述的情况能满足大部分情况,但有时候我们会遇到类似一对多的那种表结构,在插入多端数据时,需

要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用

mybatis提供的来单独配置针对自增逐渐的处理。

Oracle Sequence 配置

TEST_USER

SEQ_TEST_USER_ID.nextval

select from dual

insert into (ID,NAME,AGE)

values ( #{id}, #{name}, #{age} )

当使用了后,在实际的插入操作时,mybatis会执行以下两句SQL:

select SEQ_TEST_USER_ID.nextval from dual; // 语句1

insert into (ID,NAME,AGE) values ( ?, ?, ? ); // 语句2

在执行插入 语句2 之前,会先执行 语句1 以获取当前的ID值,然后mybatis使用反射调用User对象

的setId方法,将 语句1 查询出的值保存在User对象中,然后才执行 语句2 这样就保证了执行完插入后

User user = new User();

user.setName("test");

user.setAge(24);

userMapper.insert(user);

System.out.println(user.id); // user.id 不为空

user.id是有值的。

Mysql自增主键配置

针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键,

TEST_USER

insert into ( NAME, AGE )

values ( #{name}, #{age} )

当然,由于Mysql的自增主键可以通过SQL语句

select LAST_INSERT_ID();

来获取的。因此针对Mysql,Mybatis也可配置如下:

TEST_USER

SELECT LAST_INSERT_ID()

insert into (ID,NAME,AGE)

values ( #{id}, #{name}, #{age} )

只不过该中配置需要额外的一条查询SQL!

小结

当数据插入操作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式

来配置插入语句,这样可以避免额外的SQL开销.

当执行插入操作后需要立即获取插入的自增主键值,比如一次操作中保存一对多这种关系的数据,

那么就要使用 插入后获取自增主键值 的方式配置.

MyBatis 3.2.6插入时候获取自增主键方法有二

以MySQL5.5为例:

方法1:

insert into person(name,pswd) values(#{name},#{pswd})

方法2:

select LAST_INSERT_ID()

insert into person(name,pswd) values(#{name},#{pswd})

插入前实体id属性为0;

插入后实体id属性为保存后自增的id;

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2015-04-02 09:04

浏览 2944

分类:数据库

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值