一、properties(这个标签基本上不太使用,了解)java
一、mybatis可使用properties来引入外部properties配置文件的内容
resource是引入类路径下的资源
url:引入网络网络路径或磁盘路径下的资源mysql
新建一个file文件命名为dbconfig.properties,内容填充以下git
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
mybatis-config.xml文件内容修改以下,添加了properties标签,将数据库信息动态传入。(十一、16-19行进行了修改)github
(在后面mybatis与spring整合时,这一块都交给了spring作)spring
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 7 一、mybatis可使用properties来引入外部properties配置文件的内容 8 resource是引入类路径下的资源 9 url:引入网络网络路径或磁盘路径下的资源 10 --> 11 <properties resource="dbconfig.properties"></properties> 12 <environments default="development"> 13 <environment id="development"> 14 <transactionManager type="JDBC" /> 15 <dataSource type="POOLED"> 16 <property name="driver" value="${jdbc.driver}" /> 17 <property name="url" value="${jdbc.url}" /> 18 <property name="username" value="${jdbc.username}" /> 19 <property name="password" value="${jdbc.password}" /> 20 </dataSource> 21 </environment> 22 </environments> 23 <!-- 将咱们写好的sql映射文件(EmployeeMapper.xml)必定要注册到全局配置文件(mybatis-config.xml)中 --> 24 25 <mappers> 26 <mapper resource="EmployeeMapper.xml" /> 27 </mappers> 28 </configuration>
二、settingssql
2.一、mapUnderscoreToCamelCase的使用数据库
以前因为字段名没有和数据库中的对应上,lastName获取到的是null(以下图),使用mapUnderscoreToCamelCase可使用驼峰命名法,须要将默认值FALSE改成TRUE便可使用了。apache
将如下表明加入到全局配置mybatis-config.xml文件中网络
1 <settings> 2 <setting name="mapUnderscoreToCamelCase" value="TRUE"/> 3 </settings>
再次进行测试,能够取到值了mybatis
数据库的字段是last_name,而javabean是lastName,这种状况下使用nice~规范~
(数据库不区分大小写,故命名规则是单词间要加下划线;java区分大小写,命名规范是驼峰命名法)
三、typeAliases
别名处理器
在xml文件中应用全类名的地方,可使用别名了,减小工做量
在EmployeeMapper.xml文件中,查询结果的返回值为com.atguigu.mybatis.bean.Employee,太长了
别名不区分带小写
处理方法以下:
(1)从Javabean中的Employee复制全类名放到全局配置文件mybatis-config.xml
1 <typeAliases> 2 <!--typeAlias:为某个java类型起类名 3 type:指定要起别名的类型全类名;默认别名就是类型小写:employee 4 alias:指定新的别名
5 6 --> 7 <typeAlias type="com.atguigu.mybatis.bean.Employee"/> 8 </typeAliases>
(2)在EmployeeMapper.xml文件中,将返回值改成默认别名即employee,再次测试,成功
或者使用alias指定别名
mybatis-config.xml,修改以下
1 <typeAliases> 2 <!--typeAlias:为某个java类型起类名 3 type:指定要起别名的类型全类名;默认别名就是类型小写:employee 4 alias:指定新的别名 5 6 --> 7 <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> 8 </typeAliases>
EmployeeMapper.xml修改以下
1 <select id="getEmpById" resultType="emp"> 2 select * from tb1_employee where id = #{id} 3 </select>
运行成功!
若是每次取别名,都用typeAliases就每次只能为一个类型取别名,太麻烦了。使用批量取别名来解决这一问题
package:为某个包内下的全部类批量取别名
name:指定包名(为当前包及下面全部的的后代包的每一一个类都起一个默认别名(类名小写)
将全局文件中代码修改以下:
1 <typeAliases> 2 <package name="com.atguigu.mybatis.bean"/> 3 </typeAliases>
将EmpolyeeMapper.xml更改以下
1 <!-- resultType能够写成Employee或employee,别名不区分大小写 --> 2 <select id="getEmpById" resultType="Employee"> 3 select * from tb1_employee where id = #{id} 4 </select>
若是使用package,容易产生别名冲突,从而报错
解决方法:Javabean中使用一个注解,为这个类名指定一个新的别名
@Alias("emp")
并修改EmployeeMapper.xml中的返回值,固然别名不区分大小写
1 <select id="getEmpById" resultType="emp"> 2 select * from tb1_employee where id = #{id} 3 </select>
运行成功!
根据文档查看,咱们能够看到不少已经取好的别名
咱们本身设置的别名必定不能和下面的别名重复
写全类名比较适合查看按住crtl+鼠标点击,便可查看javabean,这样可能会比较方便一些。
四、typeHandlers(粗略介绍,后面再仔细看)
类型处理器,在数据类型和java映射时使用
日期处理:
NOTE If you use classes provided by JSR-310(Date and Time API), you can use the mybatistypehandlers-jsr310.(官方文档中的一句话)
官方下载地址:https://github.com/mybatis/typehandlers-jsr310
想要更丰富的类型这样来注册
<typeHandlers> <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" /> </typeHandlers>
可是在mybatis3.4之前的版本须要咱们手动注册这些处理器,之后的版本都是自动注册的。
五、plugins
插件
如今先简单了解,到mybatis运行原理之后,对mybatis运行机制了解后详细讲解。
先将四大对象混个眼熟。
Executor 执行器
ParameHandler 参数处理器
ResultSetHandler 结果集处理器
StatementHandler sql语句处理器
六、environments
environments:环境们,mybatis能够配置多种环境,default指定使用某种环境,能够达到快速切换
environment:配置一个具体的环境信息,必须有transactionManager和dataSource才完整,id表明当前环境的惟一表示
transactionManager:事务管理器;
type:事务管理器的类型,有JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory);
自定义事务管理器:实现TransactionFactory接口,type指定为全类名
dataSource:数据源;
type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)
自定义数据源:实现DataSourceFactory接口,type指定为全类名
Ctrl + Shift + T:快捷键打开openType,搜索configuration
这里边注册了不少别名
七、databaseIdProvider
支持多个数据库厂商
这个功能支持须要全局配置文件中添加
<databaseIdProvider type="DB_VENDOR" />
此标签于本人可能用不到先不写。。
八、mappers
mappers将sql映射注册到全局配置中
注册配置文件:
resource:应用类路径下的sql映射文件
url:引用网路路径或者磁盘路径下的sql音色文件
file:///var/mapper/AuthorMapper.xml
注册接口
class:引用(注册)接口,
一、有sql映射文件,映射文件名必须和接口同名,而且放在与接口同一目录下
二、没有sql映射文件,全部的sql都是利用注解写在接口上;
resource属性:
新建一个包,将EmployeeMapper.xml放进去,而后修改配置文件内容resource改成全类名
1 <mappers> 2 <mapper resource="mybatis/mapper/EmployeeMapper.xml" /> 3 </mappers>
class属性:
EmployeeMapperAnnotation接口代码:
1 package com.atguigu.mybatis.dao; 2 3 import org.apache.ibatis.annotations.Select; 4 5 import com.atguigu.mybatis.bean.Employee; 6 7 public interface EmployeeMapperAnnotation { 8 9 @Select("select * from tb1_employee where id = #{id}") 10 public Employee getEmpById(Integer id); 11 }
在测试文件中再写一个测试方法
1 public void test02() throws IOException { 2 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); 3 SqlSession openSession = sqlSessionFactory.openSession(); 4 5 try { 6 EmployeeMapperAnnotation mapper = openSession.getMapper(EmployeeMapperAnnotation.class); 7 Employee empById = mapper.getEmpById(1); 8 System.out.println(empById); 9 }finally { 10 openSession.close(); 11 } 12 13 }
运行成功!
不过仍是写在xml文件上便于维护,推荐必要重要的Dao接口写sql映射文件,不重要的简单的Dao接口为了开发快速可使用注解。
因为mapper都是一个一个注册的,比较麻烦,故而还有批量注册的方法。
使用package,name属性中要写包名,基于注解版没有问题,可是,写了映射文件的可能找不到,故而将映射文件放入同一个包下,文件名和接口名是同样的,这样才能够批量注册。
之后都将接口和xml放在一块儿,可是为了规整,在conf下建一个与接口文件同样路径的包
虽然看起来不是在一个路径下,实际打开源码包都都会放在bin的路径下,bin路径被咱们叫作类文件的开始。