举个栗子,有两张表,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