Mybatis
<?xml version="1.0" encoding="UTF-8" ?>
<configuration><!-- 配置-->
<properties/><!-- 属性 --><settings/><!-- 设置--><typeAliases/><!-- 类型命名-->
<typeHandlers/><!-- 类型处理器-->
<objectFactory/><!-- 对象工厂-->
<plugins/><!-- 插件-->
<environments><!-- 配置环境-->
<environment><!-- 环境变量-->
<transactionManager/><!--事务管理器-->
<dataSource/><!--数据源-->
</environment>
</environments>
<databaseIdProvider/><!-- 数据库厂商标识-->
<mappers/><!-- 映射器-->
</configuration>
这是全部Mybatis配置元素,顺序不能改变,如果改变Mybatis在解析XML文件时候就会出现异常。
1.properties元素
properties是一个配置属性的元素,让我们能在配置文件的上下文中使用它。
Mybatis提供3种配置方式:
(1)property子元素
(2)properties配置文件
(3)程序参数传递
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
properties特性:(首选的方式是使用properties文件)
注意: MyBatis 将按照下面的顺序来加载属性:
在properties元素体内定义的属性首先被读取。
然后会读取properties元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
最后读取parameterType传递的属性,它会覆盖已读取得同名属性。
建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX。
2.setting设置
mybatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载。。
全局参数将会影响mybatis的运行行为。
详细参见“学习资料/mybatis-settings.xlsx”文件
配置不需要修改太多,一般来说我们只要修改少量的配置就可以了。
3.typeAliases别名(重点)
在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。
如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
(1)系统定义别名
别名 |
映射的类型 |
_byte |
byte |
_long |
long |
_short |
short |
_int |
int |
_integer |
int |
_double |
double |
_float |
float |
_boolean |
boolean |
string |
String |
byte |
Byte |
long |
Long |
short |
Short |
int |
Integer |
integer |
Integer |
double |
Double |
float |
Float |
boolean |
Boolean |
date |
Date |
decimal |
BigDecimal |
bigdecimal |
BigDecimal |
<!--定义别名-->
<typeAliases>
<typeAlias alias="user" type="com.learn.chapter2.po.User"/>
</typeAliases>
引用别名
<select id="findUserByName" parameterType="java.lang.String" resultType="user">
select * from user where username like '%${value}%'
</select>
(3)批量定义别名(常用)
<!--批量别名定义,指定包名,mybatis自动扫描包中的类,自动定义别名,别名就是类名(首字母大写小写都可以)也可以用@Alias方式进行注解
<typeAliases>
<package name="cn.mybatis.po"/>
</typeAliases>
4.typeHandler类型处理器
mybatis中通过typeHandlers完成jdbc类型和java类型的转换。
通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.
mybatis支持类型处理器:
类型处理器 |
Java类型 |
JDBC类型 |
BooleanTypeHandler |
Boolean,boolean |
任何兼容的布尔值 |
ByteTypeHandler |
Byte,byte |
任何兼容的数字或字节类型 |
ShortTypeHandler |
Short,short |
任何兼容的数字或短整型 |
IntegerTypeHandler |
Integer,int |
任何兼容的数字和整型 |
LongTypeHandler |
Long,long |
任何兼容的数字或长整型 |
FloatTypeHandler |
Float,float |
任何兼容的数字或单精度浮点型 |
DoubleTypeHandler |
Double,double |
任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler |
BigDecimal |
任何兼容的数字或十进制小数类型 |
StringTypeHandler |
String |
CHAR和VARCHAR类型 |
ClobTypeHandler |
String |
CLOB和LONGVARCHAR类型 |
NStringTypeHandler |
String |
NVARCHAR和NCHAR类型 |
NClobTypeHandler |
String |
NCLOB类型 |
ByteArrayTypeHandler |
byte[] |
任何兼容的字节流类型 |
BlobTypeHandler |
byte[] |
BLOB和LONGVARBINARY类型 |
DateTypeHandler |
Date(java.util) |
TIMESTAMP类型 |
DateOnlyTypeHandler |
Date(java.util) |
DATE类型 |
TimeOnlyTypeHandler |
Date(java.util) |
TIME类型 |
SqlTimestampTypeHandler |
Timestamp(java.sql) |
TIMESTAMP类型 |
SqlDateTypeHandler |
Date(java.sql) |
DATE类型 |
SqlTimeTypeHandler |
Time(java.sql) |
TIME类型 |
ObjectTypeHandler |
任意 |
其他或未指定类型 |
EnumTypeHandler |
Enumeration类型 |
VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。 |
当Mybatis在构建一个结果返回的时候,都会使用ObjectFactory去构建POJO,在Mybatis中可以定制自己的对象工厂。一般来说我们使用默认的ObjectFactory既可,Myabatis中默认的ObjectFactory'是由org.apache.ibatis.reflection.factory.DefaultObjectFactory来提供服务。
6.plugins(插件)
插件比较复杂的,使用时要特别小心。
7.environment(配置环境)
配置环境可以注册多个数据源(dataSource),每个数据源分为两大部分,一个是数据源的配置,另外一个是数据库事务(transactionManager)的配置。
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
environments中的属性default,表明在缺省的情况下,我们将启用哪个数据源配置。
8.databaseIdProvider数据库厂商标识
在相同数据库厂商的环境下,数据库厂商标识没有什么意义,在实际的应用中使用得比较少,因为使用不同厂商数据库的系统还是比较少的。Mybatis可以能会运行在不同厂商的数据库中,它为此提供了一个数据标识,并提供自定义,它的作用在与指定SQL到对应的数据库厂商提供的数据库中运行。
9.mapper映射器
映射器是Mybatis最复杂、最核心的组件。
引入映射器的方法很多,一般分为以下4种:
(1)用文件路径引入映射器
<mappers>
<mapper resource="com/learn/chapter3/mapper/roleMapper.xml"/>
</mappers>
(2)用包名引入映射器
<mappers>
<package name="com.learn.chapter3.mapper"/>
</mappers>
(3)用类注册引入映射器
<mappers>
<mapper class="com.learn.chapter3.mapper.UserMapper/">
</mappers>
(4)用userMapper.xml引入映射器
<mappers>
<mapper url="file:///var/mappers/com/learn/chapter3/mapper/roleMapper.xml/>
</mappers>