Mybatis配置文件详解

Mybatis配置文件详解

一、配置

configuration(配置)

  • properties(属性)

  • settings(设置)

  • typeAliases(类型别名)

  • typeHandlers(类型处理器)

  • objectFactory(对象工厂)

  • plugins(插件)

  • environments(环境配置)

    • environment(环境变量)

      • transactionManager(事务管理器)

      • dataSource(数据源)

  • databaseIdProvider(数据库厂商标识)

  • mappers(映射器)

1.1 属性(properties)

可以通过properties属性来实现引用配置文件,这些属性(驱动、url、用户名、密码)可以在外部进行配置,并可以进行动态替换。

  1. 编写一个外部配置文件【db.poperties】

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username=root
    password=root

     

  2.在核心配置中引入配置文件

    <properties resource="db.properties"/>

 

  • 可以直接引入外部文件

  • 也可以在其中增加一些属性配置

  • 当外部文件和xml中配置有重名字段,优先使用外部文件

1.2 类型别名 typeAliases

  • 类型别名可以为java类型设置一个缩写的名字。他仅用于xml配置。

  • 主要目的是降低冗余

方法一:

<!--可以给实体类其别名-->
    <typeAliases>
        <typeAlias type="com.aishimin.entity.User" alias="User"/>
    </typeAliases>

 

方法二:

也可以指定一个包,每一个在包com.aishimin中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.aishimin.User的别名为user;若有注解,则别名为其注解值。

<typeAliases>
    <package name="com.aishimin.entity"/>
</typeAliases>

 

在实体类比较少的时候,使用第一种方式。

如果实体类十分多,建议用第二种扫描包的方式。

第一种可以DIY别名,第二种不行,如果非要改,需要在实体上增加注解。

@Alias("uu")
public class User {
  ...
}

 

1.3 设置 Settings

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

Mybatis配置文件详解

1.4 其他配置

1.5 映射器 mappers

MapperRegistry:注册绑定我们的Mapper文件;

方式一:【推荐使用】

<mappers>
    <mapper resource="com/aishimin/dao/UserMapper.xml"/>
</mappers>

 

方式二:使用class文件绑定注册

<mappers>
    <mapper class="com.aishimin.dao.UserMapper"/>
</mappers>

 

注意点:

  • 接口和他的Mapper配置文件必须同名

  • 接口和他的Mapper配置文件必须在同一个包下

方式三:使用包扫描进行注入

<mappers>
    <package name="com.aishimin.dao"/>
</mappers>  

 

1.6 作用域和生命周期

Mybatis配置文件详解

声明周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder:

  • 一旦创建了SqlSessionFactory,就不再需要它了

  • 局部变量

SqlSessionFactory:

  • 说白了就可以想象为:数据库连接池

  • SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建一个实例。

  • 因此SqlSessionFactory的最佳作用域是应用作用域(ApplocationContext)。

  • 最简单的就是使用单例模式或静态单例模式。

SqlSession:

  • 连接到连接池的一个请求

  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

  • 用完之后需要赶紧关闭,否则资源被占用!

1.7 日志

1.7.1 日志工厂

如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手!

曾经:sout、debug

现在:日志工厂

Mybatis配置文件详解

  • SLF4J

  • LOG4J 【掌握】

  • LOG4J2

  • JDK_LOGGING

  • COMMONS_LOGGING

  • STDOUT_LOGGING 【掌握】

  • NO_LOGGING

在MyBatis中具体使用哪一个日志实现,在设置中设定:

STDOUT_LOGGING

  
  <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

 

Mybatis配置文件详解

1.7.2 Log4j

什么是Log4j?

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件;

  • 我们也可以控制每一条日志的输出格式;

  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程;

  • 最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  1. 先导入log4j的包

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

     

  2. log4j.properties

    #将等级为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/rzp.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}][%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.sq1.PreparedStatement=DEBUG
  3. 配置settings为log4j实现

  4. 测试运行

Log4j简单使用

  1. 在要使用Log4j的类中,导入包 import org.apache.log4j.Logger;

  2. 日志对象,参数为当前类的class对象

        Logger logger = Logger.getLogger(UserMapperTest.class);
  3. 日志级别  
@Test
public void testLog4j(){
    logger.info("info: 测试log4j");
    logger.debug("debug: 测试log4j");
    logger.error("error:测试log4j");
}

 

上一篇:PlumeLog日志搭建-redis+es


下一篇:log4j的常用使用方法