我们在使用Mybatis时,总要配置其配置文件,其中有很多的标签,下面我们一起来解释一下这些标签,算是一个总结。
文章目录
Mybatis配置文件中最为重要的一个标签,configuration,我们点进其源码可以看到:
去查看了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 配置
properties 配置文件
settings mybatis设置
typeAliases 为Java类起别名
typeHandlers 类处理器
objectFactory 对象工厂
plugins 插件
environments 环境
transactionManager : 事务管理
dataSource : 数据源
mappers 映射器
上面是一份mybatis配置文件(下面统一说成Mybatis-config.xml) 的代码,下面是configueation配置标签,其下包含了众多的标签,下面我们来一一查看
properties
属性的官方文档:http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
配置文件标签,先来查看一下我们最开始使用到的配置文件,将连接数据库的所有信息全部在这里面写着,不便于维护和整理
可以想到,如果我们可以将其数据库的连接代码封装到一个database.properties文件中,然后再去Mybatis-config.xml文件中去调用,这样不就使得代码更为便于维护和整理。
将数据库的连接代码写入其中
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8
username = root
password = 123456
这样,将Mybatisconfig.xml文件中可以变为如下:
settings
设置的官方文档:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
设置中包含了众多的功能,这里以日志为例…
在大型的项目中,我们希望在运行是有日志可以输出,这样我们能更为清晰的知道代码的运行流程,错误和bug也能够更为简单的找到,这样就需要使用到settings标签
示例:
<!--Mybatis设置-->
<settings>
<!--默认日志实现-->
<!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!--Log4j实现-->
<setting name="logImpl" value="LOG4J"/>
</settings>
同时需要再pom.xml(Maven工程)文件中导入如下代码来下载jar包,如果不是使用Maven工程,那就将jar包下载下来导入到lib目录下…
<!--LOG4J日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
最后创建一个Log4j的配置文件log4j.properties(下面代码是官方代码,不用记,直接复制就可以了0_0)
### Log4j配置 ###
#定义log4j的输出级别和输出目的地(目的地可以自定义名称,和后面的对应)
#[ level ] , appenderName1 , appenderName2
log4j.rootLogger=DEBUG,console,file
#-----------------------------------#
#1 定义日志输出目的地为控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
####可以灵活地指定日志输出格式,下面一行是指定具体的格式 ###
#%c: 输出日志信息所属的类目,通常就是所在类的全名
#%m: 输出代码中指定的消息,产生的日志具体信息
#%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#-----------------------------------#
#2 文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.file = org.apache.log4j.RollingFileAppender
#日志文件输出目录
log4j.appender.file.File=log/info.log
#定义文件最大大小
log4j.appender.file.MaxFileSize=10mb
###输出日志信息###
#最低级别
log4j.appender.file.Threshold=ERROR
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#-----------------------------------#
#3 druid
log4j.logger.druid.sql=INFO
log4j.logger.druid.sql.DataSource=info
log4j.logger.druid.sql.Connection=info
log4j.logger.druid.sql.Statement=info
log4j.logger.druid.sql.ResultSet=info
#4 mybatis 显示SQL语句部分
log4j.logger.org.mybatis=DEBUG
#log4j.logger.cn.tibet.cas.dao=DEBUG
#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
typeAliases
为Java类起别名(注意:是类,接口不能去别名),官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases
相信如果你使用过Mybatis,就会被其Mapper.xml文件中的输入类的路径搞的头疼,一长串的类名写起来真的有、烦…
typeAliases 为Java类起别名,就出现拯救我们了,
格式:
<!--配置别名-->
<typeAliases>
<!--<typeAlias type="com.MLXH.pojo.User" alias="User"/>-->
<package name="com.MLXH.pojo"/>
</typeAliases>
- typeAlias 标签:准确指定某一个类的别名,第一个参数为类的路径名,第二个为别名
- package 标签:为某一个包指定别名,只有一个参数,即为你想要设置的包路径,那么包内部的所有类的别名都会自动的设定为类的名称(区分大小写)
这样就不用再写一堆的路径名,直接使用别名来代替~
typeHandlers
类型处理器官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下面是官方文档中给出的一些示例:
这个标签其实是给我们开发人员留着的,当你想要设置一个比较奇葩的数据类型来进行对应的话,如把***类型,对应为string类型…
可以通过重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。 具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个 JDBC 类型
objectFactory
对象工厂 ,官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#objectFactory
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。
plugins
插件,官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。一般只是使用其来查看方法的调用,谨慎使用,因为有可能使用不当会破坏Mybatis源码…
environments (重点)
环境,官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#environments
MyBatis 是可以配置成适应多种环境,因为这种机制有助于将 SQL 映射应用于多种数据库之中,例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同模式的多个生产数据库中使用相同的 SQL 映射。有许多类似的使用场景。
重点:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
每个数据库对应一个 SqlSessionFactory 实例为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。
格式:
<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>
其中encironment标签就是其中的一个环境变量,id属性设置为development,在environment标签的default属性中,就选择了development环境变量
这里的transactionManager,是事务管理。
transactionManager
在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”)
接下来是官方解释:
- JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
dataSource
数据源:dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。其有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):
- UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
- JNDI – 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
更为详细的解释可以看Mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/configuration.html#environments
databaseIdProvider
数据库厂商标识,官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#databaseIdProvider
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。 为支持多厂商特性只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:
<databaseIdProvider type="DB_VENDOR" />
mappers
映射器,官方文档地址:http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers
MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。例如:
mappers标签下属只有mapper和package两个标签
mapper:下有resource、url、class三个属性
-
resource:使用相对于类路径的资源引用(推荐)
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
-
rul:使用完全限定资源定位符(不推荐)
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
-
class:使用映射器接口实现类的完全限定类名(推荐)
<mapper class="org.mybatis.builder.AuthorMapper"/>
package标签下只有一个name属性
- name: 将包内的映射器接口实现全部注册为映射器
<package name="org.mybatis.builder"/>
因为package会将其全部注册为映射器,所以在使用的时候一定要仔细检查!
注意
所有的标签,在configuration标签中的顺序不能乱!一定不能乱,乱就报错0_0!!!,写的时候记不住顺序就点进去源码中看一眼!!!