zoukankan      html  css  js  c++  java
  • 课时9::MyBatis整合Log4j、延迟加载

    .1)如何整合Log4j到mybatis

      1.导入log4j的jar包

    <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
        </dependency>
      </dependencies>

      2.在主配置文件中开启log4j

    <!--    配置log4j启动-->
        <settings>
            <setting name="logImpl" value="LOG4J"></setting>
        </settings>

        2.1 .如果不写value里面的值 会按照这个顺序查找SLF4J-->Apache Commons Logging-->Log4j 2---Log4j-->JDK logging

      3.在resources中配置log4j.properties文件

    .2)延迟加载

      1.概念

        1.1  一对一,一对多,多对一,多对多

        一对多:班级--学生,

        如果不采用延迟加载(立即加载),查询时会将一对多都查询,班级丶班级中的所有学生。

        如果想要 暂时只查询一个1的一方,而多的一方 先不查询,而是在需要查询的时候再去查询--->延迟加载

      2.以学生和学生证一对一案例为例

        2.1 首先配置主文件开启延迟加载并关闭立即加载

    <!--        开启延迟加载-->
            <setting name="lazyLoadingEnabled" value="true"></setting>
    <!--        关闭立即加载-->
            <setting name="aggressiveLazyLoading" value="false"/>

        2.2 配置sql映射文件的主SQL

    <!--    查询全部的学生-->
        <select id="queryStudentByWithLazyLoad"  resultMap="queryStudentByWithLazyLoad">
           select * from student
        </select>
    
        <resultMap id="queryStudentByWithLazyLoad" type="student">
            <id property="stuNo" column="stuno"></id>
            <result property="stuName" column="stuName"></result>
            <result property="stuAge" column="stuAge"></result>
            <result property="graName" column="graName"></result>
            <result property="stuSex" column="stusex" javaType="boolean" jdbcType="INTEGER"></result>
            <result property="cardid" column="cardid"></result>
    <!--        引入次要的sql 并且以什么进行关联-->
            <association property="studentcart" javaType="Studentcart" select="org.hbz.dao.IStudentcartDao.queryCardById" column="cardid">
    <!--            <id property="cartid" column="cartid"></id>-->
    <!--            <result property="cardinfo" column="cardinfo"></result>-->
            </association>
        </resultMap>

          2.2.1 association:一对一查询时用, select:表示引入的要延迟加载的sql的空间+id名称 column:表示通过主SQL字段与要延迟加载的表建立关系

        2.3.配置sql映射文件的关联的SQL

    <!--    根据学生证id查询学生证-->
        <select id="queryCardById" parameterType="int" resultType="Studentcart">
            select * from studentcart where cartid=#{xx}
        </select>

        2.4.编写dao层

    List<Student> queryStudentByWithLazyLoad();

        2.5.编写测试类

     public static void queryStudentByWithLazyLoad() throws IOException {
            Reader reader = Resources.getResourceAsReader("config.xml");
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
            SqlSession session=sessionFactory.openSession();
            IStudentDao iStudentDao=session.getMapper(IStudentDao.class);
            List<Student> stu= iStudentDao.queryStudentByWithLazyLoad();
            for (Student student:stu){
                System.out.println(student.getGraName());
                //查看学生证
                System.out.println(student.getStudentcart().getCardinfo());
            }
            session.close();
            reader.close();
        }

        2.5.1 通过代码测试结果总结:如果输出studnet整个对象是会一起加载学生证的 如果只是调用属于本身student的属性是不会触发一起查看学生证的

      6.以班级和学生为例一对多延迟加载

        6.1.首先配置主文件开启延迟加载并关闭立即加载

    <!--        开启延迟加载-->
            <setting name="lazyLoadingEnabled" value="true"></setting>
    <!--        关闭立即加载-->
            <setting name="aggressiveLazyLoading" value="false"/>

        6.2 配置sql映射文件的主SQL

    <!--    主SQL查询班级所有信息-->
        <select id="queryStudentByWithLazy" resultMap="queryStudentByWithLazyMap">
            select c.* from  studentclass c
        </select>
    
        <resultMap id="queryStudentByWithLazyMap" type="studentclass">
            <id property="classid" column="classid"></id>
            <result property="classname" column="classname"></result>
            <collection property="list" ofType="student" select="org.hbz.dao.IStudentDao.queryStudentByCLassId" column="classid"/>
        </resultMap>

          6.2.1 collection:一对多查询时用 select:表示引入的要延迟加载的sql的空间+id名称 column:表示通过主SQL字段与要延迟加载的表建立关系

        6.3 配置sql映射文件的次SQL

    <!--    通过班级id查询学生   延迟加载-->
        <select id="queryStudentByCLassId" parameterType="Integer" resultType="student">
            select * from student where classid=#{xx}
        </select>

        6.4 编写dao层

    List<Studentclass> queryStudentByWithLazy();

        6.5 编写测试类

     public static void queryStudentByWithLazy() throws IOException {
            Reader reader = Resources.getResourceAsReader("config.xml");
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
            SqlSession session=sessionFactory.openSession();
            IStudentClassDao iStudentClassDao=session.getMapper(IStudentClassDao.class);
            List<Studentclass> studentclasses = iStudentClassDao.queryStudentByWithLazy();
           for (Studentclass studentclass:studentclasses){
               System.out.println(studentclass.getClassname());
           }
            session.close();
            reader.close();
        }

          6.5.1 通过代码测试结果总结:如果输出studentclass整个对象是会一起加载学生的 如果只是调用属于本身studentclass的属性是不会触发一起查看学生的

  • 相关阅读:
    定位小结
    定位知识点
    css属性书写顺序
    清除浮动及清除浮动的方法
    margin合并和塌陷问题
    css特性-层叠性,继承性,优先级
    css属性简写
    css布局之双飞翼布局
    css布局之圣杯布局
    css布局之等高布局
  • 原文地址:https://www.cnblogs.com/thisHBZ/p/12457931.html
Copyright © 2011-2022 走看看