MyBatis中一对多和多对一表关系查询案例(二)

1 表结构 员工表和部门表:一个员工所属一个部门,一个部门下有多个员工,这样就形成了一对多和多对一的表关系,下面用Mybatis展示给大家。
在这里插入图片描述
在这里插入图片描述

2 表中的模拟数据内容
在这里插入图片描述
在这里插入图片描述
3 idea中项目的整体结构
在这里插入图片描述
本项目采用Maven的管理形式,通过使用Maven中聚合来管理各个层次。如果想要了解Maven聚合关系的请在留言处,给我留言,我也会解答大家在学习过程中遇到的问题。
在这里插入图片描述
4 Pojo层
在这里插入图片描述

package com.zxf.pojo;

import java.util.List;

public class Dept {
    private String dept_id;
    private String dept_name;
    private String dept_manager;

    private List<Employee> employees;

    public String getDept_id() {
        return dept_id;
    }

    public void setDept_id(String dept_id) {
        this.dept_id = dept_id;
    }

    public String getDept_name() {
        return dept_name;
    }

    public void setDept_name(String dept_name) {
        this.dept_name = dept_name;
    }

    public String getDept_manager() {
        return dept_manager;
    }

    public void setDept_manager(String dept_manager) {
        this.dept_manager = dept_manager;
    }

    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

package com.zxf.pojo;

import java.io.Serializable;

public class Employee implements Serializable {
    private String emp_no;
    private String emp_name;
    private String dept_id;
    private String emp_gender;
    private String emp_email;

    //员工基本情况表和部门信息表是多对一的关系,每一个员工只归属一个部门
    private Dept dept;

    public String getEmp_no() {
        return emp_no;
    }

    public void setEmp_no(String emp_no) {
        this.emp_no = emp_no;
    }

    public String getEmp_name() {
        return emp_name;
    }

    public void setEmp_name(String emp_name) {
        this.emp_name = emp_name;
    }

    public String getDept_id() {
        return dept_id;
    }

    public void setDept_id(String dept_id) {
        this.dept_id = dept_id;
    }

    public String getEmp_gender() {
        return emp_gender;
    }

    public void setEmp_gender(String emp_gender) {
        this.emp_gender = emp_gender;
    }

    public String getEmp_email() {
        return emp_email;
    }

    public void setEmp_email(String emp_email) {
        this.emp_email = emp_email;
    }

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }
}

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mybatisProject3</artifactId>
        <groupId>com.zxf</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>mybatisProject3-pojo</artifactId>
</project>

4 mapper层

package com.zxf.mapper;

import com.zxf.pojo.Dept;

public interface DeptMapper {
    Dept selectDeptById(String dept_id);
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zxf.mapper.DeptMapper">
    <!-- 根据 dept_id 查询部门信息,返回resultMap -->
    <select id="selectDeptById" parameterType="string" resultMap="deptResultMap">
        SELECT * from dept WHERE dept_id=#{dept_id}
    </select>
    <!-- 映射 Dept 对象的 resultMap -->
      <resultMap id="deptResultMap" type="dept">
            <id property="dept_id" column="dept_id"></id>
            <result property="dept_name" column="dept_name"></result>
          <result property="dept_manager" column="dept_manager"></result>
          <!-- 一对多关联映射:collection fetchType="lazy"表示延迟加载 -->
          <collection property="employees" javaType="ArrayList" column="dept_id"
                      ofType="Employee"
                      select="com.zxf.mapper.EmployeeMapper.selectEmployeeByDeptId"
                    >
              <id property="emp_no" column="emp_no"></id>
              <result property="dept_id" column="dept_id"></result>
              <result property="emp_name" column="emp_name"></result>
              <result property="emp_email" column="emp_email"></result>
              <result property="emp_gender" column="emp_gender"></result>
          </collection>
      </resultMap>
</mapper>
package com.zxf.mapper;

import com.zxf.pojo.Employee;

public interface EmployeeMapper {
    Employee selectEmployeeById(String emp_no);

}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zxf.mapper.EmployeeMapper">
    <!-- 根据 emp_no 查询员工信息,多表连接,返回resultMap -->
    <select id="selectEmployeeById" parameterType="string" resultMap="employeeResultMap">
         SELECT * from employee_basic e ,dept d
         WHERE e.dept_id = d.dept_id
         and  e.emp_no = #{emp_no}
    </select>
    <!-- 根据部门 dept_id 查询员工信息,返回resultMap -->
    <select id="selectEmployeeByDeptId" parameterType="string" resultMap="employeeResultMap">
            SELECT * from employee_basic WHERE dept_id = #{dept_id}
    </select>
    <!-- 映射employee对象的resultMap -->
    <resultMap id="employeeResultMap" type="Employee">
        <id property="emp_no" column="emp_no"></id>
        <result property="dept_id" column="dept_id"></result>
        <result property="emp_name" column="emp_name"></result>
        <result property="emp_email" column="emp_email"></result>
        <result property="emp_gender" column="emp_gender"></result>
        <!-- 多对一关联映射:association -->
        <association property="dept"  javaType="dept">
            <id  property="dept_id" column="dept_id"></id>
            <result property="dept_name" column="dept_name"></result>
            <result property="dept_manager" column="dept_manager"></result>
        </association>
    </resultMap>
</mapper>

有关数据库连接和log4j的配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.148:3306/test
jdbc.user=root
jdbc.password=abc123
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties"/>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <package name="com.zxf.pojo"/>
    </typeAliases>

