日志:Log4j
1.配置jar包
Log4j:log4j.jar(在mybatis.zip中lib)
2.开启日志:
//在config.xml
<settings>
<!-- 开启日志,并指定使用的具体日志 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
如果不指定,mybatis就会根据以下顺序寻找日志
SLF4J/Apache Commons Logging/Log4j 2/Log4j/JDK logging
3.编写配置日志输出文件
日志级别(从低到高):
DEBUG、INFO、WARN、ERROR
打印时不打印低于自身级别的,即使用DEBUG则全打印,使用ERROR则ERROR
建议:在开发时使用DEBUG,在运行时使用INFO以上
//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
可以通过日志信息,详细的阅读mybatis执行情况(观察mybatis实际执行的SQL语句以及SQL中的参数和返回结果)
延迟加载
一对一、一对多、多对一、多对多
一对多:班级–学生
如果不采用延迟加载(立即加载),查询时会将一和多都查询,班级、班级中所有的学生。
那么当我暂时只需要班级信息时,如果班级的学生很多,我就需要等很久
mybatis中使用延迟加载,需要先配置:
//config.xml中需要配置settings和mappers
<settings>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 关闭立即加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<mappers>
<!-- 加载映射文件 -->
<mapper resource="org/lanqiao/mapper/personCardMapper.xml" />
</mappers>
//personMapper.xml
<!-- 一对一和延迟加载 -->
<select id="queryPersonByIdWithOneToOneAndLazyLoad" parameterType="int" resultMap="Person_PersonCard_lazyLoad">
select * from person
</select>
<resultMap type="Person" id="Person_PersonCard_lazyLoad">
<!-- 分为主键id和非主键result -->
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<!-- jdbcType的值要大写 -->
<result property="sex" column="sex" javaType="boolean" jdbcType="INTEGER" />
<!-- 一对一时,对象成员使用association映射 -->
<!-- 采用延迟加载:在查询学生是,并不立即加载学生证信息 -->
<association property="personCard" javaType="PersonCard" select="org.lanqiao.mapper.PersonCardMapper.queryCardById" column="cardId">
<!-- <id property="cardId" column="cardId" />
<result property="cardInfo" column="cardInfo" /> -->
</association>
</resultMap>
//personCardMapper.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">
<!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="org.lanqiao.mapper.PersonCardMapper">
<!-- 查询学生证信息 -->
<select id="queryCardById" parameterType="int" resultType="PersonCard">
select * from personCard where cardId = #{cardId}
</select>
</mapper>