MyBatis配置详解

一、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核心配置文件中 envirment中 通过transactionManager配置事务的处理策略

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

在sqlMapConfig.xml文件中添加

<transactionManager type="JDBC"/>

如下图所示

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

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

在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属性 (基于接口的代理模式开发)

 

使用此方式注意事项如下:

 

  • 需要将mapper接口名和mapper.xml映射文件保持一致
  • 且在同一个目录下
  • 必须使用mapper的代理方式写dao

 

<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>

如下图所示:

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

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

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

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>

posted @ 2022-08-02 11:47  酒剑仙*  阅读(99)  评论(0)    收藏  举报