博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三、MyBatis-全局配置文件
阅读量:4682 次
发布时间:2019-06-09

本文共 5538 字,大约阅读时间需要 18 分钟。

XML 映射配置文件(官方结构)

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。文档的顶层结构如下:

  • configuration 配置
      • environment 环境变量
        • transactionManager 事务管理器
        • dataSource 数据源

以上是mybatis官方提供的全局配置文件的结构内容,下面我们来看看如何配置这些属性:

 

properties属性配置

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

– 在 properties 元素体内指定的属性首先被读取。

– 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
也就是说:外部引入配置文件中的额属性值优先级比properties 元素体内的高。

 

settings属性配置

 

typeAliases 类型别名属性配置

给mybatis可以使用到的类型,取一个映射别名,可以用在SQL Mapper映射文件的resultType,parameterType等属性以及其他填写类型的属性值。

1)单个类型配置

 

2) 整包范围配置

 

3)注解形式 (给实体类中添加注解@Alias("name")

这种形式优先级最高,其次typeAlias,最后package形式。

 

示例:

 

mybatis内建类型别名:

 

typeHandlers 类型处理器

 主要提供给mybatis在预编译时参数设值的时候做参数类型转换处理,以及结果集处理时数据类型转换。自定义的类型转换器需要实现接口org.apache.ibatis.type.TypeHandler。

以下为接口源码:

package org.apache.ibatis.type;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * @author Clinton Begin */public interface TypeHandler
{ void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException; T getResult(ResultSet rs, String columnName) throws SQLException; T getResult(ResultSet rs, int columnIndex) throws SQLException; T getResult(CallableStatement cs, int columnIndex) throws SQLException;}

StringTypeHandler.java源码:(处理String类型的参数和结果数据)

package org.apache.ibatis.type;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * @author Clinton Begin */public class StringTypeHandler extends BaseTypeHandler
{ @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getString(columnName); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return rs.getString(columnIndex); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return cs.getString(columnIndex); }}

1) 单个配置形式:

2)整包配置形式:

 

 plugins 插件配置

   插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行。后面会有专门的章节我们来介绍mybatis运行原理以及插件

  四大对象:

  1. Executor (update, query, flushStatements, commit, rollback,getTransaction, close, isClosed)
  2. ParameterHandler (getParameterObject, setParameters)
  3. ResultSetHandler (handleResultSets, handleOutputParameters)
  4. StatementHandler (prepare, parameterize, batch, update, query)

 

 

environments 环境

备注:实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置。

 

databaseIdProvider 数据库厂商标识配置

1)如何使用呢?

在SQL标签中,可以通过databaseId属性来指定数据库来源,只有当前数据库与之匹配时才用这条定制化SQL。SQL方法ID相同的SQL,优先使用指定databaseId的SQL 。

如上,当数据库为mysql时,会使用第二个select sql,当数据库为sql server时,会使用第一个select sql。同时可以在mapper.xml文件中通过_databaseId获取当前数据库的所对应的databaseId值。

 

mappers 映射器设置

用来注册写好的SQL Mapper映射文件。

1)单个注册方式:

 

2)整包注册方式:

 示例:

 

总结

  1)通过配置文件的方式创建SqlSessionFactory时,会先通过org.apache.ibatis.builder.xml.XMLConfigBuilder解析全局xml配置文件,将解析的结果放到内存org.apache.ibatis.session.Configuration对象,这是一个全局对象,在mybatis整个生命周期都有效的内存对象。

  2)同理,也可以直接创建org.apache.ibatis.session.Configuration对象,再由Configuration来创建SqlSessionFactory对象。

  官方提供的创建SqlSessionFactory的硬编码方式:

//BlogDataSourceFactory为自定义的数据库连接池工厂DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory, dataSource);//直接创建Configuration 内存全局对象Configuration configuration = new Configuration(environment);//硬编码的方式配置Mapper,也可以配置其他属性,不配置时使用mybatis内部默认值configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

 

转载于:https://www.cnblogs.com/kancy/p/10205598.html

你可能感兴趣的文章
Navicat远程连接阿里云服务器的mysql
查看>>
https soap链接示例
查看>>
八LWIP学习笔记之用户编程接口(NETCONN)
查看>>
Git Day02,工作区,暂存区,回退,删除文件
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>
Nginx 常用命令总结
查看>>
hall wrong behavior
查看>>
Collection集合
查看>>
【C++】const在不同位置修饰指针变量
查看>>
github新项目挂历模式
查看>>
编写jquery插件
查看>>
敏捷开发笔记
查看>>
学前班
查看>>
关于自关联1
查看>>
hdu-1814(2-sat)
查看>>
谷歌浏览器,添加默认搜索引擎的搜索地址
查看>>
数据结构化与保存
查看>>
为什么需要Docker?
查看>>
国内5家云服务厂商 HTTPS 安全性测试横向对比
查看>>
how to control project
查看>>