在使用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. CF-517B-DP

    http://codeforces.com/contest/1072/problem/B 给出两个数列 a,b 长度为n-1 ,询问是否能构造出一个长度为n的数列t,使得 所有的ab都满足  a[i] ...

  2. sharding-jdbc读写分离原理解读

    原帖地址:https://blog.csdn.net/yanyan19880509/article/details/78170233 前言 很多时候,为了应付DB的高并发读写,我们会采用读写分离技术. ...

  3. MySql习题和答案

    MySQL测试题 一.表关系请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号.ps:针对的是自己的生物成绩比物理成绩高,再把符合 ...

  4. oracle in 函数

    IN操作符      select * from scott.emp where empno=7369 or empno=7566 or empno=7788 or empno=9999:      ...

  5. dubbo 负载均衡

    在系统中可以启动多个 provider 实例,consumer 发起远程调用时,根据指定的负载均衡算法选择一个 provider. 在本机配置多个 provider,使用不同的端口: <dubb ...

  6. jeasyUI DataGrid 根据屏幕宽度自适应, 改变右侧滚动条Size

    PC浏览器的Datagrid可以显示多几列,但是在手机浏览器时,只能有选择性的显示前几列. $(window).resize(function () { if (document.body.clien ...

  7. mysql sql_mode=only_full_group_by问题?

    视图查询的时候本地数据库报错: 解决办法: 1.查看sql_mode select @@global.sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_Z ...

  8. R语言中的采样与生成组合

    不放回采样:sample(1:10, 5, replace = FALSE) 生成组合:

  9. 内联函数inline的用法

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗.为了解决这个问题,特别的引入了inline修饰符,表示为内联函数.  栈空间就是指放 ...

  10. java 的类型转换方式

    隐式转换 byte等整型转int,最高位(符号位保留),中间补0 byte bt=-13; bt 源码:1000 1101 反码:1111 0010 补码:1111 0011 int it=bt; i ...