对于Mybatis级联操作,网上好多资料都在讲级联查询的一些Mapping的标签,但是对于级联更新和插入的资料不是很多,但是这似乎是和Mybatis关系不大,只是之前用Hibernate用习惯了,感觉这些东西是由持久层框架l来维护的,由于Mybatis比Hibernate高效,摒弃了这些,所以对于INSERT和UPDATE的级联关系大部分是由数据库本身去维护的。
级联更新
有两个对象A和B,B的主键是A的外键,先需求是把B的保存后,在A的外键那随之更新:
(1)先插入B到数据库中,
(2)从数据库在查出
(3)将B对象set到A中 更新A(或者插入B到数据库后得到其ID主键然后单纯的update A的该字段)
写法:
<update id="updateUser" parameterType="User">
update user set
username=#{username},password=#{password},role=#{role},
photo=#{photo.id},
emails=#{emails}
where id=#{id}
</update>
返回插入或者更新的主键在Mapping中配置加上其中id为MODEL对象表示逐渐的属性值:
keyProperty="id" useGeneratedKeys="true"
级联删除:
如果数据库外键关联设置为CASEADE:
如果要删除多的一方,则可直接删除,并且与之关联的一方也删除了
如果数据库关联外键没有设置为CASEADE
在删除时需要先把引用外键的一方设置为null,然后在删除。
级联插入;
先插入一条一的记录,然后得到其主键
然后查找出刚插入进去的记录,通过多的一方的SET方法将其SET进去
然后将多的一方的对象统一SAVE进去。
时间: 2024-11-05 17:26:12