详解MyBatis XML配置解析

MyBatis核心配置文件

<?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>
 <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 resource="org/mybatis/example/BlogMapper.xml"/>
 </mappers>
</configuration>

注意:接下来所有的配置,都要按照上图的顺序进行配置,否则会出错

1. 环境配置(environments)

MyBatis 可以配置成适应多种环境,但每个 SqlSessionFactory 实例只能选择一种环境

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

其中可以嵌套多个环境

<environments default="development">

<!--环境1-->
 <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>

<!--环境2-->
 <environment>
  ...
 </environment>

<!--环境3-->
 <environment>
  ...
 </environment>

</environments>

子元素节点:environment

环境 ID:每个环境都有对应的一个环境ID

  • 默认环境ID(比如:default=“development”)
  • 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。

事务管理器(transactionManager)

  • 在 MyBatis 中有两种类型的事务管理器:JDBC/MANAGED
  • 默认为 JDBC

数据源(dataSource)

  • dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
  • 数据源是必须配置的。
  • 有三种内建的数据源类型 UNPOOLED/POOLED/JNDI
    • unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。
    • pooled(默认):这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
    • jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的

数据源也有很多第三方的实现:dbcp、c3p0、druid等等…

2. 属性(properties)

我们利用Properties属性来实现应用配置文件

这些属性可以在外部进行配置,并可以进行动态替换。

方式一:直接在Mybatis核心配置文件中配置这些属性(我们先前的方法)

方式二:在 properties 元素的子元素中设置

编写 config.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=200024

在核心配置文件中引入

<?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="config.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>

引入外部文件的同时,也可以在其中增加一些属性配置

优先级问题:首先读取在 properties 元素体内指定的属性

<properties resource="config.properties">
 <property name="username" value="root"/>
 <property name="password" value="200024"/>
</properties>

比如config.properties中的数据库连接密码正确,但是properties 元素体内的密码不正确,则会报错,因为优先读取properties 元素体内指定的属性

3. 类型别名(typeAliases)

注意位置顺序

方式一:通过typeAlias起别名

  • 类型别名可为 Java 类型设置一个缩写名字。
  • 它仅用于 XML 配置,意在降低冗余的全限定类名书写
<typeAliases>
 <typeAlias type="pojo.User" alias="User"/>
</typeAliases>

type的值为指定Java类名alias为新起的别名

方式二:通过package起别名

也可以指定一个包名,MyBatis 会在包名下面搜索对应的实体类

<typeAliases>
 <package name="pojo"/>
</typeAliases>

每一个在包 pojo 中的 实体类,在没有注解的情况下,会使用 实体类 的首字母小写的非限定类名来作为它的别名。 比如 pojo.User 的别名为 user;若有注解,则别名为其注解值。

@Alias("hello")
public class User {
 ...
}

此时,别名为hello

建议

  • 在实体类较少的时候,使用第一种方式
  • 在实体类较多的时候,使用第二种方式

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名 映射的类型
_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

4. 设置(settings)

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

设置(settings)查看帮助文档https://mybatis.org/mybatis-3/zh/index.html

  • 懒加载
  • 日志实现
  • 缓存开启关闭

最常用日志

4.1、日志工厂

如果一个数据库操作出现了异常,我们需要排错,日志是最好的助手!

logImpl

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING
  • NO_LOGGING

在MyBatis核心配置文件中配置我们的日志

注意大小写问题!!!不要写错!!

注意位置顺序问题

<settings>
 <!--标准日志工厂实现-->
 <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

然后运行我们的测试类,发现多了很多内容,这就是我们的日志

4.2、LOG4J

什么是LOG4J?

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等我们也可以控制每一条日志的输出格式通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码

使用步骤

导包

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

配置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/zsr.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核心配置文件中配置我们LOG4J

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

测试

同时在当前项目目录下生成了zsr.log文件,这里面保存了我们的日志信息

这就是我们在log4j.properties进行的设置,我们同样可以设置其他的内容

