一、log4j1 和log4j2的使用

1.在pom.xml中的dependencies标签中放入log4j的依赖引入,注意这里两个大版本任选其一即可

<!-- 引入log4j 1.2.17这个大版本 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

<!-- 引入log4j 2.17.1这个大版本 注意这里和上述版本只需要使用一个即可 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>

2.log4j 1版本的处理

在resource目录下创建log4j.properties文件。另外在其中可以将全局的日志级别调高,避免大量debug信息的干扰。同时将对映射文件的操作调低,可以用来显示SQL语句的调试信息。开发阶段,建议启动控制的日志。

#定义全局日志级别调试阶段推荐debug
log4j.rootLogger=debug,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=c:/augus.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

3.log4j 2版本的处理

将创建的log4j2.xml文件负责到resources下。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
</Console>

<RollingFile name="RollingFile" filename="log/test.log"
filepattern="${logPath}/%d{YYYYMMddHHmmss}-fargo.log">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>

</Appenders>
<Loggers>
<!--日志级别这里自己可以自行调整-->
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>

4.mybatis核心配置文件中中关于日志设置

Mybatis 通过使用内置的日志工厂提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

MyBatis 内置日志工厂会基于运行时检测信息选择日志委托实现。它会(按上面罗列的顺序)使用第一个查找到的实现。当没有找到这些实现时,将会禁用日志功能。

不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging。注意,在这种配置环境下,MyBatis 会把 Commons Logging 作为日志工具。这就意味着在诸如 WebSphere 的环境中,由于提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。这个时候达不到我们想要的效果:看起来 MyBatis 将你的 Log4J 配置忽略掉了(其实是因为在这种配置环境下,MyBatis 使用了 Commons Logging 作为日志实现)。如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中,而你又想使用其它日志实现,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择其它日志实现。

我们这里以设置使用log4j2实现,只需要在核心配置文件中sqlMapConfig.xml,添加

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

MyBatis配置详解_映射文件

二、关于事务配置

在mybatis核心配置文件中 envirment中 通过transactionManager配置事务的处理策略

  • JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
  • MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认情况下它会关闭连接。然而一些容器并不希望这样, 因此如果你需要从连接中停止它,将 closeConnection 属性设置为 false. mybatis本身并不做事务的处理,交给其他框架去处理事务,如spring

在sqlMapConfig.xml文件中添加

<transactionManager type="JDBC"/>

如下图所示

MyBatis配置详解_xml_02

三、关于映射文件的加载方式

我们定义 SQL 映射语句。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:///

在mybatis核心配置文件文件sqlMapConfig.xml中需要配置映射文件的加载方式在mappers标签中配置

1.mapper映射文件的文件路径导入 使用的mapper标签的resource属性

<mappers>
<mapper resource="com/augus01/mapper/DeptMapper.xml"/>
</mappers>

2.网络资源路径 使用的mapper标签的url属性

需要注意的是本地资源文件在写的url地址前加上file:///

<mappers>
<mapper url="file:///D:\code\mmsmybatis01\src\main\java\com\augus01\mapper\DeptMapper.xml"/>
</mappers>

3.接口的全限定名导入 使用的是mapper标签的class属性 (基于接口的代理模式开发)

<mappers>
<mapper class="com.augus01.mapper.DeptMapper"/>
</mappers>

4.包扫描形式加载所有的mapper映射文件 使用的是 package标签(推荐)

只需要指定到从那个包下面获取mapper映射文件即可,这个可以取出某个包下所有的mapper文件,推荐使用

<mappers>
<package name="com.augus01.mapper"/>
</mappers>

四、关于实体类别名处理

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

1.在mybatis核心配置文件中使用别名处理,需要在核心配置文件中添加

需要注意要放在settings和environments标签之间

<typeAliases>
<!--
如下每一个实体类都起别名,那么实体类特别的就很麻烦,所以通过,
包扫描的方式即可解决。会自动扫描某个包下面的所有实体类,默认
用类名的小写作为应用时的类名
-->
<!--<typeAlias type="com.augus01.pojo.Dept" alias="dept"></typeAlias>-->
<package name="com.augus01.pojo"/>
</typeAliases>

MyBatis配置详解_xml_03

 

在映射文件的resultType 返回值类型  和paramterType 上即可使用别名

MyBatis配置详解_配置文件_04

五、关于外部属性配置文件存储数据库链接信息

1.在resources下准备jdbc.properties属性配置文件,文件内容如下

jdbc_driver=com.mysql.cj.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc_username=test
jdbc_password=123456

MyBatis配置详解_配置文件_05

 

2.在核心配置文件中引入db.properties属性文件

这是其实就是修改sqlMapConfig.xml文件连接数据库的时候,连接信息从 jdbc.properties 中读取

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!--引入外部资源文件(数据库连接文件)-->
<properties resource="jdbc.properties"></properties>

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

<typeAliases>
<!--
如下每一个实体类都起别名,那么实体类特别的就很麻烦,所以通过,
包扫描的方式即可解决。会自动扫描某个包下面的所有实体类,默认
用类名的小写作为应用时的类名
-->
<!--<typeAlias type="com.augus01.pojo.Dept" alias="dept"></typeAlias>-->
<package name="com.augus01.pojo"/>
</typeAliases>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--指定连接数据库的信息,数据库服务器ip、端口、用户名、密码-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${123456}"/>
</dataSource>
</environment>
</environments>
<!--加载mapper映射文件-->
<mappers>
<!--<mapper resource="com/augus01/mapper/DeptMapper.xml"/>-->
<!--<mapper url="file:///D:\code\mmsmybatis01\src\main\java\com\augus01\mapper\DeptMapper.xml"/>-->
<!--<mapper class="com.augus01.mapper.DeptMapper"/>-->
<package name="com.augus01.mapper"/>
</mappers>
</configuration>

MyBatis配置详解_xml_06