Mybatis核心配置文件

Mybatis核心配置文件

Mybatis的配置文件包含如下配置:

image-20210119225253716

properties

当配置了这个属性,就可以动态替换如下部分。

image-20210120200646842

配置方式:

1. 使用外部java属性文件配置

创建java属性文件——db.properties。

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

在mybatis-config.xml中引入这个属性文件。

<?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="db.properties"/>
    <environments default="development">
        <environment id="development">
            <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>

    <!-- 注册UserMapper.xml  -->
    <mappers>
        <mapper resource="cn/gbl/dao/UserMapper.xml"/>
    </mappers>
</configuration>
2. 在properties的子元素property 中配置
<?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的子元素property中配置-->
    <properties>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </properties>

    <environments default="development">
        <environment id="development">
            <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>

    <!-- 注册UserMapper.xml  -->
    <mappers>
        <mapper resource="cn/gbl/dao/UserMapper.xml"/>
    </mappers>
</configuration>
3. 也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值(了解即可)

注意: 这三种方式如果同时存在,会有一定的优先级问题

  • 首先,读取在 properties 元素体中指定的属性;
  • 其次,读取在 外部的java属性文件,且会覆盖已经指定了的重复属性;
  • 最后,读取作为方法参数传递的属性,且会覆盖已经从 properties 元素体和 java外部属性文件加载了的重复属性。

Settings

官网中给出了很多设置,这里只介绍个别。

设置名 描述 有效值 默认值
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING (这些都是日志的具体实现) 未设置
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false

使用mybatis实现日志输出:

1. STDOUT_LOGGING :标准日志输出
<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

只需在mybatis-config.xml中配置如上settings即可。

2. LOG4J :
  1. 导包:
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  1. 创建log4j的配置文件:
log4j.rootLogger=debug,stdout,debug,info,warn,error
#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
#info log
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.info.File=./src/com/hp/log/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=INFO
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=./src/com/hp/log/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=./src/com/hp/log/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ./src/com/hp/log/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
  1. 在mybatis-confog.xml中设置log4j
<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>
  1. 获取LogLger对象
static Logger logger  = Logger.getLogger(UserDaoTest.class);

typeAliases

先看之前写的Mapper映射文件:

image-20210120203306363

可以使用typeAliases来简化这个写法:

配置方式:

1. 在typeAliases的子元素typeAlias中配置
<typeAliases>
    <typeAlias type="cn.gbl.pojo.User" alias="user"/>
</typeAliases>

这种方式可以给具体的每一个Bean起任意的别名。

2. 在typeAliases的子元素package中配置
<typeAliases>
    <package name="cn.gbl.pojo"/>
</typeAliases>

使用这种方式的时候,这个包下的JavaBean会使用 Bean 的首字母小写来作为它的别名。

如果也想像方式1那样,给Bean起任意的别名可以通过给Bean加注解来实现。

image-20210120205229461

当使用注解后这个类的别名就变成了“xxgbl”,不再是Bean的首字母小写了。

配置typeAliases之后就可以对映射文件进行如下替换:

image-20210120204714586

environments

image-20210120222609950

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC">
            <property name="..." value="..."/>
        </transactionManager>
        <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="test">
        <transactionManager type="JDBC">
            <property name="..." value="..."/>
        </transactionManager>
        <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>

environment:

通过此标签可以定义多种环境。

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

transactionManager:

通过此标签可以配置事务管理器。

mybatis中有两种事务管理器:

  • JDBC

  • MANAGED

dataSource:

通过此标签可以配置数据源。

mybatis中有三种数据源:

  • UNPOOLED
  • POOLED
  • JNDI

mappers

配置方式:

1. 使用相对于类路径的资源引用

<mappers>
    <mapper resource="cn/gbl/dao/UserMapper.xml"/>
</mappers>

2. 使用映射器接口实现类的完全限定类名

<mappers>
	<mapper class="cn.gbl.dao.UserMapper"/>
</mappers>

注意:要满足以下两点,不然会报错。

  1. 接口和它的Mapper配置文件必须同名。
  2. 接口和它的Mapper配置文件必须在同一个包下。

3. 将包内的映射器接口实现全部注册为映射器

<mappers>
    <package name="cn.gbl.dao"/>
</mappers>

注意:要满足以下两点,不然会报错。

  1. 接口和它的Mapper配置文件必须同名。
  2. 接口和它的Mapper配置文件必须在同一个包下。
posted @ 2021-01-20 22:19  xxgbl  阅读(3185)  评论(0)    收藏  举报