• 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>
    
  • 相关阅读:
    【SQL跟踪工具】SQL Profiler 跟踪器
    使用Fiddler调试手机端页面请求/抓包
    SQL 常用判断语句
    VS中常用快捷键
    博客园博客自动生成目录/目录索引
    BZOJ 1135 P3488 LYZ-Ice Skates 线段树+Hall
    BZOJ 4823 老C的方块
    POJ
    BZOJ 1299 [LLH邀请赛]巧克力棒
    BZOJ 2437 [Noi2011]兔兔与蛋蛋
  • 原文地址:https://www.cnblogs.com/guyuyun/p/15204266.html
Copyright © 2020-2023  润新知