Mybatis级联操作

对于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

Mybatis级联操作的相关文章

MyBatis insert操作返回主键

在写毕业设计的时候总是发现有一些小的细节问题,比如说...... MyBatis insert操作后怎么返回主键? 原来不懂的时候是调用一个select语句,将刚刚insert的对象再传入进去查出主键,但是这么写主键就没有意义了,什么都可以放到数据库里面去查. 在说,这样也会引起很多其他的问题.比如说你要查一下post表,在你不知道post_id的情况下你利用了post_name去查询post对象. 万一post_name有重复的呢?怎么办?所以有了这篇博客. 网上有很多大神写了很多mybati

hibernate级联操作

在关系中加入如下代码分别表示不同的级联操作 例如: <many-to-one name="inv" column="igid" class="entity.inventory" cascade="delete"></many-to-one> 1.级联保存 cascade=”save-update” 2.级联删除 cascade=”delete” 3.所有级联 cascade=”all 4.不使用级联 c

Hibernate(八)__级联操作、struts+hibernate+接口编程架构

级联操作 所谓级联操作就是说,当你进行主对象某个操作时,从对象hibernate自动完成相应操作. 比如: Department <---->Student 对象关系,我希望当我删除一个department ,那么就自动删除该部门的所有学生. 再比如: bbs项目主帖<---->回帖 , 把主帖删除,那我们就希望把该主帖的回帖自动删除,这样我们可以使用级联(cascade)操作. 案例:如何配置级联操作,当删除某个部门的时候,我们自动删除其学生. 首先我们在配置文件中修改: <

实体外键约束、级联操作

[实体关系]1.一对多:在多的表,增加一个字段,用于只想该实体所悟的另外的实体的标识.2.多对多:利用一个中间表,表示实体之间的对应关系.(中间表和实体表是一对多关系) [外键约束]foreign key (class_id) references tb_class (class_id); drop table if exists tb_class; create table tb_class( class_id int primary key auto_increment, class_nam

【Hibernate学习】——级联操作

级联策略:负责控制关联两端对象到对象的级联关系的操作,包括更新.删除等,也就是说对一个对象进行更新.删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除. 在前面用了抓取策略之后,后面试了一下级联操作的注解:cascadeType.MERGE方式 @OneToOne(cascade={CascadeType.MERGE}) @JoinColumn(name="company_id") publicCompany getCompany() { return

【SSH三大框架】Hibernate基础第九篇:cascade关联关系的级联操作

这里要说的是Hibernate的关联关系的级联操作,使用cascade属性控制. 依旧用部门和员工举例.多个员工相应一个部门(多对一关联关系) 员工类:Employee.java package cn.itcast.hibernate.domain; public class Employee { private int id; private String name; private Department depart; public int getId() { return id; } pu

12.创建关系时的级联操作

--- 创建关系时的级联操作 alter table student with nocheck --不检查现有数据 add constraint FK_Grade_Student_GradeId foreign key(gradeid) references grade(gradeid) on delete set null --[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] --on--在做何种操作的时候做相应的处理

MyBatis 级联查询一对一与一对多

mybatis是通过映射sql语句把关系模型(数据库中的表)与领域模型(java中的实体类)关联起的  简单分析级联查询:       关系模型中:表与表只有主外键关联       领域模型中:实体类与实体类这间关联,只有一和多的关系.                            一是指别一个实体类以对象属性存在当前实体类中.                            多是指别一个实体类以集合对象属性存在当前实体类中 下面我以例子的形式给大家说明:数据库脚本如下:drop

Hibernate级联操作解密(inverse和cascade)

总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/update/saveOrUpdate时进行关联操作.  delete:在执行delete时进行关联操作. Inverse:在一对多模型中,只能在一的一方设置,inverse的作用就是在级联发生后,会再次更新子表数据的外键为主表的主键.确保子表外键不会为空. 下面演示一个班级学生的例子(一对多): 班