Mybatis配置文件详解
一、配置
configuration(配置)
-
properties(属性)
-
settings(设置)
-
typeAliases(类型别名)
-
typeHandlers(类型处理器)
-
objectFactory(对象工厂)
-
plugins(插件)
-
environments(环境配置)
-
environment(环境变量)
-
transactionManager(事务管理器)
-
dataSource(数据源)
-
-
-
databaseIdProvider(数据库厂商标识)
-
mappers(映射器)
1.1 属性(properties)
可以通过properties属性来实现引用配置文件,这些属性(驱动、url、用户名、密码)可以在外部进行配置,并可以进行动态替换。
-
编写一个外部配置文件【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 的运行时行为。
1.4 其他配置
-
plugins 插件
-
mybatis-generator-core
-
mybatis-plus
-
通用mapper
-
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 作用域和生命周期
声明周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder:
-
一旦创建了SqlSessionFactory,就不再需要它了
-
局部变量
SqlSessionFactory:
-
说白了就可以想象为:数据库连接池
-
SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建一个实例。
-
因此SqlSessionFactory的最佳作用域是应用作用域(ApplocationContext)。
-
最简单的就是使用单例模式或静态单例模式。
SqlSession:
-
连接到连接池的一个请求
-
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
-
用完之后需要赶紧关闭,否则资源被占用!
1.7 日志
1.7.1 日志工厂
如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手!
曾经:sout、debug
现在:日志工厂
-
SLF4J
-
LOG4J 【掌握】
-
LOG4J2
-
JDK_LOGGING
-
COMMONS_LOGGING
-
STDOUT_LOGGING 【掌握】
-
NO_LOGGING
在MyBatis中具体使用哪一个日志实现,在设置中设定:
STDOUT_LOGGING
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
1.7.2 Log4j
什么是Log4j?
-
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件;
-
我们也可以控制每一条日志的输出格式;
-
通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程;
-
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
-
先导入log4j的包
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
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 -
配置settings为log4j实现
-
测试运行
Log4j简单使用
-
在要使用Log4j的类中,导入包 import org.apache.log4j.Logger;
-
日志对象,参数为当前类的class对象
Logger logger = Logger.getLogger(UserMapperTest.class);
- 日志级别
@Test public void testLog4j(){ logger.info("info: 测试log4j"); logger.debug("debug: 测试log4j"); logger.error("error:测试log4j"); }