Mybatis生命周期+作用域+默认日志和log4j
6、生命周期和作用域
1、SqlSessionFatoryBuilder:
- 一旦创建了SqlSessionFatoryBuilder,就不需要它了,之创建一次
- 局部变量
2、SqlSessionFatory
- 说白了,可以想象为数据库连接池,SqlSessionFatoryBuilder构建SqlSessionFatory
- 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例
- 因此 SqlSessionFactory 的最佳作用域是应用作用域
- 最简单的就是使用单例模式或者静态单例模式。
3、SqlSession
- 相当于连接到连接池的请求。
- SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域
- 用完后赶紧关闭,否则资源被占用

7、resultMap
7.1、什么是ResultMap
resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操
7.2、ResultMap有什么用
它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 映射关系
7.3、怎么使用ResultMap
<?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.wen.mapper.UserMapper">
<resultMap id="userMap" type="UserBean">
主键 列 属性
<id column="tb_id" property="id"/>
<result column="tb_name" property="name"/>
<result column="tb_pwd" property="pwd"/>
</resultMap>
<select id="getUserById" resultMap="userMap">
select * from tb_user where tb_id = #{id}
</select>
</mapper>
@Test
public void getUserList(){
// 获取sqlSession对象
SqlSession sqlSession = MapperUtils.getSqlSession();
// 方式一:执行sqlSession
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
UserBean userById = mapper.getUserById(3);
System.out.println(userById);
// 关闭sqlSession
sqlSession.close();
}
8、日志
8.1、日志工厂
如果一个数据库操作,出现了异常,我们需要排查错误,日志是最好的助手
曾经是:sout,debugger
现在是:日志工厂

SLF4J
LOG4J【掌握】
LOG4J2
JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING 【掌握】
NO_LOGGING
在mybatis中具体使用哪一个日志实现,在设置中设定
STDOUT_LOGGING 标准日志输出
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/> 默认是Stdout日志输出
<setting name="logImpl" value="LOG4J"/> 设置为LOG4J日志输出
</settings>

8.2、log4j
<!-- log4j日志jar包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]---%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/wen.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd HH:mm:ss}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

浙公网安备 33010602011771号