mybatis-映射文件-关联查询

1、关联查询-联级属性封装结果

如果在Employee类中添加一个Department属性。mybatis要怎么传参和查询数据

示例:
a.首先在创建tbl_dept表mybatis-映射文件-关联查询b.在tbl_employee表中添加列,并将tbl_dept表的id设为外键

mybatis-映射文件-关联查询mybatis-映射文件-关联查询

c、创建部门表的javabean,并在Employee类中添加Department属性
mybatis-映射文件-关联查询
mybatis-映射文件-关联查询
d.在接口EmployeeMapperPlus中编写联合查询的方法
mybatis-映射文件-关联查询
e.在EmployeeMapperPlus映射文件中绑定接口方法和编写sql语句mybatis-映射文件-关联查询

注意:
联机查询中tbl_dept表中的属性,我们使用级联属性进行封装,即dept.id

f.编写测试代码
mybatis-映射文件-关联查询

2、使用association定义单个对象的封装规则

我们也可以使用association标签代替联级属性封装
mybatis-映射文件-关联查询

注意:
association可以指定联合的javaBean对象
property=“dept”:指定哪个属性是联合的对象
javaType:指定这个属性对象的类型[不能省略]

3、使用association进行分步查询

在使用association定义单个对象的封装时sql语句十分繁琐,所以我们可以使用分步查询
select * from tbl_employee where id = #{id}
select * from tbl_dept where id=#{id}

实例:
a.创建DepartmentMapper接口中根据id返回Department对象,然后在DepartmentMapper映射文件中绑定接口方法和编写sql语句
mybatis-映射文件-关联查询mybatis-映射文件-关联查询

b.在EmployeeMapperPlus接口中创建一个简单的按id查询员工信息
mybatis-映射文件-关联查询
c.在EmployeeMapperPlus映射文件中绑定接口方法和编写sql语句

mybatis-映射文件-关联查询

注意:
association定义关联对象的封装规则
1、property:employee类中需要额外封装的属性
2、select:表明当前属性是调用了select指定的方法查出的结果
3、column:指定将哪一列的值传给这个方法

4、分步查询的延迟加载

有时候我们只想要查询员工表的信息,不需要查询部门表,使用了分步查询两张表的信息都会打印出来。我们可以在mybatis-config文件中添加lazyLoadingEnabled和aggressiveLazyloading标签来配置。

mybatis-映射文件-关联查询
测试:当使用分布查询,在测试类中只打印Employee的lastName属性

mybatis-映射文件-关联查询
最终只会执行一条sql语句,不会执行select * from tbl_dept where id=#{id}

5、collection标签定义关联结合类型的属性的封装规则

一个部门有多个员工,我们把多个员工用一个集合封装。在mybatis中该如何实现对集合的查询和封装

示例:

a.在Department类中添加Employee类型的集合属性,然后在DepartmentMapper接口中定义放回部门信息的方法
mybatis-映射文件-关联查询
mybatis-映射文件-关联查询
b.在DepartmentMapper映射文件中,绑定接口方法和编写sql语句

mybatis-映射文件-关联查询
c.查询出关联表的各个字段

mybatis-映射文件-关联查询

d.在resultMap标签中将查询出的sql字段和javabean属性名进行映射,并使用collection标签封装Employee对象

mybatis-映射文件-关联查询

注意:
1.property:Department类中的需要封装的集合属性
2.ofType:指定集合属性的类型

e.编写测试类
mybatis-映射文件-关联查询

6、使用collection标签进行分步查询

由于上个例子的代码过于繁琐,所以我们可以使用分步查询
select * from tbl_department where id=1;
select * from tbl_employee where d_id=1;

示例:
a.在DepartmentMapper接口编写select * from tbl_department where id=1;的方法,并绑定到DepartmentMapper映射文件中。

mybatis-映射文件-关联查询
mybatis-映射文件-关联查询

b.在EmployeeMapper接口编写select * from tbl_employee where d_id=1;的方法,并绑定到EmployeeMapper映射文件中。

mybatis-映射文件-关联查询

mybatis-映射文件-关联查询

7、discriminator鉴别器的使用

鉴别器:mybatis可以使用discriminate判断某列的值,然后根据某列的值改变封装行为

案例:
封装Employee
如果查出的是女生,就把部门信息查询出来,否则不查询
如果查出的是男生,就把last_name这一列的值赋给email

a.先创建一个resultMap
mybatis-映射文件-关联查询
b.在resultMap中添加discriminator标签
mybatis-映射文件-关联查询
c.编写测试
mybatis-映射文件-关联查询
mybatis-映射文件-关联查询

上一篇:03 映射文件-增删改查


下一篇:postgreSQL常用命令