文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis中association和collection怎么用

2023-06-29 02:43

关注

这篇文章将为大家详细讲解有关Mybatis中association和collection怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

association和collection用法

1.单个关联查询association

1.1实体之间的关联表示

package com.worldly.config.entity;import java.io.Serializable;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中配置//然后关联查出来<resultMap id="emp2ResultMap" type="com.worldly.config.entity.Employee">        <id column="emp_id" property="id"></id>        <result column="emp_name" property="name"/>        <result column="emp_email" property="email"/>        <result column="emp_tel" property="tel"/>        <association property="dep" column="emp_dep" javaType="com.worldly.config.entity.Department">            <id column="dep_id" property="id"/>            <result column="dep_name" property="name"/>            <result column="dep_addr" property="addr"/>        </association>    </resultMap>    <select id="selectEmployAll" resultMap="emp2ResultMap">        SELECT            *        FROM            t_emp e        INNER JOIN t_dep d ON e.emp_dep = d.dep_id    </select>
//第二中查询方式,采用 association中的select来查询<resultMap id="empResultMap" type="com.worldly.config.entity.Employee">        <id column="emp_id" property="id"></id>        <result column="emp_name" property="name"/>        <result column="emp_email" property="email"/>        <result column="emp_tel" property="tel"/>        <association column="emp_dep" property="dep" javaType="com.worldly.config.entity.Department" select="selectDepByCondition"></association>    </resultMap>    <select id="selectEmployeeList" resultMap="empResultMap" databaseId="mysql">        select * from t_emp    </select>    <resultMap id="depResultMap" type="com.worldly.config.entity.Department">        <id column="dep_id" property="id"></id>        <result column="dep_name" property="name"/>        <result column="dep_addr" property="addr"/>    </resultMap>    <select id="selectDepByCondition" resultMap="depResultMap">        SELECT        *        FROM        t_dep d        WHERE        d.dep_id = #{emp_dep}    </select>

1.3 两种方式的优劣

a.查询条件相同,所用的时间:从测试结果显示,关联查询要比嵌套查询快一点(结果不一定准确,可能关联表多的时候,结果会有所变化)

a.查询条件相同,所用的时间:从测试结果显示,关联查询要比嵌套查询快一点(结果不一定准确,可能关联表多的时候,结果会有所变化)

Mybatis中association和collection怎么用

Mybatis中association和collection怎么用

b.适用的情况

2.多个关联查询 collection

2.1实体之间的关联表示

package com.worldly.config.entity;import java.util.List;public class Department {    private int id;    private String name;    private String addr;    List<Employee> 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<Employee> getEmployeeList() {        return employeeList;    }    public void setEmployeeList(List<Employee> employeeList) {        this.employeeList = employeeList;    }    @Override    public String toString() {        return "{\"Department\":{"                + "\"id\":\"" + id + "\""                + ", \"name\":\"" + name + "\""                + ", \"addr\":\"" + addr + "\""                + ", \"employeeList\":" + employeeList                + "}}";    }}

2.2 两种关联查询方式

//第一种方式嵌套查询<resultMap id="depResultMap2" type="com.worldly.config.entity.Department">        <id column="dep_id" property="id"></id>        <result column="dep_name" property="name"/>        <result column="dep_addr" property="addr"/>        <collection column="dep_id" property="employeeList" javaType="java.util.List" ofType="com.worldly.config.entity.Employee"           select="selectEmpBydepId"/>    </resultMap>    <select id="selectDepByCondition" resultMap="depResultMap2">        SELECT            *        FROM            t_dep d        WHERE            d.dep_id = #{param}    </select>    <resultMap id="empResultMap" type="com.worldly.config.entity.Employee">        <id column="emp_id" property="id"></id>        <result column="emp_name" property="name"/>        <result column="emp_email" property="email"/>        <result column="emp_tel" property="tel"/>    </resultMap>    <select id="selectEmpBydepId" resultMap="empResultMap">        SELECT            *        FROM            t_emp e        WHERE            e.emp_dep = #{dep_id}    </select>
//第二中方式关联查询<resultMap id="dep2ResultMap" type="com.worldly.config.entity.Department">        <id column="dep_id" property="id"></id>        <result column="dep_name" property="name"/>        <result column="dep_addr" property="addr"/>        <collection property="employeeList" ofType="com.worldly.config.entity.Employee">            <id column="emp_id" property="id"></id>            <result column="emp_name" property="name"/>            <result column="emp_email" property="email"/>            <result column="emp_tel" property="tel"/>        </collection>    </resultMap>    <select id="selectDepWithEmp" resultMap="dep2ResultMap">        SELECT            *        FROM            t_dep d        INNER JOIN t_emp e ON d.dep_id = e.emp_dep        WHERE            d.dep_id = #{param}    </select>

2.3 多条件查询

<resultMap id="depResultMap2" type="com.worldly.config.entity.Department">        <id column="dep_id" property="id"></id>        <result column="dep_name" property="name"/>        <result column="dep_addr" property="addr"/>        <result column="dep_status" property="status"/>        <collection column="{depId=dep_id,status=dep_status}" property="employeeList" javaType="java.util.List" ofType="com.worldly.config.entity.Employee"           select="selectEmpBydepId"/>    </resultMap>    <select id="selectDepByCondition" resultMap="depResultMap2">        SELECT            *        FROM            t_dep d        WHERE            d.dep_id = #{param}    </select>    <resultMap id="empResultMap" type="com.worldly.config.entity.Employee">        <id column="emp_id" property="id"></id>        <result column="emp_name" property="name"/>        <result column="emp_email" property="email"/>        <result column="emp_tel" property="tel"/>    </resultMap>    <select id="selectEmpBydepId" resultMap="empResultMap">        SELECT            *        FROM            t_emp e        WHERE            e.emp_dep = #{depId} AND e.emp_status=#{status}    </select>

多条件查询,用{}来包装方法

Mybatis中association和collection怎么用

3.鉴别器discriminator

3.1 鉴别器适用的场景

3.2 鉴别器的实现 

association和collection关联查询用法

这里只做最简单的用法,其它方法请自行查询;

一对多 collection

 <collection property="要查询的实体集合" javaType="java.util.List"                    ofType="要查询的实体所在包路径"                    select="要查询的mapper方法"                    column="关联的实体中的字段=关联的数据库中的字段"/>

举例

 <collection property="stsManageStudentList" javaType="java.util.List"                    ofType="com.crm.project.domain.StsManageStudent"                    select="com.crm.project.mapper.StsManageStudentMapper.selectStsManageStudentList"                    column="manageId=manage_id"/>

一对一 & 多对一

<association property="要查询的实体" column="数据库中的关联字段"                     javaType="要查询的实体所在包路径"                     select="要查询的mapper方法"/>

举例

<association property="stsStudent" column="student_id"                     javaType="com.crm.project.domain.StsStudent"                     select="com.crm.project.mapper.StsStudentMapper.selectStsStudentById"/>

关于“Mybatis中association和collection怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