在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;

Dao.java

@Override
public int insert(T record) {
for (DaoInsertInterceptor<T> interceptor : this.insertInterceptors) {
interceptor.invoke(this, record);
}
return super.getSqlSession().insert(this.mapperNamespace + ".insert", record);
}

如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能


EventService.java
@Override
@Transactional
public int insert(Event event) {
this.eventDao.insert(event);
return event.getEventId();
}

针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:

     <insert id="insert" parameterType="cn.com.bmsoft.smartcity.govnet.domain.Evenlegal">
<selectKey keyProperty="legalId" resultType="int" order="BEFORE">
select GOVNET_SEQ.nextVal from dual
</selectKey>
insert into
T_GOVNET_EVENT_LEGAL
(
"LEGAL_ID",
"LEGAL_DESC",
"SORTORDER"
)
values
(
#{legalId,jdbcType=INTEGER},
#{legalDesc,jdbcType=VARCHAR},
#{sortorder,jdbcType=INTEGER}
)
</insert>

针对自增主键的表,在插入时不需要主键,而是在插入过程自动获取一个自增的主键,比如mysql、sqlserver,可以采用如下两种配置方式:

useGeneratedKeys 
取值范围true|false
默认值是:false。
含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了
<insert id="insert" parameterType="cn.com.bmsoft.base.domain.management.FileManageTree" useGeneratedKeys="true" keyProperty="eventId">
insert into
T_FILE_MANAGE_TREE
(
CODE,
NAME
)
values
(
#{code,jdbcType=VARCHAR},
#{name,jdbcType=VARCHAR}
)
</insert>

<insert id="insert" parameterType="cn.com.bmsoft.smartcity.govnet.domain.Evenlegal">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into
T_GOVNET_EVENT_LEGAL
(
"LEGAL_ID",
"LEGAL_DESC",
"SORTORDER"
)
values
(
#{legalId,jdbcType=INTEGER},
#{legalDesc,jdbcType=VARCHAR},
#{sortorder,jdbcType=INTEGER}
)
</insert>

MyBatis insert操作返回主键的更多相关文章

  1. MyBatis返回主键,MyBatis Insert操作返回主键

    MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...

  2. 160613、MyBatis insert操作返回主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能,针对Sequence主键而言,在执行 ...

  3. MyBatis学习 之 六、insert操作返回主键

       数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType ,入参的全 ...

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

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

  5. (转)Mybatis insert后返回主键给实体对象(Mysql数据库)

    <insert id="insert" parameterType="com.zqgame.game.website.models.Team"> & ...

  6. mybatis insert oracle 返回主键

    mybtis返回oracle主键 只需要加一点代码(红色处的代码)就可以了 <!-- 添加记录到临时表 --> <insert id="insertPlaneStateme ...

  7. mybatis insert后返回主键ID

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

  8. mybatis insert 如何返回主键

    在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作.       使用ibatis的sel ...

  9. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

随机推荐

  1. loj 10000 活动安排

    ****这是一个贪心题,把结束时间排个序,然后留出更多的时间给后面的活动. #include<cstdio> #include<cstring> #include<alg ...

  2. snort安装使用教程(CentOS6.5)

    官网:https://www.snort.org/ 官方文档:https://www.snort.org/documents 2.安装 2.1安装依赖 yum install flex bison - ...

  3. Windows添加用户和组命令

    查看当前存在用户: net user 查看当前用户组: net localgroup 添加用户(以添加用户ls密码abcd1234为例): net user ls abcd1234 /add 添加用户 ...

  4. vsftpd更新和修改版本号教程

    1.rpm包更新 类似以下更新即可 rpm -Uvh vsftpd--.el6.x86_64.rpm 2.源码更新 不懂为什么对于新版本可能只有源码包而没有rpm等包,如此只能以源码更新了. .tar ...

  5. Redis的JAVA连接

    ShardedJedis用法 package com.zhi.demo; import java.util.Arrays; import java.util.List; import redis.cl ...

  6. xubuntu无法进图形界面问题

    http://www.ubuntugeek.com/fix-for-cant-login-after-upgrading-from-ubuntu-13-04-to-ubuntu-13-10.html ...

  7. CAD(镜像对象)(镜像后的微调)(门窗标注)5.14

    由于绘制的cad图形整体是对称的,所以先画了一半,然后再镜像过去.沿着某一对称轴. 注意:1.有些三维内容在二维是选择不上的.2.对称轴上的柱子和墙体之类的不能选中.把轴网和标注的图层锁起来.冻结起来 ...

  8. X的平方

    题目描述: 实现 int sqrt(int x) 函数,计算并返回 x 的平方根. 样例 sqrt(3) = 1 sqrt(4) = 2 sqrt(5) = 2 sqrt(10) = 3 题解: 解法 ...

  9. windows 执行bat脚本

    bat脚本中运行另外一个bat脚本 call 命令 call1.bat内容如下 echo running call1 call2.bat内容如下 @echo off echo start call c ...

  10. 解决ubuntu 14.04 “E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)”的问题

    http://blog.csdn.net/nicolaskaiqi/article/details/39761757