• Mybatis探究-----一对一、一对多关联查询


       1.一对一关联

    声明两个实体类

    1)部门类

    package com.entity;
    
    import java.util.UUID;
    
    /**
     * 部门类
     * 
     * @author yyx 2019年9月17日
     */
    public class Department {
        /**
         * 部门ID
         */
        private String deptId;
        /**
         * 部门名称
         */
        private String deptName;
    
        public Department() {
            super();
        }
    
        public Department(String deptId, String deptName) {
            super();
            this.deptId = deptId;
            this.deptName = deptName;
        }
    
        public String getDeptId() {
            return deptId;
        }
    
        public void setDeptId(String deptId) {
            this.deptId = deptId;
        }
    
        public String getDeptName() {
            return deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
        @Override
        public String toString() {
            return "Department [deptId=" + deptId + ", deptName=" + deptName + "]";
        }
    
        public static void main(String[] args) {
            String str = UUID.randomUUID().toString();
            System.out.println(str);
        }
    }

    雇员类

    package com.entity;
    
    import java.util.UUID;
    
    /**
     * 雇员类
     * 
     * @author yyx 2019年9月17日
     */
    public class Employee {
        /**
         * 雇员ID
         */
        private String empId;
        /**
         * 雇员名称
         */
        private String empName;
        /**
         * 部门
         */
        private Department empDept;
    
        public Employee() {
            super();
        }
    
        public Employee(String empId, String empName, Department empDept) {
            super();
            this.empId = empId;
            this.empName = empName;
            this.empDept = empDept;
        }
    
        public String getEmpId() {
            return empId;
        }
    
        public void setEmpId(String empId) {
            this.empId = empId;
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        public Department getEmpDept() {
            return empDept;
        }
    
        public void setEmpDept(Department empDept) {
            this.empDept = empDept;
        }
    
        @Override
        public String toString() {
            return "Employee [empId=" + empId + ", empName=" + empName + ", empDept=" + empDept + "]";
        }
    
        public static void main(String[] args) {
            String str = UUID.randomUUID().toString();
            System.out.println(str);
        }
    }

    1.1 级联属性查询

    EmployeeMapper.xml配置

    <resultMap type="com.entity.Employee" id="EmployeeResult">
        <id column="empId" property="empId" />
        <result column="empName" property="empName" />
        <result column="deptId" property="empDept.deptId" />
        <result column="deptName" property="empDept.deptName" />
    </resultMap>
    
    <select id="getEmpAndDept" resultMap="EmployeeResult">
         select e.empId,e.empName,d.deptId,d.deptName from t_emp e,t_dept 
         d where e.deptId=d.deptId
    </select>

    1.2 单步查询

    EmployeeMapper.xml配置

    <resultMap type="com.entity.Employee" id="EmployeeResult">
        <id column="empId" property="empId" />
        <result column="empName" property="empName" />
        <!-- association可以指定联合的javaBean对象 
              property="dept":指定哪个属性是联合的对象 
              javaType:指定这个属性对象的类型[不能省略] 
         -->
         <association property="empDept"
            javaType="com.entity.Department">
            <id column="deptId" property="deptId" />
            <result column="deptName" property="deptName" />
         </association>
    </resultMap>
    
    <select id="getEmpAndDept" resultMap="EmployeeResult">
         select e.empId,e.empName,d.deptId,d.deptName from t_emp e,t_dept d 
         where e.deptId=d.deptId
    </select>

    1.3 分步查询

    EmployeeMapper.xml配置

    <resultMap type="com.entity.Employee" id="EmployeeResult">
            <id column="empId" property="empId" />
            <result column="empName" property="empName" />
            <!-- association定义关联对象的封装规则 
                     select:表明当前属性是调用select指定的方法查出的结果 
                     column:指定将哪一列的值传给这个方法 
                流程:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property指定的属性 -->
            <association property="empDept"
                select="com.entity.DepartmentMapper.getDeptById" column="deptId">
            </association>
        </resultMap>
        <select id="getEmpAndDept" resultMap="EmployeeResult">
            select * from t_emp
        </select>

    DepartmentMapper.xml配置

        <select id="getDeptById" resultType="com.entity.Department">
            select deptId,deptName from t_dept where deptId=#{deptId}
        </select>

       2.一对多关联

    声明两个实体类

    部门类

    package com.entity;
    
    import java.util.List;
    import java.util.UUID;
    
    /**
     * 部门类
     * 
     * @author yyx 2019年9月17日
     */
    public class Department {
        /**
         * 部门ID
         */
        private String deptId;
        /**
         * 部门名称
         */
        private String deptName;
        
        private List<Employee> deptEmps;
    
        public Department() {
            super();
        }
    
        public Department(String deptId, String deptName) {
            super();
            this.deptId = deptId;
            this.deptName = deptName;
        }
    
        public String getDeptId() {
            return deptId;
        }
    
        public void setDeptId(String deptId) {
            this.deptId = deptId;
        }
    
        public String getDeptName() {
            return deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }        
    
        @Override
        public String toString() {
            return "Department [deptId=" + deptId + ", deptName=" + deptName + ", deptEmps=" + deptEmps+ "]";
        }
    
        public static void main(String[] args) {
            String str = UUID.randomUUID().toString();
            System.out.println(str);
        }
    }

    雇员类

    package com.entity;
    
    import java.util.UUID;
    
    /**
     * 雇员类
     * 
     * @author yyx 2019年9月17日
     */
    public class Employee {
        /**
         * 雇员ID
         */
        private String empId;
        /**
         * 雇员名称
         */
        private String empName;
    
        public Employee() {
            super();
        }
    
        public Employee(String empId, String empName) {
            super();
            this.empId = empId;
            this.empName = empName;
        }
    
        public String getEmpId() {
            return empId;
        }
    
        public void setEmpId(String empId) {
            this.empId = empId;
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }    
    
        @Override
        public String toString() {
            return "Employee [empId=" + empId + ", empName=" + empName + "]";
        }
    
        public static void main(String[] args) {
            String str = UUID.randomUUID().toString();
            System.out.println(str);
        }
    }

    2.1 单步查询

    DepartmentMapper.xml配置

    <resultMap type="com.entity.Department" id="DepartmentResult">
            <id column="deptId" property="deptId" />
            <result column="deptName" property="deptName" />
            <collection property="deptEmps" ofType="com.entity.Employee">
                <id column="empId" property="empId" />
                <result column="empName" property="empName" />
            </collection>
        </resultMap>
    
        <select id="getDeptAndEmps" resultMap="DepartmentResult">
            select
            d.deptId,d.deptName,e.empId,e.empName
            from t_dept d left join t_emp e
            on d.deptId=e.deptId
        </select>

    2.2 分步查询

    DepartmentMapper.xml配置

    <resultMap type="com.entity.Department" id="DepartmentResult">
            <id column="deptId" property="deptId" />
            <id column="deptName" property="deptName" />
            <!-- 扩展:多列的值传递过去: 将多列的值封装map传递; column="{key1=column1,key2=column2}" fetchType="lazy":表示使用延迟加载; 
                - lazy:延迟 - eager:立即 -->
            <collection property="deptEmps" select="com.dao.EmployeeMapper.getEmps"
                column="deptId" fetchType="lazy"></collection>
        </resultMap>
    
        <select id="getDeptAndEmps" resultMap="DepartmentResult">
            select * from t_dept
        </select>

    EmployeeMapper.xml配置

    <resultMap type="com.entity.Employee" id="EmployeeResult">
            <id column="empId" property="empId" />
            <result column="empName" property="empName" />
        </resultMap>
    
        <select id="getEmps" resultMap="EmployeeResult">
            select * from t_emp where deptId=#{deptId}
        </select>

    一对一、多对一数据库语句

    /*
    SQLyog Ultimate v12.09 (64 bit)
    MySQL - 5.7.9-log : Database - db_mybatis_associate
    *********************************************************************
    */
    
    
    /*!40101 SET NAMES utf8 */;
    
    /*!40101 SET SQL_MODE=''*/;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_mybatis_associate` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    USE `db_mybatis_associate`;
    
    /*Table structure for table `t_dept` */
    
    DROP TABLE IF EXISTS `t_dept`;
    
    CREATE TABLE `t_dept` (
      `deptId` varchar(50) NOT NULL,
      `deptName` varchar(20) NOT NULL,
      PRIMARY KEY (`deptId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    /*Data for the table `t_dept` */
    
    insert  into `t_dept`(`deptId`,`deptName`) values ('6cf35a30-3b09-432b-bae6-14ab8cb6c964','销售部'),('7135aeab-f50e-4db2-b0ea-6cd007223203','生产部');
    
    /*Table structure for table `t_emp` */
    
    DROP TABLE IF EXISTS `t_emp`;
    
    CREATE TABLE `t_emp` (
      `empId` varchar(50) NOT NULL,
      `empName` varchar(20) NOT NULL,
      `deptId` varchar(50) NOT NULL,
      PRIMARY KEY (`empId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    /*Data for the table `t_emp` */
    
    insert  into `t_emp`(`empId`,`empName`,`deptId`) values ('b14af873-ff15-45d3-ab37-8a2718d8fb35','杜甫','6cf35a30-3b09-432b-bae6-14ab8cb6c964'),('cebdaba7-bca3-4812-a52f-e9b0d38a13e4','李斯','6cf35a30-3b09-432b-bae6-14ab8cb6c964');
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    View Code
  • 相关阅读:
    go语言:go写的日记簿(开源)
    64位pyqt打包生成的python64位的版本,在win32位下无效
    分享:Notepad++ 6.2.3 发布,开源文本编辑器
    PyQt v4 Python Bindings for Qt v4
    python基于http协议编程:httplib,urllib和urllib2
    XP下IIS5运行MVC站点
    你必须要知道的架构知识~第六章 .NET原生态的ORM软件对比
    从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作
    MVC最为标准的添加操作(从实体验证到实体入库)
    MVC命名空间中的~UrlHelper中的Action方法告诉我们方法重载的重要性(路由的统一)
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/10620916.html
Copyright © 2020-2023  润新知