在使用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. docker实战系列之docker 端口映射错误解决方法

    错误: Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCK ...

  2. vue组件通信&&v兄弟组件通信eventbus遇到的问题(多次触发、第一次不触发)

    组件通讯包括:父子组件间的通信和兄弟组件间的通信.在组件化系统构建中,组件间通信必不可少的 (vuex以后再说). 父组件--> 子组件 1. 属性设置 父组件关键代码如下: <templ ...

  3. iOS 强大第三方资源库

    Github用法 git-recipesGit recipes in Chinese. 高质量的Git中文教程. lark怎样在Github上面贡献代码 my-git有关 git 的学习资料 giti ...

  4. 运维相关 docker

  5. 微信小程序生成二维码

    微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode  代码片段如下: const QR = require(". ...

  6. POJ 1001 Exponentiation(大数运算)

    POJ 1001 Exponentiation 时限:500 ms   内存限制:10000 K 提交材料共计: 179923   接受: 43369 描述:求得数R( 0.0 < R < ...

  7. 读书笔记 C# 接口中的索引器之浅析

    在C#中,可以在类.结构或接口中用this关键字声明索引器,在索引器内部用get或set访问器访问类中集合的某项值.因此可以将索引器看作是类的属性一样去定义.索引器常用定义格式如下: public i ...

  8. Maven 加载ojdbc14.jar报错,解决方法

    因为oracle的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中去. 首先下载 ojdbc14  https://pan.baidu.com/s ...

  9. 前端基础之JavaScript进阶

    一.流程控制 if - else var a = 10; if (a >5){ console.log("yes"); }else { console.log("n ...

  10. 首次编译Java小程序

    public class helloworld { public static void main(string[] args) { system.out.println("hello wo ...