.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的属性是不会触发一起查看学生的
来源:https://www.cnblogs.com/thisHBZ/p/12457931.html