国产化驱动经济自主性与科技创新的未来之路
675
2022-11-02
Mybatis之association和collection用法
目录association和collection用法1.单个关联查询association2.多个关联查询 collection3.鉴别器discriminatorassociation和collection关联查询用法一对多 collection一对一 & 多对一
association和collection用法
1.单个关联查询association
1.1实体之间的关联表示
package com.worldly.config.entity;
import java.io.Serializable;
/**
* @Description
* @Author xiaoqx
* @Version V1.0.0
* @Since 2017/11/26
*/
public class Employee implements Serializable {
private Integer id;
private String name;
private String email;
private String tel;
//关联的部门实体,查询某个人的时候可以把所在部门信息查询出来
private Department dep;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public Department getDep() {
return dep;
}
public void setDep(Department dep) {
this.dep = dep;
}
@Override
public String toString() {
return "{\"Employee\":{"
+ "\"id\":\"" + id + "\""
+ ", \"name\":\"" + name + "\""
+ ", \"email\":\"" + email + "\""
+ ", \"tel\":\"" + tel + "\""
+ ", \"dep\":" + dep
+ "}}";
}
}
1.2 两种关联查询方式
//第一中方式:直接进行关联查询把关联实体的属性在xml中配置
//然后关联查出来
SELECT
*
FROM
t_emp e
INNER JOIN t_dep d ON e.emp_dep = d.dep_id
//第二中查询方式,采用 association中的select来查询
select * from t_emp
SELECT
*
FROM
t_dep d
WHERE
d.dep_id = #{emp_dep}
1.3 两种方式的优劣
a.查询条件相同,所用的时间:从测试结果显示,关联查询要比嵌套查询快一点(结果不一定准确,可能关联表多的时候,结果会有所变化)
a.查询条件相同,所用的时间:从测试结果显示,关联查询要比嵌套查询快一点(结果不一定准确,可能关联表多的时候,结果会有所变化)
b.适用的情况
2.多个关联查询 collection
2.1实体之间的关联表示
package com.worldly.config.entity;
import java.util.List;
/**
* @Description
* @Author xiaoqx
* @Version V1.0.0
* @Since 1.0
* @Date 2017/12/16
*/
public class Department {
private int id;
private String name;
private String addr;
List
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNamel() {
return name;
}
public void setNamel(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public List
return employeeList;
}
public void setEmployeeList(List
this.employeeList = employeeList;
}
@Override
public String toString() {
return "{\"Department\":{"
+ "\"id\":\"" + id + "\""
+ ", \"name\":\"" + name + "\""
+ ", \"addr\":\"" + addr + "\""
+ ", \"employeeList\":" + employeeList
+ "}}";
}
}
2.2 两种关联查询方式
//第一种方式嵌套查询
select="selectEmpBydepId"/> SELECT * FROM t_dep d WHERE d.dep_id = #{param} SELECT * FROM t_emp e WHERE e.emp_dep = #{dep_id} //第二中方式关联查询
select="selectEmpBydepId"/>
SELECT
*
FROM
t_dep d
WHERE
d.dep_id = #{param}
SELECT
*
FROM
t_emp e
WHERE
e.emp_dep = #{dep_id}
//第二中方式关联查询
SELECT
*
FROM
t_dep d
INNER JOIN t_emp e ON d.dep_id = e.emp_dep
WHERE
d.dep_id = #{param}
2.3 多条件查询
select="selectEmpBydepId"/> SELECT * FROM t_dep d WHERE d.dep_id = #{param} SELECT * FROM t_emp e WHERE e.emp_dep = #{depId} AND e.emp_status=#{status} 多条件查询,用{}来包装方法 3.鉴别器discriminator 3.1 鉴别器适用的场景 3.2 鉴别器的实现 association和collection关联查询用法 这里只做最简单的用法,其它方法请自行查询; 一对多 collection ofType="要查询的实体所在包路径" select="要查询的mapper方法" column="关联的实体中的字段=关联的数据库中的字段"/> 举例 ofType="com.crm.project.domain.StsManageStudent" select="com.crm.project.mapper.StsManageStudentMapper.selectStsManageStudentList" column="manageId=manage_id"/> 一对一 & 多对一 javaType="要查询的实体所在包路径" select="要查询的mapper方法"/> 举例 javaType="com.crm.project.domain.StsStudent" http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
select="selectEmpBydepId"/>
SELECT
*
FROM
t_dep d
WHERE
d.dep_id = #{param}
SELECT
*
FROM
t_emp e
WHERE
e.emp_dep = #{depId} AND e.emp_status=#{status}
多条件查询,用{}来包装方法
3.鉴别器discriminator
3.1 鉴别器适用的场景
3.2 鉴别器的实现
association和collection关联查询用法
这里只做最简单的用法,其它方法请自行查询;
一对多 collection
ofType="要查询的实体所在包路径" select="要查询的mapper方法" column="关联的实体中的字段=关联的数据库中的字段"/> 举例 ofType="com.crm.project.domain.StsManageStudent" select="com.crm.project.mapper.StsManageStudentMapper.selectStsManageStudentList" column="manageId=manage_id"/> 一对一 & 多对一 javaType="要查询的实体所在包路径" select="要查询的mapper方法"/> 举例 javaType="com.crm.project.domain.StsStudent" http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
ofType="要查询的实体所在包路径"
select="要查询的mapper方法"
column="关联的实体中的字段=关联的数据库中的字段"/>
举例
ofType="com.crm.project.domain.StsManageStudent" select="com.crm.project.mapper.StsManageStudentMapper.selectStsManageStudentList" column="manageId=manage_id"/> 一对一 & 多对一 javaType="要查询的实体所在包路径" select="要查询的mapper方法"/> 举例 javaType="com.crm.project.domain.StsStudent" http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
ofType="com.crm.project.domain.StsManageStudent"
select="com.crm.project.mapper.StsManageStudentMapper.selectStsManageStudentList"
column="manageId=manage_id"/>
一对一 & 多对一
javaType="要查询的实体所在包路径" select="要查询的mapper方法"/> 举例 javaType="com.crm.project.domain.StsStudent" http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
javaType="要查询的实体所在包路径"
select="要查询的mapper方法"/>
举例
javaType="com.crm.project.domain.StsStudent" http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
javaType="com.crm.project.domain.StsStudent"
http:// select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~