mybatis3.0-[topic10-14] -全局配置文件_plugins插件简介/ typeHandlers_类型处理器简介 /enviroments_运行环境 /多数据库支持/mappers_sql映射注册
mybatis3.0-全局配置文件_ 下面为中文官网解释
全局配置文件的标签需要按如下定义的顺序:
<!ELEMENT configuration
(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
/plugins插件简介 目前了解即可
插件(plugins)
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。
/typeHandlers_类型处理器简介 目前了解即可
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,
都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。 提示 从 MyBatis 3.4.5 (JDK1.8) 开始,MyBatis 默认支持 JSR-310(日期和时间 API) 。
/enviroments_运行环境 <--4 -->
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。 不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。
事务管理器(transactionManager)
数据源(dataSource)
/多数据库支持 <--5 -->
/mappers_sql映射注册 <--6 -->
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。
但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。
Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。
笔记要点
出错分析与总结
使用包名的批量注册, conf下的com.dao 和src下的com.dao目录一直,也更加好看,
相当于把conf下的com.dao 的在物理位置上放到了src下的com.dao目录.
全局配置的mappers中添加: <package name="com.dao"/>
推荐:比较重要的, 复杂的Dao 接口我们来写sql映射文件;
不重要的,简单的Dao接口为了开发快速可以使用注解;
全局配置文件 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>
<properties resource="dbconfig.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--.typeAliases : 别名处理器,可以为我们的java类的类型起别名 -->
<typeAliases>
<package name="com.bean"/>
</typeAliases> <!-- 4.environments; 环境,mybatis可以配置多个环境,
environments:配置一个具体的环境信息,必须有以下两个标签:
transactionManager: 事务管理器;
在 MyBatis 中有两种类型(也就是 type=”[JDBC|MANAGED]”):
Spring中会自动覆盖; dataSource:数据源的type类型;
有三种内建的数据源类型(也就是 type=”[UNPOOLED|
POOLED|
JNDI]
自定义数据源:实现DatasourceFactory接口即可,
-->
<environments default="development">
<!--测试环境-->
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!--开发环境-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--
5.databaseIdProvider : 支持多数据库厂商;
type="DB_VENDOR" ,
作用就是得到数据库厂商的标识(驱动:getDatabaseProductName()).mybatis
-->
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
<!--6. 将我们写好的sql映射文件{EmployeeMapper.xml},
一定要注册到本全局配置文件{mybatis-config.xml}中-->
<mappers>
<!--
一个mapper; 注册一个sql映射!
resource: 引用类路径下的sql映射文件,
eg: resource="EmployeeMapper.xml"/>
或完全限定资源定位符:引用网络路径或者磁盘路径下的sql映射文件(包括 file:/// 的 URL),
eg:<mapper url="file:///var/conf/*********.xml"/>
或类名(使用映射器接口实现类的完全限定类名):
注册接口:class,引用注册接口.
1.有sql映射文件
2,没有sql映射文件,所有的sql都是利用注解进行;
eg: <mapper class="com.dao.EmployeeMapperAnnotation"/>
批量注册: 包名(将包内的映射器接口实现全部注册为映射器): 推荐:比较重要的, 复杂的Dao 接口我们来写sql映射文件;
不重要的,简单的Dao接口为了开发快速可以使用注解;
-->
<package name="com.dao"/> </mappers>
</configuration>
工程组织

测试代码
使用注解,建立EmployeeMapperAnnotation接口, 并加上注解
@Select("select * from tbl_employee where id=#{id}")
:
package com.dao; import com.bean.*;
import org.apache.ibatis.annotations.Select; public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id=#{id}")
public Employee getEmpById(Integer id);
}
测试类:test_tp14 测试成功
package com.test;
public class test_tp14 {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test02() throws IOException{
SqlSession openSession = getSqlSessionFactory().openSession();
try {
EmployeeMapperAnnotation mapper=openSession.getMapper(EmployeeMapperAnnotation.class);
Employee empById = mapper.getEmpById(1);
System.out.println(empById);
} finally {
openSession.close();
}
}
}
上个博客的 测试类:test_tp04 也测试成功
package com.test;
import com.bean.*;
import com.dao.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import java.io.IOException;
import java.io.InputStream; /**接口式编程:
* 1. 原生: Dao 接口-->Dao接口的实现类
* mybatis: Mapper --> 有一个与之对应的 XXMapper.xml
* 2. SqlSession
* 代表与数据库的一次会话,用完必须关闭资源;
*3.SqlSession 和connection 一样都是非线程安全,不能声明为全局变量;
* 每次使用都需要重新生命.
* 4.mapper接口没有实现类, 但是mybatis 会为这个接口生成一个代理对象:
* (需要先将接口和XML文件进行绑定!)
* EmployeeMapper empMapper=openSession.getMapper(EmployeeMapper.class);
* 5.两个重要的配置文件:
* mybatis的全局配置文件: 包含数据库连接池信息,事物管理器信息,系统文件的信息.....
* SQL映射文件: 保存了每一个SL语句的映射信息,
*/
public class Test_tp04 {
//创建一个模板,直接返回一个新建的SqlSessionFactory
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test //第四节测试,测试接口式编程
public void test01() throws IOException{
//1.获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //调用模板的方法 //2.获取一个SqlSession对象
SqlSession openSession = sqlSessionFactory.openSession(); try {
//3.获取接口的实现类
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println("mapper.getClass(): "+mapper.getClass());
System.out.println(employee);
} finally {
openSession.close();
}
}
}
测试结果
DEBUG 11-27 18:20:35,719 ==> Preparing: select * from tbl_employee where id=? (BaseJdbcLogger.java:145)
DEBUG 11-27 18:20:35,736 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 11-27 18:20:35,748 <== Total: 1 (BaseJdbcLogger.java:145)
Employee{id=1, lastname='tom', email='598@qq.com', gender='0'}
mybatis3.0-[topic10-14] -全局配置文件_plugins插件简介/ typeHandlers_类型处理器简介 /enviroments_运行环境 /多数据库支持/mappers_sql映射注册的更多相关文章
- Mybatis学习(二)————— 全局配置文件详解
一.全部配置内容 SqlMapConfig.xml的配置内容和顺序如下,顺序不能乱.现在来对这些属性的意思一一进行讲解. 二.properties 作用:引用java属性文件中的配置信息,比如,加载连 ...
- mybatis学习(四)——config全局配置文件解析
在全集配置文件中引入dtd约束“http://mybatis.org/dtd/mybatis-3-config.dtd”,主要有以下几个标签,现在详细解释下这几个标签的使用 1.properties属 ...
- Mybatis全局配置文件详解(三)
每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessionFactoryBuild获得,而SqlSessionF ...
- 由浅入深---MyBatis的全局配置文件
从我开始接触代码,我就很怕写配置文件,一般的配置文件我都是直接从上一个项目复制到这个项目来改改,可能有部分同学也有我这种痛吧: 我目前一般的做法,先去找找例子(从网上,从github,从官网)之后再改 ...
- maven全局配置文件settings.xml详解
概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径. settings.xml文件是干什么的,为什么要配置它 ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)
前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及M ...
- Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——My ...
- [转]maven全局配置文件settings.xml详解
概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径. Paste_Image.png settings.xm ...
- Mybatis(二) 全局配置文件详解
这节来说说全局配置文件的东西,非常简单.看一遍就懂了. --WH 一.全部配置内容 SqlMapConfig.xml的配置内容和顺序如下,顺序不能乱.现在来对这些属性的意思一一进行讲解. 二.prop ...
随机推荐
- Apache POI操作pptx基本使用
最近有一个ppt操作的需求,因此查了下相关的资料 ppt分类 (1)2007版之前的 是基于二进制的文件格式 细节没有完全公开,第三方厂商多是用单向工程方法猜测和分析出来的.WPS做得好一些,但开源的 ...
- 基于vue-cli、elementUI的Vue简单入门例子
vue-cli.elementUI的安装教程请看: https://www.cnblogs.com/joe235/p/12013818.html 把HelloWorld.vue文件修改为: <t ...
- Qt qml的软件架构设计
google: qt qml application architecture 有很多资源. 1 https://www.ics.com/blog/multilayered-architecture- ...
- Zuul【自定义Filter】
实际业务中,如果要自定义filter过滤器,只需集成ZuulFIlter类即可,该类是个抽象类,它实现了IZuulFIlter接口,我们需要实现几个方法,如下示例: import static org ...
- SQL语言(一)
数据定义语言:简称DDL(Data Definition Language) create database 数据库名 character set 'utf-8'; drop database 数据库 ...
- Python尾递归优化
Python开启尾递归优化 cpython本身不支持尾递归优化, 但是一个牛人想出的解决办法:实现一个 tail_call_optimized 装饰器 #!/usr/bin/env python2.4 ...
- 配置Fiddler
想要 浏览更多Fiddler内容:请点击进入Fiddler官方文档 阅读目录: 1.Fiddler入门 2.配置web浏览器以使用Fiddler: 3.配置Fiddler解密HTTPS流量: 4.配置 ...
- 谷歌chrome浏览器提示“喔唷 崩溃啦”的解决方案
原因分析:有可能是注册列表被一些卫士类优化工具或杀毒软件优化了. 解决方案:1. 卸载谷歌浏览器. ①开始→控制面板→添加或删除程序→找到谷歌浏览器卸载(卸载时勾选删除数据) ② 进入注册列表删除谷歌 ...
- linux安装imagemagick,centos安装imagemagick方法
1.安装文件格式支持库 yum install tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype- ...
- Spring Cloud Alibaba学习笔记(11) - RocketMQ事务消息
在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这 ...