Mybatis插入数据返回主键;Mybatis参数为实体加其他参数;

场景描述:

       之前遇到两个问题,刚好今天两个问题同时出现,就做个记录了。

  1. 开发过程中,需要在插入的一条数据时,返回该条记录的主键用于后面的操作;
  2. 传入的参数为:实体和基本数据类型;

Mapper部分: 

       只需要实体和基本数据类型都加上@Param,并和xml中的值对应上即可。

 int insert(@Param("orgNo")Integer orgNo,@Param("pubEmp")PubEmp pubEmp);

Mybatis部分: 

       由于业务规则需要修改主键的规则,如下函数。另外,由于参数为实体和其他参数,所以导致,不能直接在keyProperty使用id,不然实体类中id是为空的,所以需要使用实体.id,然后keyProperty需要与下面的values里的主键对应。

  <insert id="insert" parameterType="java.lang.Object">
    <selectKey keyProperty="pubEmp.id" order="BEFORE" resultType="java.lang.Integer">
      select substr(#{orgNo,jdbcType=VARCHAR},0,3)||SEQ_PUB_EMP.NEXTVAL from dual
    </selectKey>
    insert into PUB_EMP (ID, CODE, NAME, 
      SEX, STATE, ID_CARD, 
      BIRTHDAY, WORK_UNIT, BRANCH_CODE, 
      TITLES_ID, JOB_TITLE_ID, MAJOR, 
      MOBILE_PHONE, FAMILY_PHONE, WORK_PHONE, 
      EMAIL, CREATE_EMPID, CREATE_TIME, 
      MODIFY_EMPID, MODIFY_TIME)
    values (#{pubEmp.id,jdbcType=DECIMAL}, #{pubEmp.code,jdbcType=VARCHAR}, #{pubEmp.name,jdbcType=VARCHAR}, 
      #{pubEmp.sex,jdbcType=DECIMAL}, #{pubEmp.state,jdbcType=DECIMAL}, #{pubEmp.idCard,jdbcType=VARCHAR}, 
      #{pubEmp.birthday,jdbcType=TIMESTAMP}, #{pubEmp.workUnit,jdbcType=VARCHAR}, #{pubEmp.branchCode,jdbcType=VARCHAR}, 
      #{pubEmp.titlesId,jdbcType=DECIMAL}, #{pubEmp.jobTitleId,jdbcType=DECIMAL}, #{pubEmp.major,jdbcType=VARCHAR}, 
      #{pubEmp.mobilePhone,jdbcType=VARCHAR}, #{pubEmp.familyPhone,jdbcType=VARCHAR}, #{pubEmp.workPhone,jdbcType=VARCHAR}, 
      #{pubEmp.email,jdbcType=VARCHAR}, #{pubEmp.createEmpid,jdbcType=DECIMAL}, #{pubEmp.createTime,jdbcType=TIMESTAMP}, 
      #{pubEmp.modifyEmpid,jdbcType=DECIMAL}, #{pubEmp.modifyTime,jdbcType=TIMESTAMP})
  </insert>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值