【Mybatis】映射文件获取新增记录的id

我们在讲JDBC的时候讲过在插入新数据值的时候需要获得到自动生成的那个主键id的值

①获取PreparedStatement的对象的时候

PreparedStatement st = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS );

②在执行SQL语句后

st.executeUpdate();

ResultSet rs = st.getGeneratedKeys(); //得到插入行的主键

③最终拿到:if(rs.next()) System.out.println(rs.getInt(1));

Mybatis是对jdbc封装后的工具,当然也能做jdbc能做所有操作,那么Mybatis怎么获取新增的记录的这个id值?这里有分了两种数据库,一种是mysql这样的数据库支持自动增长,还有一种就是Oracle这样的不支持id自增的

mysql的做法

1.在映射文件的insert配置标签上加上两个属性,就这两个属性起作用

2.测试方法

Oracle的做法

前面我们用hibernate做的sshweb项目切换oracle数据库的时候,主键id自增是通过配置序列来实现的

这个配置本质上是怎么回事呢?本质是orcale为对应的表先添加一个序列列,这个序列列里的序列号是可以自增的

create sequence userid_seq

minvalue 1                    //初始序号为1

maxvalue                     //不设最大序号,用默认就不写,这里也可以设置

start with 1                //从1开始计算

increment by 1               //每次增1

NOCYCLE                      //直累加,不循环

cache 20                     //缓存20个

然后我们发起insert的sql语句的时候,在执行insert之前,我们先通过userid_seq .nextval(序列中的下一个数值),然后把这个值作为用户id插入数据库,这个序列值有个特性userid_seq.nextval拿一次,它递增一次,从而实现id值的自增长。 

当前序列列增量的修改:alter sequence 序列名 increment by 数值;

删除序列列:drop sequence 序列名;

①select USERID_SEQ.nextval from dual; 然后在用这个值做id插入数据库。

② 还可一步到位:insert into sb_users (id,username,password,state,reg_date) values (userid_seq.nextval,'tttt','tt',1,to_date('2018-09-01','yyyy-MM-dd'));

以上是orcale通过sequence实现自增长的本质,那么在Mybatis怎么搞呢?

还是设置映射文件,加了一个selectKey的标签(前提核心配置文件中将缓解的default改为orcale)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白云如幻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值