1.使用useGenerateKey

    <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="personId">
insert into person(name,pswd) values(#{name},#{pswd})
</insert> 

或者

   @Mapper
public interface UserMapper
{
@Insert("insert into tbl_user (name, age) values (#{name}, #{age})")
@Options(useGeneratedKeys=true, keyProperty="userId", keyColumn="user_id")
void insertUser(User user);
}

其中keyProperty对应的属性为返回对象的字段,keyColumn对应的为表字段

返回新增id在新增对象的id属性中

这种只能使用在自增长的数据库中,比如mysql,在oracle中就不行

2.使用select LAST_INSERT_ID()

   <insert id="insert" parameterType="Person">
<selectKey keyProperty="personId" resultType="long">
select LAST_INSERT_ID()
</selectKey>
insert into person(name,pswd) values(#{name},#{pswd})
</insert>

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。

注意:

使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意。

insert into tb(c1,c2) values (c1value,c2value),(c3value,c4value);select LAST_INSERT_ID();
或者
insert into tb(c1,c2) values (c1value,c2value);
insert into tb(c1,c2) values (c3value,c4value);
select LAST_INSERT_ID();

这两种情况返回的都是最后插入新增的id,就是上文中新增c3value,c4value的id.

3.使用select @@IDENTITY

   <insert id="insert" parameterType="Person">
<selectKey keyProperty="personId" resultType="long">
select @@IDENTITY
</selectKey>
insert into person(name,pswd) values(#{name},#{pswd})
</insert>

@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

4.在MySql中模拟Sequence

这个比较繁琐,有兴趣的可以看[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

参考:

mybatis 操作数据库的主键自增长

mybatis自增长插入id

[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

Mysql 中获取刚插入的自增长id的值

Mybatis自增长id处理的更多相关文章

  1. Mybatis 插入后返回数据库自动增长ID

    MySQL和MSSQL返回主键方法 在personMap.xml中 <insert id="addPerson" parameterType="orm.Person ...

  2. Mybatis获取自动增长Id

    Mybatis获取自动增长Id MyBatis成功插入后获取自动增长的id 1.向xxMapping.xml配置中加上两个配置. <insert id="insertUser" ...

  3. mybatis 新增返回id

    第一种方式: 在实体类的映射文件 "*Mapper.xml" 这样写: <insert id="insertAndGetId" useGeneratedK ...

  4. shell脚本获取mysql插入数据自增长id的值

    shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...

  5. 关于MySql中自增长id设置初始值

    在MySQL数据库,设置了id为自增长类型,但由于程序还处于开发阶段,很容易的会产生错误数据,然后就直接删除了,可是id的自增长值没有跟着减少,这里提示: 如果表中数据没有用,直接删除了数据,自动增长 ...

  6. 利用数据库触发器让字段与自增长Id相关联

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 今天是数据库脚本类的代码,所以不想过多阐述 如下数据表: create table Card( Id ,) primary key, CardNo ...

  7. Mysql 中获取刚插入的自增长id的值

    insert into user (username,password) VALUES ('); //获取刚插入的自增长id的值 select last_insert_id(); 在MySQL中,使用 ...

  8. C#实体类对应SQL数据库的自增长ID怎么设置?

    /// <summary> /// 自增长ID /// </summary> [DatabaseGenerated(DatabaseGeneratedOption.Identi ...

  9. PowerDesigner 创建表的时候 没有自增长Id的设置项

    今天早上同事创建表的时候,在那个界面没有自增长Id的选项,当时我也纳闷,软件肯定都是一样的,设置的步骤都一样(有些配置好的 我就没改过 然后就忘了还改过些什么步骤了),结果还是没有那个选项 百度了一下 ...

随机推荐

  1. List<String> 2List <Long>

    public static List<Integer> CollStringToIntegerLst(List<String> inList){ List<Integer ...

  2. Chrome 扩展

    http://www.cnblogs.com/coco1s/p/8004510.html

  3. C. Primes or Palindromes?

    prime numbers non greater than n is about . We can also found the amount of palindrome numbers with ...

  4. Sitecore系统教程之模板理解

    Sitecore中的所有内容都是一个项目.模板也是如此.Sitecore中的模板是一个项目,它定义了其他项目的结构和行为.Sitecore中的每个项目都是某个模板的实例.模板还可以定义它分解成的部分和 ...

  5. Java集合-----List详解

    List中的元素是有序排列的而且可重复 1.LinkedList LinkedList是非线程安全的,底层是基于双向链表实现的       LinkedList常用方法:     toArray()  ...

  6. MySQL超时配置

    connect_timeout:连接响应超时时间.服务器端在这个时间内如未连接成功,则会返回连接失败. wait_timeout:连接空闲超时时间.与服务器端无交互状态的连接,直到被服务器端强制关闭而 ...

  7. Python数据类型深入学习之数字

    一. 数字常量 1. 下面来看看Python的数字常量中都要哪些类型: 数字 常量 129,-89,0 一般整数 9999848499999L,4594646469l 长整型数(无限大小) 1.232 ...

  8. 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  9. 转:获得数据库自增长ID(ACCESS)与(SQLSERVER)

    转载自:http://www.cnblogs.com/chinahnzl/articles/968649.html 问题CSDN 里面不时有初学者疑惑:如何获取自增长列(标识列)的ID,并写入另一张表 ...

  10. rgferg

    dfgsdfg fdvgdsafg fgdfgdfg