SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。

详细看这里:http://www.cnblogs.com/SimonHu1993/p/7326502.html

 参考:       http://blog.csdn.net/isea533/article/details/21153791#reply

这种方式在mybatis insert插入时 long id=service.insert(entity);的结果永远是1,但是通过selectKey,可以获得entity自增之后的id;

            room.setPassword(password);
room.setIsClose(0);
room.setCtime(new Date());
roomService.insertRoom(room);
long roomID=room.getId();//这里能取到insert自增之后的id;

SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。

Oracle这样取序列的情况,需要设置为before,否则会报错。

下面是一个xml和注解的例子,SelectKey很简单,两个例子就够了:

  1. <insert id="insert" parameterType="map">
  2. insert into table1 (name) values (#{name})
  3. <selectKey resultType="java.lang.Integer" keyProperty="id">
  4. CALL IDENTITY()
  5. </selectKey>
  6. </insert>

上面xml的传入参数是map,selectKey会将结果放到入参数map中。用POJO的情况一样,但是有一点需要注意的是,keyProperty对应的字段在POJO中必须有相应的setter方法,setter的参数类型还要一致,否则会报错。

如果是mysql的话如下 

<insert id="insert" parameterType="entity.Room">
insert into wsp_room (id,type,video_id, name, user_maxnum,
user_id, password, is_close,
ctime)
values (#{id,jdbcType=BIGINT}, #{type,jdbcType=INTEGER},#{videoId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{userMaxnum,jdbcType=INTEGER},
#{userId,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{isClose,jdbcType=INTEGER},
#{ctime,jdbcType=TIMESTAMP})
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
</insert>
  1. @Insert("insert into table2 (name) values(#{name})")
  2. @SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
  3. int insertTable2(Name name);

上面是注解的形式。

Mybatis insert时返回自增id的更多相关文章

  1. mybatis postgresql insert后返回自增id

    在使用mybatis + postgresql,我们有时在插入数据时需要返回自增id的值,此时在插入时,可以按照以下例子来编写mapper文件 <insert id="insertUs ...

  2. Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查

    今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...

  3. MyBatis insert后返回自增字段的值

    如下情况适用支持自增的DB,如MySQL.其他情况参见:MyBatis魔法堂:Insert操作详解(返回主键.批量插入) 1.model public class UserInfo { private ...

  4. PostgreSQL使用MyBatis,insert时返回主键

    MyBatis中普通的insert语句是这样的: <insert id="insert" parameterType="com.xxx.xxx.xxDo" ...

  5. mybatis insert后返回主键ID

    需求: mybatis  在添加记录时需要获取到记录主键id id=0 无法获取主键id的值 在插入方法中添加如下属性和相应的值 <insert useGeneratedKeys="t ...

  6. MyBatis 插入时返回自增主键

    XML <insert id="insert" parameterType="com.stone.model.Person"> <!-- se ...

  7. Spring Boot中mybatis insert 如何获得自增id

    https://www.cnblogs.com/quan-coder/p/8728410.html 注意要显式设置主键,通过: @Options(useGeneratedKeys = true, ke ...

  8. 用注解的方式实现Mybatis插入数据时返回自增的主键Id

    一.背景 我们在数据库表设计的时候,一般都会在表中设计一个自增的id作为表的主键.这个id也会关联到其它表的外键. 这就要求往表中插入数据时能返回表的自增id,用这个ID去给关联表的字段赋值.下面讲一 ...

  9. 【mybatis】mybatis中insert操作,返回自增id

    需求是这样的: mybatis中insert操作,返回自增id,因为这个自增id需要给后续业务用到. 原本是这样的: 将insert语句传入,正常执行insert操作,返回int永远是 0[失败] 或 ...

随机推荐

  1. 自定义滤镜 ColorMatrixFilter

    var url:URLRequest = new URLRequest("Koala.jpg"); var l:Loader = new Loader(); l.contentLo ...

  2. POJ3177 Redundant Paths【双连通分量】

    题意: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另一个牧场时总是可以 ...

  3. python - 发送邮件(email模块(内置))

    发送邮件 import smtplib from email.mime.text import MIMEText #邮箱件内容 HTML = """ 发送邮件测试2,加密 ...

  4. Django CSRF提交遇见的问题

    简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有 ...

  5. Java中eclipse与命令行向main函数传递参数

    我们知道main函数是java程序的入口,main函数的参数类型是String[]. 1.Eclipse中向main方法传递参数 例如: public class Mytest { public st ...

  6. UML和模式应用4:初始阶段(3)--需求制品之用例模型

    1. 前言 UP开发包括四个阶段:初始阶段.细化阶段.构建阶段.移交阶段: UP每个阶段包括 业务建模.需求.设计等科目: 其中需求科目对应的需求制品包括:设想.业务规则.用例模型.补充性规格说明.词 ...

  7. Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析【转】

    转自:http://blog.csdn.net/hzn407487204/article/details/7995041 在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设 ...

  8. chattr的使用

    让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作: chattr +a /home/caolei/.bash_history 查看lsattr /home/caolei/.bash_ ...

  9. saltstack文件模块的replace操作简化

    代码已经过测试 import re import mmap import os import shutil old_text='test' new_text='text' path=r'C:\User ...

  10. oracle 监听 添加ip

    同时修改tnsnames.ora.listener.ora将这两个文件中HOST后面的主机都修改为127.0.0.1然后重启OracleServiceXE.OracleXETNSListener服务 ...