MyBatis笔记:xml配置文件

xml配置文件指的是MyBatis的核心配置文件,包括数据库连接信息、mapper映射器、别名配置等,本文只是简单记了一点学习笔记,想要了解更多,可以参考MyBatis中文文档 https://mybatis.org/mybatis-3/zh/configuration.html

基本使用

可以根据官网介绍新建一个基础的xml文件,然后根据自己的需要配置指定项即可,文件名可以自定义,文件位置也可以自己指定,只需要在 SqlSessionFactoryBuilderbuild 中传入进行使用即可。

// mybatis_config.xml就是我自定义的配置文件,并放在src/main/resources目录下,
// 因为是在maven项目中,所以maven会自动到src/main/resources下寻找对应的文件
String resource = "mybatis_config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

注: mybatis中的配置项是有先后顺序的,不能随意配置,配置的先后顺序为 properties > settings > typeAliases > typeHandlers > objectFactory > objectWrapperFactory > reflectorFactory > plugins > environments > databaseIdProvider > mappers ,如果没有该配置项,则可以跳过。在IDEA中如果配置错了顺序,它会提示你正确的顺序的。

引用properties文件

可以将一些配置项(如数据库连接信息)单独配置在properties文件中,然后在xml配置文件中使用 properties 标签将properties文件的内容引入到xml配置文件中,properties文件中的配置项以 ${config_name} 的方式进行引用。 properties 标签下也可以定义 property 子标签,用于单独配置属性。

例如:在 src/main/resources 下新建一个db.properties文件配置数据库连接信息。

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
password=123456

然后在mybatis配置文件中进行引用。

<configuration>
    <!-- 引入外部配置文件 -->
    <properties resource="db.properties">
        <!-- 单独配置属性 -->
        <property name="username" value="root"/>
    </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>
</configuration>

日志插件配置

在配置项 settings > setting 中进行配置即可,name属性指定为logImpl(固定值),value属性值可以指定自己想要的日志插件,根据官方文档介绍,可以选择这几种 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 。例如配置日志插件为 STDOUT_LOGGING

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

配置和使用LOG4J

第一步:需要在MyBatis配置文件中的settings配置当前使用的日志插件为log4j。

<configuration>
    <settings>
<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
</configuration>

第二步:log4j是需要额外导入的,需要在pom.xml配置对应的依赖。

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
</dependencies>

第三步:在resources目录(或CLASSPATH)下新建一个log4j.properties文件(文件名是固定的),这个文件是为了配置怎么使用log4j的。以下是简单配置示例,可以到网上搜索更多配置项:

# 日志输出的级别为DEBUG,将日志内容输出到console和file,console和file需要再下面继续进行配置
log4j.rootLogger=DEBUG,console,file

# console相关配置
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

# file相关配置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/mb.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

第四步:在java文件中使用log4j打印日志。

package com.mb.dao;

import org.apache.log4j.Logger;
import org.junit.Test;


public class UserDaoTest {

    // 传入当前类的class,得到一个Logger对象
    static Logger logger = Logger.getLogger(UserDaoTest.class);

    @Test
    public void testLog4j() {
        logger.debug("This is debug log.");
        logger.info("This is info log.");
        logger.warn("This is warn log.");
        logger.error("This is error log.");
    }
}

为实体类配置别名

在mapper.xml映射文件中引用实体类时,每次都需要输入实体类的完整路径,如果使用到地方比较多的话,可以为对应实体类的路径配置别名。可以在mybatis配置文件中使用 typeAliases 标签为实体类配置别名,配置方式有两种,一种是直接在mybatis配置文件中指定别名,另一种是在mybatis配置文件中指定包名,指定包名后,mybatis可以直接在包中寻找对应的实体类。

直接指定别名

配置别名后直接在对应mapper.xml映射文件中使用别名即可。

mybatis配置文件

<configuration>
    <properties resource="db.properties"/>

    <typeAliases>
        <!-- 直接为某个具体的实体类指定别名 -->
        <typeAlias type="com.mb.pojo.User" alias="User"/>
    </typeAliases>

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

    <mappers>
        <!-- 配置对应的mapper.xml映射文件 -->
        <mapper resource="com/mb/dao/UserMapper.xml" />
    </mappers>
</configuration>

UserMapper.xml文件

<mapper namespace="com.mb.dao.UserMapper">
    <!-- resultType的值使用的就是配置后的别名 -->
    <select id="getUserList" resultType="User">
        select * from mybatis.user;
    </select>
</mapper>

指定包路径

指定了包路径后,mybatis可以直接扫描该包下的所有实体类,然后自动为该类指定别名为类的首字母小写形式。如果不想使用它默认的别名方式,可以在实体类上使用注解进行自定义。

mybatis配置文件

<configuration>
    <properties resource="db.properties"/>

    <typeAliases>
        <!-- 指定包路径,默认别名为类的首字母小写形式 -->
        <package name="com.mb.pojo"/>
    </typeAliases>

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

    <mappers>
        <!-- 配置对应的mapper.xml映射文件 -->
        <mapper resource="com/mb/dao/UserMapper.xml" />
    </mappers>
</configuration>

mapper.xml文件

<mapper namespace="com.mb.dao.UserMapper">
    <!-- resultType的值使用的就是类名首字母小写形式的别名 -->
    <select id="getUserList" resultType="user">
        select * from mybatis.user;
    </select>
</mapper>

通过在实体类上使用注解自定义别名

package com.mb.pojo;

import org.apache.ibatis.type.Alias;

// 通过注解的方式配置别名
@Alias("common_user")
// 实体类
public class User {}

默认别名

除了自定义别名之外,mybatis还有一些默认的别名可以直接使用,具体见 https://mybatis.org/mybatis-3/zh/configuration.html#typeAliases

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

映射器mappers

映射器即 mappers 配置项,作用就是将mapper.xml映射文件和操作实体类的接口对应起来,让接口中的方法时可以与mapper.xml映射文件中的SQL关联起来,配置方式有三种:配置xml文件路径、配置接口路径和配置包路径。

配置xml文件路径

这种方式需要直接配置xml的文件路径,定义xml时也可以不用放在src/main/java下,可以在src/main/resources新建一个相同的“包”路径即可,maven编译时会自动将相同目录的文件放到一起的。
注:自己练习的时候发现IDEA中需要将左边栏上的 compact Middle Packages 自动合并中间目录的选项去掉才行,否则在最后编译的target/classes下的目录会对不上,会将合并的目录当成一个目录来创建。

<configuration>
    <mappers>
        <!-- 路径分隔符为斜杠 -->
        <mapper resource="com/mb/dao/UserMapper.xml" />
    </mappers>
</configuration>

配置接口路径

配置接口路径的方式需要注意:mapper.xml需要和接口同名,且在同一包下。

<configuration>
    <mappers>
        <mapper class="com.mb.dao.UserMapper"/>
    </mappers>
</configuration>

配置包路径

配置包路径和配置接口路径一样:mapper.xml需要和接口同名,且在同一包下。

<configuration>
    <mappers>
        <package name="com.mb.dao"/>
    </mappers>
</configuration>
原文地址:https://www.cnblogs.com/guyuyun/p/15204266.html