MyBatis整合Log4j和延迟加载

一. 整合Log4j(日志管理工具)

可以通过日志信息,详细地阅读mybatis执行情况( 观察mybatis实际执行sql语句 以及SQL中的参数 和返回结果)

1.导入jar包:log4j.jar

在这里插入图片描述

2.开启日志:

conf.xml中配置:

<settings>
		<!-- 开启日志,并指定使用的具体日志 -->
		<setting name="logImpl" value="LOG4J"/>
	
</settings>

如果不指定,Mybatis就会根据以下顺序 寻找日志
SLF4J →Apache Commons Logging →Log4j 2 → Log4j →JDK logging

3. 编写配置日志输出文件

log4j.properties:

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

日志级别:
DEBUG<INFO<WARN<ERROR
如果设置为info,则只显示 info及以上级别的信息;
建议:在开发时设置debug,在运行时设置为info或以上。

通过conf.xml中<setting name="logImpl" value="LOG4J"/>value的值(LOG4J)自动找到log4j.properties资源文件(名字log4j相同)

二. 延迟加载

延迟加载(懒加载):
一对一、一对多、多对一、多对多
一对多:如班级-学生 ,
如果不采用延迟加载 (立即加载),查询时会将 一 和多 都查询,即立刻输出班级、班级中的所有学生。
如果想要 暂时只查询1的一方, 而多的一方 先不查询 而是在需要的时候再去查询 -->采用延迟加载

例如:一对多,班级-学生
延迟加载的步骤:(先查班级,按需查询学生)
1.开启延迟加载conf.xml配置settings

mybatis中使用延迟加载,需要先配置:
	<settings>
		<!-- 开启延迟加载 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		
		<!-- 关闭立即加载 -->
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>

如果增加了mapper.xml ,要修改conf.xml配置文件(将新增的mapper.xml加载进去)
2.配置mapper.xml
写2个Mapper:
(规范一些:班级查询另外配置新的接口和Mapper.xml文件)
新建的文件:StudentClassMapper.java,StudentClassMapper.xml,queryStudentLazyLoad.xml。
在这里插入图片描述

-----班级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.ph.main.mapperI.StudentClassMapper">	
	<!-- 1111111先查班级 -->
	<select id="queryOTMLazyLoad" resultMap="OneToMore">
		select c.* from studentclass c
	</select>
	
	<resultMap type="studentclass" id="OneToMore">
		<!-- 因为 type的主类是班级,因此先配置班级的信息-->
		<id property="classId" column="classid"/>
		<result property="className" column="classname"/>
		<!-- 2222222再查班级对应的学生 -->
		<collection property="students" ofType="student" 
		select="com.ph.main.mapperI.queryStudentLazyLoad.queryClassAll" 
		column="classid">
		</collection>
	</resultMap>
</mapper>

即查询 学生的sql是通过 select属性指定,并且通过column指定两个数据表的外键,通过这个外键传入参数

-----queryStudentLazyLoad.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.ph.main.mapperI.queryStudentLazyLoad">
	<!-- 一对多,延迟加载需要的: 查询班级中的所有学生
	此处的输入参数是<collection>中的column="classid"
	 -->
	<select id="queryClassAll" resultType="student" parameterType="int">
		select s.* from student s where classid=#{classId}
	</select>

</mapper>

3 测试:
先查询了班级,然后在延迟加载时,把班级的classId作为输入参数传进第二个SQL语句
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值