IDEA可能出现打不开的情况,我们将其换成.txt格式就可以打开了

简要使用

要在使用LOG4J的类中,导入包 org.apache.log4j.Logger

日志对象,参数为当前类的class

static Logger logger = Logger.getLogger(UserMapperTest.class);

编写测试方法,三种常见日志级别

@Test
public void testLog4j() {
 logger.info("info:进入了testLog4j方法");
 logger.debug("debug:进入了testLog4j方法");
 logger.error("error:进入了testLog4j方法");
}

运行该方法

5. 映射器(mappers)

mappers

映射器 : 定义映射SQL语句文件

告诉 MyBatis 到哪里去找映射文件

  • 使用相对于类路径的资源引用
  • 使用完全限定资源定位符(包括 file:/// 的 URL)
  • 使用类名和包名等。

方式一:使用相对于类路径的资源引用注册绑定(推荐)

<mappers>
 <mapper resource="mapper/UserMapping.xml"/>
</mappers>

方式二:使用映射器接口实现类的完全限定类名注册绑定

<mappers>
 <mapper class="mapper.UserMapper"/>
</mappers>

常见问题:

注意点:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下

我的问题:Mapper接口和Mapper配置文件没有同名!!

修改后:

方式三: 将包内的映射器接口实现全部注册为映射器

<mappers>
 <package name="mapper"/>
</mappers>

注意点同方式二:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下

6. 其他配置

了解~

typeHandlers(类型处理器)

  • 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
  • 你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。【了解即可】

objectFactory(对象工厂)

  • MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。
  • 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过有参构造方法来实例化。
  • 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。【了解即可】

plugins(插件)

三个常用插件:

到此这篇关于详解MyBatis XML配置解析的文章就介绍到这了,更多相关MyBatis XML配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解mybatis-plus的 mapper.xml 路径配置的坑

    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件. 特此记录一下,问题如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.husy.mapper.SystemUserMapper.findUserByName at com.baomidou.mybatisplus.core.override.MybatisMapperMe

  • Mybatis中的config.xml配置文件详细解析

    经过前面的文章,我觉得对Mybatis的正题理解已经足够了,但是对Mybatis的使用,我觉得还是会有一点的模糊,就我个人而言,我觉得掌握好Mybatis框架,主要要明白三个文件,第一个就是等下要谈论的Mybatis-comfig.xml文件,还有就是**Mapper.xml,以及我们所定义的Mapper类,理解了这三个东西,然后有sql的基础,还有java的基础的话,后面不论是使用基于xml的方法,还是基于java-based Configuration的方法,都会简单的多. 废话不多说,现在

  • 基于MyBatis XML配置方法(全面了解)

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息. 文档的顶层结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSourc

  • Mybatis中 XML配置详解

    Mybatis常用带有禁用缓存的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> <

  • MyBatis SqlMapConfig.xml配置

    SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境集合属性对象)mappers(映射器) environment(环境子属性对象) transactionManager(事物管理) datesource(数据源 mappers(映射器) 一.SqlMapC

  • 详解MyBatis XML配置解析

    MyBatis核心配置文件 <?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> <environm

  • 详解Mybatis是如何解析配置文件的

    缘起 经过前面三章的入门,我们大概了解了Mybatis的主线逻辑是什么样子的,在本章中,我们将正式进入Mybatis的源码海洋. Mybatis是如何解析xml的 构建Configuration 我们调用new SqlSessionFactoryBuilder().build()方法的最终目的就是构建 Configuration对象,那么Configuration何许人也?Configuration对象是一个配置管家, Configuration对象之中维护着所有的配置信息. Configura

  • 详解Vue CLI3配置解析之css.extract

    大家还记得我们在老版本中,对于线上环境配置中会把所有的 css 多打成一个文件: 核心是使用了插件 extract-text-webpack-plugin,方式如下: 第一步都是加载插件 const ExtractTextPlugin = require('extract-text-webpack-plugin') 这个插件的描述如下: Extract text from a bundle, or bundles, into a separate file. 然后配置如下:(省去了 rules

  • 详解MyBatis配置typeAliases的方法

    0x00:前言参考 之前的<MyBatis 中 SqlMapConfig 配置文件详解>记了一下 MyBatis 中的核心配置文件各个标签的作用和使用场景,这篇文章细说一下配置文件中 typeAliases 标签的详细使用. 0x01:标签介绍 在 MyBatis 的 sql 映射配置文件中,需要使用 paramterType.resultType 来设置 sql 语句的输入输出参数,一般参数都是基本的数据类型或封装类型,但都需要声明该类型的全路径,java.lang.String,或者 cn

  • 详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    一.getMapper()接口 解析:getMapper()接口 IDept.class定义一个接口, 挂载一个没有实现的方法,特殊之处,借楼任何方法,必须和小配置中id属性是一致的 通过代理:生成接口的实现类名称,在MyBatis底层维护名称$$Dept_abc,selectDeptByNo() 相当于是一个强类型 Eg 第一步:在cn.happy.dao中定义一个接口 package cn.happy.dao; import java.util.List; import cn.happy.e

  • 详解MyBatis逆向工程

    1.什么是mybatis逆向工程 在使用mybatis时需要程序员自己编写sql语句,针对单表的sql语句量是很大的,mybatis官方提供了一种根据数据库表生成mybatis执行代码的工具,这个工具就是一个逆向工程. 逆向工程:针对数据库单表-->生成代码(mapper.xml.mapper.java.pojo..) mybatis-generator-core-1.3.2.jar-逆向工程运行所需要的jar核心 包 2.配置逆向工程的配置文件 配置文件generatorConfig.xml

  • 详解Mybatis的缓存

    Mybatis的缓存 mybatis是一个查询数据库的封装框架,主要是封装提供灵活的增删改sql,开发中,service层能够通过mybatis组件查询和修改数据库中表的数据:作为查询工具,mybatis有使用缓存,这里讲一下mybatis的缓存相关源码. 缓存 在计算机里面,任何信息都有源头,缓存一般指源头信息读取后,放在内存或者其他读取较快的地方,下次读取相同信息不去源头查询而是直接从内存(或者能快速存取的硬件)读取.这样可以减少硬件使用,提高读取速度. mybatis也是这样,查询数据库的

  • 详解MyBatis工作原理

    一.Mybatis工作原理 Mybatis分层框架图 Mybatis工作原理图 源码分析:一般都是从helloworld入手 1.根据xml配置文件(全局配置文件mybatis-config.xml)创建一个SqlsessionFactory对象,mybatis-config.xml有数据源一些环境信息 2.sql映射文件EmployeeMapper.xml配置了每一个sql,以及sql的封装规则等. 3.将sql映射文件注册在全局配置文件中 4.写代码: 根据全局配置文件得到sqlsessio

  • 详解Mybatis拦截器安全加解密MySQL数据实战

    需求背景 公司为了通过一些金融安全指标(政策问题)和防止数据泄漏,需要对用户敏感数据进行加密,所以在公司项目中所有存储了用户信息的数据库都需要进行数据加密改造.包括Mysql.redis.mongodb.es.HBase等. 因为在项目中是使用springboot+mybatis方式连接数据库进行增删改查,并且项目是中途改造数据.所以为了不影响正常业务,打算这次改动尽量不侵入到业务代码,加上mybatis开放的各种拦截器接口,所以就以此进行改造数据. 本篇文章讲述如何在现有项目中尽量不侵入业务方

  • 详解Mybatis中的 ${} 和 #{}区别与用法

    Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{}和${} 我们经常使用的是#{},一般解说是因为这种方式可以防止SQL注入,简单的说#{}这种方式SQL语句是经过预编译的,它是把#{}中间的参数转义成字符串,举个例子: select * from student where student_name = #{name} 预编译后,会动态解析成一个参数标记符?: select * from student where student_name

随机推荐