    <!-- default引用environment的id,当前所使用的环境 -->
    <environments default="abc">
        <environment id="abc">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
       <mapper class="com.zxf.mapper.EmployeeMapper"></mapper>
       <mapper class="com.zxf.mapper.DeptMapper"></mapper>
    </mappers>
</configuration>
log4j.rootCategory=DEBUG,CONSOLE,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{YYYY-MM-dd hh:mm:ss} %L %m %n

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=h://zhang.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %n  %L

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mybatisProject3</artifactId>
        <groupId>com.zxf</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>mybatisProject3-mapper</artifactId>
   <dependencies>
       <dependency>
           <groupId>com.zxf</groupId>
           <artifactId>mybatisProject3-pojo</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>
       <!-- mybatis -->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
       </dependency>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
       </dependency>
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>
   </dependencies>
</project>

5 service层,这里只写了简单的测试类
在这里插入图片描述

package com.zxf;

import com.zxf.mapper.DeptMapper;
import com.zxf.pojo.Dept;
import com.zxf.pojo.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class Test1 {
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession session;
    private InputStream is;

    private DeptMapper deptMapper;
    @Before  //用于测试方法之前执行。
    public   void init() throws Exception{
        is= Resources.getResourceAsStream("zhangMyBatis.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        session=sqlSessionFactory.openSession();
        deptMapper=session.getMapper(DeptMapper.class);
    }
    @After  //用于测试方法之后执行。
    public void destory()throws Exception{
        session.commit();
        session.close();
        is.close();
    }

    @Test
    public void test1(){
        //通过部门编号查询,当前部门的人员
        Dept dept = deptMapper.selectDeptById("101");
          System.out.print(dept.getDept_name());
          System.out.println(" 部门负责人编号:"+dept.getDept_manager());
          System.out.println("***********************************************");
        List<Employee> employees = dept.getEmployees();
         for (Employee e:employees){
             System.out.print(e.getEmp_name()+" ");
             System.out.println(e.getEmp_gender());

         }
    }

}

在这里插入图片描述
103 技术部门的人员情况
在这里插入图片描述

package com.zxf;

import com.zxf.mapper.DeptMapper;
import com.zxf.mapper.EmployeeMapper;
import com.zxf.pojo.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;

public class Test2 {
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession session;
    private InputStream is;

    private EmployeeMapper employeeMapper;

    @Before  //用于测试方法之前执行。
    public   void init() throws Exception{
        is= Resources.getResourceAsStream("zhangMyBatis.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        session=sqlSessionFactory.openSession();
        employeeMapper=session.getMapper(EmployeeMapper.class);
    }
    @After  //用于测试方法之后执行。
    public void destory()throws Exception{
        session.commit();
        session.close();
        is.close();
    }

    @Test
    public void test1(){
        Employee employee = employeeMapper.selectEmployeeById("HW9801");
        System.out.print(employee.getEmp_name()+" 所在部门:");
        System.out.println(employee.getDept().getDept_name());

    }
}

在这里插入图片描述
例如员工编号:hw9803所在的部门
在这里插入图片描述
6 最后还有个父模块的POM文件配置内容

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.zxf</groupId>
  <artifactId>mybatisProject3</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>mybatisProject3-pojo</module>
    <module>mybatisProject3-mapper</module>
    <module>mybatisProject3-service</module>
  </modules>
  <!--对依赖的坐标的版本做集中管理-->
  <properties>
    <junit.version>4.12</junit.version>
    <mybatis.version>3.2.8</mybatis.version>
    <mysql.version>5.1.32</mysql.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>
     <dependencyManagement>
         <dependencies>
           <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
           </dependency>
           <!-- mybatis -->
           <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>${mybatis.version}</version>
           </dependency>
           <!--mysql-->
           <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql.version}</version>
           </dependency>
           <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>${log4j.version}</version>
           </dependency>
         </dependencies>
     </dependencyManagement>
  <build>
    <!--配置资源拷贝插件-->
     <resources>
       <resource>
         <directory>src/main/java</directory>
         <includes>
           <include>**/*.xml</include>
         </includes>
       </resource>

       <resource>
         <directory>src/main/resouces</directory>
         <includes>
           <include>**/*.xml</include>
           <include>**/*.properties</include>
         </includes>
       </resource>

     </resources>

  </build>

</project>

猜你喜欢

转载自blog.csdn.net/zhang6132326/article/details/105177720
今日推荐