一对多关系实现部门—>员工的查询

导读:本篇文章讲解 一对多关系实现部门—>员工的查询,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

注意:这里是在《一对一关系实现员工—>部门的查询》的基础进行编写代码
《一对一关系实现员工—>部门的查询》

参考代码:

<?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.yzh7.mapper.DeptMapper">

    <!--1对多关联映射
        autoMapping:让mybatis自动完成属性和列名映射。
                    主数据的id(主键必须配置)
    -->
    <resultMap id="deptMap" type="dept" autoMapping="true">
        <!--映射部门数据
           id:表示主键列的映射定义
           result:普通列的映射
           property:实体属性
           column:查询表中的列
        -->
        <id property="deptId" column="dept_id"/>
<!--        <result property="deptName" column="dept_name"/>-->
<!--        <result property="description" column="description"/>-->
        <!--用collection定义部门中的员工集合数据的映射关系
           ofType:用于指定集合中元素的类型
        -->
        <collection property="empList" ofType="emp" autoMapping="true">
<!--            <id property="empId" column="emp_id"/>-->
<!--            <result property="empName" column="emp_name"/>-->
<!--            <result property="sex" column="sex"/>-->
<!--            <result property="phone" column="phone"/>-->
        </collection>
    </resultMap>

    <select id="listAll" resultMap="deptMap">
        select
            d.dept_id,d.dept_name,d.description,
            e.emp_id,e.emp_name,e.sex,e.phone
        from t_dept d
        join t_emp e
        on d.dept_id=e.dept_id
    </select>

</mapper>

项目整体布局:

在这里插入图片描述
注意:resoouces下方的com.yzh.mapper包创建错误!正确如下:
参考:mapper.xml文件和mapper接口没有对应
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注意:映射器(mappers)的使用。这里使用映射器接口实现类的完全限定类名
在这里插入图片描述

运行结果展示:

在这里插入图片描述
在这里插入图片描述

修改添加的代码如下:

mybatis_config.xml:

<?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="db.properties"></properties>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.yzh7.entity"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
       <!--定义关联的mapper接口,通过三一致的规则自动与mapper文件关联
        <mapper class="com.yzh7.mapper.BookMapper"/>
        <mapper class="com.yzh7.mapper.EmpMapper"/>-->

        <package name="com.yzh7.mapper"/>

    </mappers>
</configuration>

参考官网:mybatis映射器mappers
https://mybatis.org/mybatis-3/zh/configuration.html#mappers
在这里插入图片描述

DeptMapper.xml:

<?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.yzh7.mapper.DeptMapper">


    <resultMap id="deptMap" type="dept">
        <!-- emp_id,emp_name,sex,phone,dept_id-->

<!--        &lt;!&ndash;id:表示表中的主键字段  column:查询表的列名 property:表示列名要映射到的实体属性&ndash;&gt;-->
       <id column="dept_id" property="deptId"/>
        <!--result:定义普通列和属性的映射关系-->
        <result column="dept_name" property="deptName"/>
        <result column="description" property="description"/>


        <!-- dept_id,dept_name,description-->
        <!--通过association标签(1对1),设置员工关联的部门对象-->
        <collection property="empList" ofType="emp">
            <id column="emp_id" property="empId"/>
            <result column="emp_name" property="empName"/>
            <result column="sex" property="sex"/>
            <result column="phone" property="phone"/>

        </collection>
    </resultMap>

    <!--
        resultType:只用于单表查询,并且查询结果列名和属性可以直接对应的情况。用于简单查询映射。
        resultMap:用于多表查询,或者列名和属性映射关系负责的情况。用于复杂查询映射。
        需要通过resultMap节点,配置结果的映射关系
     -->
    <select id="listAll" resultMap="deptMap">
        select d.dept_id,d.dept_name,d.description,
               e.emp_id,e.emp_name,e.sex,e.phone
        from t_dept d
                 join t_emp e
                      on d.dept_id=e.dept_id
    </select>

</mapper>

或者

DeptMapper.xml:

<?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.yzh7.mapper.DeptMapper">


    <resultMap id="deptMap" type="dept" autoMapping="true">
        <!-- emp_id,emp_name,sex,phone,dept_id-->

<!--        &lt;!&ndash;id:表示表中的主键字段  column:查询表的列名 property:表示列名要映射到的实体属性&ndash;&gt;-->
       <id column="dept_id" property="deptId"/>
<!--        &lt;!&ndash;result:定义普通列和属性的映射关系&ndash;&gt;-->
<!--        <result column="dept_name" property="deptName"/>-->
<!--        <result column="description" property="description"/>-->


        <!-- dept_id,dept_name,description-->
        <!--通过association标签(1对1),设置员工关联的部门对象-->
        <collection property="empList" ofType="emp" autoMapping="true">
<!--            <id column="emp_id" property="empId"/>-->
<!--            <result column="emp_name" property="empName"/>-->
<!--            <result column="sex" property="sex"/>-->
<!--            <result column="phone" property="phone"/>-->

        </collection>
    </resultMap>

    <!--
        resultType:只用于单表查询,并且查询结果列名和属性可以直接对应的情况。用于简单查询映射。
        resultMap:用于多表查询,或者列名和属性映射关系负责的情况。用于复杂查询映射。
        需要通过resultMap节点,配置结果的映射关系
     -->
    <select id="listAll" resultMap="deptMap">
        select d.dept_id,d.dept_name,d.description,
               e.emp_id,e.emp_name,e.sex,e.phone
        from t_dept d
                 join t_emp e
                      on d.dept_id=e.dept_id
    </select>

</mapper>

Demo4:

package com.yzh7.test;

import com.yzh7.entity.Dept;
import com.yzh7.entity.Emp;
import com.yzh7.mapper.DeptMapper;
import com.yzh7.mapper.EmpMapper;
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.BeforeClass;
import org.junit.Test;

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

public class demo4 {

    //一对多,一个部门关联多个员工
    @Test
    public void test1(){
        DeptMapper deptMapper=session.getMapper(DeptMapper.class);
        List<Dept> deptList=deptMapper.listAll();
        for(Dept dept:deptList){
            System.out.println(dept);
        }
    }


    private static SqlSessionFactory factory;    //静态
    private SqlSession session;

    @BeforeClass
    public static void befCla() throws IOException {
        String resource = "mybatis_config.xml";   //mybatis_config.xml
        InputStream inputStream = Resources.getResourceAsStream(resource);
        factory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Before
    public void bf(){
        session=factory.openSession();
    }

    @After
    public void af(){
        session.commit();
        session.close();
    }
}

// A code block
var foo = 'bar';

// A code block
var foo = 'bar';

// A code block
var foo = 'bar';

// A code block
var foo = 'bar';

// A code block
var foo = 'bar';

// A code block
var foo = 'bar';

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118052.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!