Mysql同时向两张关联表插入数据

举个栗子,有两张表,user表的主键id是travel_user表的一个字段,要求向user表添加数据时,同时向travel_user表添加一条数据。两张表的具体结构如下:

在这里插入图片描述
上表的id就是下表的uid
在这里插入图片描述
请看service层的代码具体实现:

public boolean insert(DsjUser user,Integer tid) throws Exception {
        //向user表添加数据
		int i = umapper.insert(user);
		if(i > 0) {
            //向travel_user表添加数据
			tuMapper.insert(tid,user.getId());
			return true;
		}
		return false;
}

这样写会出现一个问题,user.getId()是获取不到值的,所以就得在user的mapper.xml文件里面进行设置

<insert id=“insert” parameterType=“dsjUser”
useGeneratedKeys=“true” keyProperty=“id”>

只要在user的insert标签里加上加粗的两个属性,就可以获取到新加进去的数据的id;

当然,还有另外一种方法(不推荐):

<insert id="insert" parameterType="dsjUser">
    <!--AFTER :insert 先执行.    -->
      <selectKey order="AFTER" keyProperty="id" resultType="int">
      <!-- 获取最后一次执行insert语句的 key -->
	    select LAST_INSERT_ID() 
      </selectKey>
  	insert into dsj_user(id, name, gender, birthday, phone, idCard) 
  	 values(#{id}, #{name}, #{gender},#{birthday},#{phone},#{idcard})
  </insert>

在insert标签里面加上selectKey标签,里面写上一条sql语句,也可以获取到id;LAST_INSERT_ID() 是mysql本身的一个函数,可以获取到最后一个添加的数据的id

如果报错

Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found. Available parameters are [telecomOrder, param1]
看一下mapper中是否加了 @Param 注解
有的话,insert标签中应该这样写: keyProperties="role.id"
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值