zoukankan      html  css  js  c++  java
  • MyBatis insert操作返回主键

    在使用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>        
  • 相关阅读:
    P2319 [HNOI2006]超级英雄
    P4302 [SCOI2003]字符串折叠
    P1122 最大子树和
    HDU——2089 不要62
    P4555 最长双回文串
    P1463 [HAOI2007]反素数
    P2412 查单词
    P2787 语文1(chin1)- 理理思维
    P3078 [USACO13MAR]扑克牌型Poker Hands
    ubuntu中desktop与alternate版本的区别(转载)
  • 原文地址:https://www.cnblogs.com/samwang88/p/6484984.html
Copyright © 2011-2022 走看看