mybatis3.0-全局配置文件_ 下面为中文官网解释
/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='[email protected]', gender='0'}