Mybatis_学习3

点击查看上文

配置解析

MyBatis 的配置文件影响 MyBatis 行为的设置和属性信息。

0. 概览

配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

配置文件的顺序也是一定的, 不能擅自改变每一项的先后, 否则会报错:
Mybatis_学习3

正确的顺序如上图所示

我们只初步了解 properties(属性), settings(设置), typeAliases(类型别名), environments(环境配置), mappers(映射器)

1. properties(属性)

属性可以在外部进行配置,并可以进行动态替换。既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。

1.1 在 .properties 文件中配置:

Mybatis_学习3

配置完成后在 mybatis-config.xml 文件中引入:

Mybatis_学习3

1.2 或者在 properties 元素的子元素中直接设置:

Mybatis_学习3

这样就可以在 environments 中直接引用了:

Mybatis_学习3

引用需要使用${}

1.3 关于同时使用 .properties 文件 和 properties 子元素时的优先级问题:

  • 同时使用时, 子元素的优先级最低
  • 在properties元素体内指定的属性首先被读取
  • 根据properties元素中的resource属性读取类路径下的属性文件(或根据url属性指定的路径读取属性文件),并覆盖已读取的同名属性。

因此推荐只使用 .properties 文件, 如果混用容易导致管理的混乱

2. settings(设置)

settings会改变 MyBatis 的运行时行为。
这里只看 logImpl 这一项设置中的 LOG4JSTDOUT_LOGGING, 即日志设置

Mybatis_学习3
Mybatis_学习3

2.1 STDOUT_LOGGING是标准日志, 直接添加下面的语句即可使用:

Mybatis_学习3

注意 setting 中的值不能有任何错误, 否则不能运行

成功设置日志后, 会在控制台输出更多信息:
Mybatis_学习3

对比没有日志的情况:
Mybatis_学习3

2.2 LOG4J 是Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件,套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别控制日志的生成过程。这些均可以通过一个配置文件来灵活地进行配置,不需要修改应用的代码。

使用下面的语句:
Mybatis_学习3

同时需要在Maven中添加依赖的jar包:

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

再在resources 文件夹下 创建一个名为 log4j.properties 的配置文件:
Mybatis_学习3

该文件的配置可以参考如下:

#将等级为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/wbl.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.sql.PreparedStatement=DEBUG

之后运行测试代码即可在控制台看见日志:
Mybatis_学习3

同时也可以将日志输出为文件:
Mybatis_学习3

3. typeAliases(类型别名)

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

3.1 指定一个包名com.ctgu.pojo, MyBatis 会在包名下面搜索需要的 Java Bean
Mybatis_学习3
每一个在包 com.ctgu.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.ctgu.pojo.user 的别名为 user ;若有注解,则别名为其注解值(username)。见下面的例子:

@Alias("username")
public class user {
    ...
}

配置完成后, 可以在之后的xml文件中缩写:
Mybatis_学习3
而不用写全名: com.ctgu.pojo.user

3.2 或者直接写:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

4. environments(环境配置)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中.

尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。

  • 每个数据库对应一个 SqlSessionFactory 实例

environments 元素定义了如何配置环境。

    <environments default="development2">
        <environment id="development1">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

		<environment id="development2">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

上面的代码配置了两套环境, 但是使用的是第二套 id = development2 的环境
具体的一套环境,通过设置id进行区别,id保证是唯一的

注意一些关键点:

  • 默认使用的环境 ID(比如:default="development")。
  • 每个 environment 元素定义的环境 ID(比如:id="development")。
  • 事务管理器的配置(比如:type="JDBC")。
  • 数据源的配置(比如:type="POOLED")。

5. mappers(映射器)

定义 SQL 映射语句。 首先,需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 可以使用相对于类路径的资源引用,或类名和包名等。

Mybatis_学习3

上一篇:Log4j 漏洞复现


下一篇:【漏洞】log4j2远程执行代码复现实操代码