zoukankan      html  css  js  c++  java
  • -------------------------------用MyBatis处理表与表之间的关联关系----------------------------------

    1. 表与表的关联关系分为“一对多”,“多对一”,“自联查”,“多对多”,“一对一”。

    2.(1)第一种“一对多”的实例,就是一个国家有多个城市

    先看下数据库一个country(国家) 和provincial(城市)

    ---------------------------

    (2)建好表之后,我们都知道一个国家有多个城市,所以在country实体类里加一个泛型集合list<provincial>

    接口中写一个通过国家id查询一个它的对象(包含它下面的城市)的方法

    在mappe.xml文件里,下面是通过两句sql语句查询的,这样可以使用慢加载,在config.xml中配置一个settings标签

    <settings>
        + <!--开启延迟加载 默认值是 false-->
        + <setting name="lazyLoadingEnabled" value="true"/>
        + <!--
        + 我们的一个实体类中可以有多个延迟加载属性不?? 肯定可以!
        + 当启用后,一个有延迟加载属性的对象的任何一个延迟属性被加载时,该对象的所有的属性都会被加载。
        + 否则,所有属性都是按需加载。默认值是true
        + -->
        + <setting name="aggressiveLazyLoading" value="false"/>
     </settings>    
       

    这个lazyLoadingEnabled默认value=false
    aggressiveLazyLoading默认value=true

     

    最后就是测试

     3   多对一 相反多个城市可以是一个国家 看下面实体类,在实体类Provincial里面加载一个Country 属性就好

     接口中定义一个方法

     在mapper.xml 中

     

    然后就是测试

     4 。自连接先建一个这样的库

     实体类

    接口

    mapper.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.xdf.dao.TeacherDao"> <!--必须是对应的dao接口的全类名-->
    <!--
    id     name     tid
    1      导师1     0
    2      导师2     0
    3      老师1     1
    4      老师2     1
    5      老师3     3
    id: 老师的编号
    name:老师姓名
    tid:导师的编号
    需求 : 根据导师的编号查询出所有的老师信息
    比如说:现在查询导师编号为1的所有老师信息
    步骤:
      01.select  *  from  teacher  where  tid=1
         这时候会有 3  4 两条信息
      02. 把这两条信息的id 当成 tid 再次查询
      03.tid 为3的 又有一名老师  5
      04.结果应该是  3 4 5 三名老师
      05.不断的把查询结果的id当成 tid 再次查询, 直到没有值结束查询
    -->
    <!-- 01.根据导师的编号查询导师信息   我们是根据tid查询的  tid是导师编号
      然后我们再把查询结果id当成tid再次查询-->
    <select id="selectTeachersByTid" resultMap="teacherMap">
            SELECT  id,tname  from teacher where tid=#{xxx}
        </select>
    
        <resultMap id="teacherMap" type="Teacher">
            <id property="id" column="id"/>
            <result property="name" column="tname"/>
            <!--导师对应的老师集合 把查询结果id当成tid再次查询 -->
            <collection property="teachers" ofType="Teacher" select="selectTeachersByTid" column="id"/>
        </resultMap>
    
        <!--  01.根据老师的编号查询自身信息
          如果这个老师是导师,那么再把id当成tid再次查询下面的老师信息-->
        <select id="selectByTeacherId" resultMap="teacherIdMap">
          select  id,tname  from teacher where id=#{xxx}
        </select>
    
        <resultMap id="teacherIdMap" type="Teacher">
            <id property="id" column="id"/>
            <result property="name" column="tname"/>
            <!-- 如果这个老师是导师,那么再把id当成tid再次查询下面的老师信息 -->
            <collection property="teachers" ofType="Teacher" select="selectTeachersByTid" column="id"/>
        </resultMap>
    
    
    
    
    </mapper>

    实现类

     自连接的多对一查询 延迟加载
    
    
    public class TeacherTest {
    
        TeacherDao dao=null;
        SqlSession session=null;
        Logger log=Logger.getLogger(TeacherTest.class);
    
        /**
         * 在所有的test测试方法执行之前 都要执行的操作
         */
        @Before
        public void before(){
            //获取session
            session= SessionFactoryUtil.getSession();
            dao=session.getMapper(TeacherDao.class); //获取执行的类对象
        }
    
        @After
        public  void after(){
            if (session!=null){
                session.close();
            }
        }
    
    
        @Test
        public  void  testSelectByTid(){
            List<Teacher> teachers = dao.selectTeachersByTid(1);
           log.debug(teachers);  //会把查询结果id当成tid再次查询
          // log.debug(teachers.get(0).getName()); //不会触发 只查询 tid为1的数据
        }
    
        @Test
        public  void  testSelectById(){
             Teacher teacher= dao.selectByTeacherId(3);
           //  log.debug(teacher.getName()); //1条sql
             log.debug(teacher);
        }
    
    
    
    
    }
  • 相关阅读:
    导出预设体的缩略图工具
    FairyGui自动生成Wnd工具(Unity)
    Unity骨骼优化(转)
    顶点处理机制
    面向对象
    文件读取
    协同程序
    元表
    模块与包
    Lua表
  • 原文地址:https://www.cnblogs.com/laosunlaiye/p/7572819.html
Copyright © 2011-2022 走看看