Mybatis之association和collection用法

网友投稿 299 2022-08-30


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 employeeList;

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 getEmployeeList() {

return employeeList;

}

public void setEmployeeList(List employeeList) {

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小时内删除侵权内容。

上一篇:springboot中如何使用minio存储容器
下一篇:蓝桥杯每日一练:阶乘计算(蓝桥杯基础试题答案)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~