参见:https://www.cnblogs.com/black-spike/p/7765732.html
1. 元素
是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。
例如:数据库的连接属性,就可以通过专门配置db.properties然后替换掉里面的配置信息。
编写db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://1localhost:3306;DatabaseName=mybatis
jdbc.username=root
jdbc.password=123456
配置属性
这个时候只需要在引用db.properties中的数据库相关信息就可以了
2.元素
元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。元素中常见的配置及其描述如下表所示。
设置参数
描述
有效值
默认值
cacheEnabled
该配置影响所有映射器中配置的缓存全局开关
ture|false
false
lazyLoadingEnabled
延迟加载的全局开关。开启时所有关联对象都会延迟加载。特定关联关系中可以通过设置fetchType属性来覆盖该项的开关状态
ture|false
false
agressiveLazyLoading
关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完全加载;反之,每种属性都会按需加载
ture|false
true
multipleResultSetsEnabled
是否允许单一语句返回多结果集(需要驱动兼容)
ture|false
true
useColumnLabel
使用列标签代替列名。不同的驱动在这方面有不同的表现。具体可参考驱动文档或通过测试两种模式来观察所用驱动的行为。
ture|false
true
useGeneratedKeys
允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工作。
ture|false
false
autoMappingBehavior
指定mybatis应如何自动映射列到字段或属性。NONE表示取消自动映射;PARTIAL只会自动映射没有定义嵌套结果集映射的结果集;FULL会自动映射任意复杂的结果集(无论是否嵌套)
NONE、PARTIAL、FULL
PARTIAL
defaultExecutorType
配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新。
SIMPLE、REUSE、BATCH
SIMPLE
defaultStatementTimeOut
设置超时时间。它决定驱动等待数据库响应的秒数。当没有设置的时候,它取的就是驱动默认的时间。
任何正整数
没有设置
mapUnderscoreToCamelCase
是否开启自动驼峰命名规则(camel case)映射
true|false
false
jdbcTypeForNull
当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接使用一般类型即可。如NULL、Varchar、other等。
NULL、Varchar、other
other
配置举例如下:
3.元素
元素用于为配置文件中的Java类型设置别名。别名设置好了过后可以在mapper.xml文件中直接使用别名即可。其使用的意义在于减少全限定类名的冗余。
使用元素配置别名的方法如下:
当POJO类过多时,可以通过自动扫描包的形式自定义别名,具体如下:
建议使用扫描包的形式设置别名。
注意:上面设置别名的方式只适用于没有使用注解的情况,如果在程序中使用了注解,则其别名为注解的值。例如:
@Alias(value="user")
public class User{
//属性和方法。。。。
}
除了使用元素自定义别名外,mybatis框架还默认为许多常见的java类型(如数值、字符串、日期等)提供了相应的别名,如下表所示。
别名
映射的类型
_byte
btye
_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
object
Object
map
Map
hashmap
HashMap
list
List
arraylist
ArrayList
collection
Collection
iterator
Iterator
以上表格中列举的别名可以直接在mybatis中使用,但是由于不区分大小写,在使用的时候需要注意重复定义的问题。
4.元素
mybatis在预处理语句(prepareStatement)中设置一个参数或者从结果集(ResultSet)中取出一个值时,都会用到其框架内部注册了的typehandler(类型处理器)进行相关的处理。typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。也就是将数据库类型与java类型映射关联起来。
为了方便转换,mybatis提供了默认一些默认的类型处理器,如下表所示。
类型处理器
java类型
jdbc类型
BooleanTypeHandler
java.lang.Boolean ,boolean
数据库兼容的BOOLEAN
ByteTypeHandler
java.lang.Byte ,byte
数据库兼容的numeric或byte
ShortTypeHandler
java.lang.Short ,short
数据库兼容的numeric或者short integer
IntegerTypeHandler
java.lang.Integer ,int
数据库兼容的numeric或者integer
LongTypeHandler
java.lang.Long ,long
数据库兼容的numeric或者long integer
FloatTypeHandler
java.lang.Float ,float
数据库兼容的numeric或者Float
DoubleTypeHandler
java.lang.Double ,double
数据库兼容的numeric或者double
BigDecimalTypeHandler
java.math.BigDecimal
数据库兼容的numeric或者decimal
StringTypeHandler
java.lang.String
char,varchar
ClobTypeHandler
java.lang.String
clob、longvarchar
ByteArrayTypeHandler
byte[]
数据库兼容的字节流类型
BlobTypeHandler
byte[]
blob、longvarbinary
DateTypeHandler
java.util.Date
timestamp
SqlTimestampTypeHandler
java.sql.timestamp
timestamp
SqlDateTypeHandler
java.sql.Date
date
SqlTimeTypeHandler
java.sql.time
time
如果以上类型处理器无法满足需求时可以通过自定义类型处理器。元素可以在配置文件中注册自定义的类型处理器,它的使用方式有两种。
1.注册一个类的类型处理器
2.注册一个包中所有的类型处理器
5.元素
MyBatis中默认的ObjectFactory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。通常使用默认的ObjectFactory即可。
大部分场景下都不用配置和修改默认的ObjectFactory ,如果想覆盖ObjectFactory的默认行为,可以通过自定义ObjectFactory来实现,具体如下:
1.自定义一个对象工厂
public class MyObjectFactory extends DefaultObjectFactory {
private static final long serialVersionUID = -4114845625429965832L;
public T create(Class type) {
return super.create(type);
}
public T create(Class type, List> constructorArgTypes,
List constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
public boolean isCollection(Class type) {
return Collection.class.isAssignableFrom(type);
}
}
2.在配置文件中使用元素配置自定义的ObjectFactory
在开发中这个元素没有怎么使用,一般了解就可以了,知道有这个东西就行。
6.元素
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。元素的作用就是配置用户所开发的插件。如果用户想要进行插件开发,必须要先了解其内部运行原理,因为在试图修改或重写已有方法的行为时,很可能会破坏MyBatis原有的核心模块。慎用。
7.元素
元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,我们可以通过元素配置多种数据源,即配置多种数据库。
...
元素用于配置事务管理,它的type属性用于指定事务管理的方式,即使用哪种事务管理器;元素用于配置数据源,它的type属性用于指定使用哪种数据源。
在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。关于这两个事务管理器的描述如下:
JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。
MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。
注意:如果项目中使用的是Spring+ MyBatis,则没有必要在MyBatis中配置事务管理器,因为实际开发中,会使用Spring自带的管理器来实现事务管理。
对于数据源的配置,MyBatis提供了UNPOOLED、POOLED、JNDI三种数据源类型。
UNPOOLED配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。在使用时,需要配置5种属性。
Pooled
此数据源利用“池”的概念将JDBC连接对象组织起来,避免了在创建新的连接实例时所需要初始化和认证的时间。这种方式使得并发Web应用可以快速的响应请求,是当前流行的处理方式。在使用时,可以配置更多的属性。
JNDI
可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。在使用时,需要配置2个属性。
9.元素
元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件
1.使用类路径引入(常用)
2.使用本地文件路径引入
3.使用接口类引入
4.使用包名引入(常用)