mybatis中的核心配置mybatis-config.xml解析

mybatis参考

核心文件配置

  • 在mybatis项目中,要有一个配置文件,文件名一般命名为mybatis-config.xml
  • MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
  • 注意一下的属性是具有顺序的,必须严格按照这个顺序标注属性
configuration(配置)
	properties(属性)
	settings(设置)
	typeAliases(类型别名)
	typeHandlers(类型处理器)
	objectFactory(对象工厂)
	plugins(插件)
	environments(环境配置)
		environment(环境变量)
			transactionManager(事务管理器)
			dataSource(数据源)
	databaseIdProvider(数据库厂商标识)
	mappers(映射器)
  • 一个配置文件示例如下:
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useSSL=true&amp;useUnicode=true;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个Mapper文件都要在mybatis核心配置文件中注册!-->
    <mappers>
        <mapper resource="com/LinXiaoDe/dao/userMapper.xml"></mapper>
    </mappers>
</configuration>

(1)environment属性,通过id选择不同的环境

 <environments default="development">
 	在这里通过id选择不同的配置文件
     <environment id="test">
         <transactionManager type="JDBC"/>
         <dataSource type="POOLED">
             <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
             <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useSSL=true&amp;useUnicode=true;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
             <property name="username" value="root"/>
             <property name="password" value="123456"/>
         </dataSource>
     </environment>
     
     <environment id="test">
         <transactionManager type="JDBC"/>
         <dataSource type="POOLED">
             <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
             <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useSSL=true&amp;useUnicode=true;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
             <property name="username" value="root"/>
             <property name="password" value="123456"/>
         </dataSource>
     </environment>
 </environments>

(2)properties属性

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

  • 直接设置
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
             <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db?useSSL=true&amp;useUnicode=true;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
             <property name="username" value="root"/>
             <property name="password" value="123456"/>
  • 引入外部文件

在这里插入图片描述

在这里插入图片描述

  • 当二者同时存在时,优先使用外部文件配置

(3)别名属性< typeAliases >优化

在Mapper配置文件中,要实现数据库操作,一般我们要指定返回值或者参数值。例如:

    <select id="getUserLike" parameterType="String" resultType="com.LinXiaoDe.pojo.User">
        select * from mybatis_db.user_t where userName like #{
    
    value}
    </select>

但是resultType注入字段很长,可以考虑用<Aliase>别名进行优化,一般有三种方式:

  • typeAlias:别名标签
  • package:每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名,有注解的时候,别名为其注解值,写在javaBean类开头
  • 举例如下:
<typeAliases>
 	//1
    <typeAlias type="com.LinXiaoDe.pojo.User" alias="user"/>
    //2 默认以类命首字母小写
	<package name="com.LinXiaoDe.pojo"/>
</typeAliases>
  • 3.包+注解

在这里插入图片描述

mapper配置文件可以这样写:
 <select id="getUserLike" parameterType="String" resultType="user">
     select * from mybatis_db.user_t where userName like #{
    
    value}
 </select>

常见的 Java 内建的类型别名

在这里插入图片描述
在这里插入图片描述

(4) setting

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

  • 懒加载
  • 日志实现
  • 缓存开启关闭
<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

日志工厂

logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 属性值可以取:

  • SLF4J
  • LOG4J (掌握)
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING (标准日志,不用额外导入依赖,掌握)
  • NO_LOGGING
  • 默认不设置

在核心配置文件中加入<logImpl>,举例:

①STDOUT_LOGGING 标准日志

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

在这里插入图片描述
② Log4j

  • Log4j是Apache的一个开源项目
  • 通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件…
  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

使用方法:

  • 1.从maven仓库中导入依赖

log4j

  • 2.在resource目录下新建log4j.properties配置文件
#将等级为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/kuang.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
  • 3、setting设置日志实现
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
  • 4、在程序中使用Log4j进行输出!
static Logger logger = Logger.getLogger(test.class);
@Test
public void selectUser() {
    
    
    logger.info("info:进入selectUser方法");
    logger.debug("debug:进入selectUser方法");
    logger.error("error: 进入selectUser方法");
    SqlSession session = MyBatisUtil.getSqlSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> users = mapper.getUsers();
    for (User user: users){
    
    
        System.out.println(user);
    }
    session.close();
}

(5) 映射器mapper

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

  • 使用相对于类路径的资源引用
<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
  • 使用映射器接口实现类的完全限定类名
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
  • 将包内的映射器接口实现全部注册为映射器
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

猜你喜欢

转载自blog.csdn.net/weixin_44307065/article/details/108028211