mybatis学习-入门(5)-新增后返回ID
来源:互联网 发布:上网本xp系统优化 编辑:程序博客网 时间:2024/06/04 08:44
使用mybatis学习-入门(2)中的例子,在baiuserMapper中insert下添加 selectKey
<insert id="insert" parameterType="example4.model.baiuser" > <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="ID"> SELECT LAST_INSERT_ID() AS id </selectKey> insert into bai_user <trim prefix="(" suffix=")" suffixOverrides="," > <if test="ID != null" >。。。。。。。。
由于MySQL是提供表列的自增的,并且我们这里的bai_user表的ID字段也设置为自增的。所以,我们可以使用selectKey在insert语句执行后(order="AFTER")来获取新增记录的ID,并且将得到的ID付给插入的对象。
编写一个测试类:
package example4.test;import org.junit.Test;import org.junit.Before;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.fastjson.JSON;import example4.dao.baiuserMapper;import example4.model.baiuser;public class baiuserTest {private baiuserMapper userDao; @Beforepublic void before(){@SuppressWarnings("resource")ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:example4/conf/spring.xml"});userDao = (baiuserMapper) context.getBean("baiuserMapper");} @Testpublic void test(){baiuser user = new baiuser();user.setUSERNAME("xiaobai");user.setPASSWORD("xiaobai");System.out.println(JSON.toJSONString(user));userDao.insert(user);System.out.println(JSON.toJSONString(user));}}
测试结果如下:
{"pASSWORD":"xiaobai","uSERNAME":"xiaobai"}
{"iD":43,"pASSWORD":"xiaobai","uSERNAME":"xiaobai"}
两个结果显示插入前ID为空,插入后ID 为43
再补充一点:
对于ORACLE,貌似是不提供表列的自动增加的,所以创建一个自动增加的ID需要建个表,然后建个序列,然后才可以实现自增。所以直观理解,如果在oracle数据库中使用myBatis的selectKey功能返回给对象新增记录的ID,则需要在插入语句执行前获取。即:
<selectKey resultClass="long" keyProperty="id" order="BEFORE">
select SEQ_USER_ID.nextval as id from dual
</selectKey>
这里的SEQ_USER_ID就是你创建的那个序列。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
好了,下面是从别的地方抄的一些关于selectKey的详细说明:
SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。
另外在用Spring管理事务时,SelectKey和插入在同一事务当中,因而Mysql这样的情况由于数据未插入到数据库中,所以是得不到自动增长的Key。取消事务管理就不会有问题。
- mybatis学习-入门(5)-新增后返回ID
- Mybatis框架新增数据后返回ID(自增主键)。
- myBatis 新增数据并返回ID
- MyBatis 批量新增返回自增id
- ibatis新增数据后返回主键id
- mybatis返回添加后的id返回
- mybatis插入数据后返回id
- mybatis实现插入后返回id
- mybatis+mysql 案例返回新增的ID(两种实现方式)
- mybatis新增时返回主键id,useGeneratedKeys的用法
- mybatis 新增返回自增的id值
- Mybatis id自增,插入数据后返回id
- mybatis 保存后返回保存成功后的id
- mybatis 保存后返回保存成功后的id
- 框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键
- mysql+mybatis插入一条数据后返回主键ID
- mybatis+mysql返回插入值后的主键id
- MyBatis单条插入后返回自增的id
- Nginx学习(4)—HelloNginx(2)
- 看见你
- Portal开源框架介绍
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- 2014年海康威视面试题
- mybatis学习-入门(5)-新增后返回ID
- 交叉校验法
- SEO学习笔记(SEO实战密码读书笔记)
- android 实现倒计时功能
- Hadoop,MapReduce 操作 Mysql
- Android NDK 工具链的使用方法(Standalone Toolchain)
- 李克强会见美议员 阐述在南海和钓鱼岛问题上立场
- 堆和栈的区别(转过无数次的文章)
- 设计模式