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
posted @ 2021-05-09 17:29  W·EN  阅读(111)  评论(0)    收藏  举报