MyBatis3框架详解(二)

一、MyBatis全局配置文件

MyBatis的全局配置文件包含设置(settings)和属性(properties)信息,文档结构如下:

MyBatis3框架详解(二)_第1张图片

 

二、全局配置文件中,引入dtd约束

目的:为了在全局配置文件(mybatis-config.xml)中有代码提示,需要引入dtd约束(dtd文件是用来规定xml中的标签语法规则的)

方式一:联网状态下直接下载

步骤1:打开mybatis的全局配置文件(mybatis-config.xml),ctrl+鼠标移动到配置文件中的dtd网址,即可在线下载dtd文件

MyBatis3框架详解(二)_第2张图片

步骤2:下载完成后,点击eclipse中Window--->Preference--->XML--->XML Catalog。然后点击Add添加,Key中填写dtd文件网址,Key type选择URI,Location中选择要引入的dtd文件,最后点击ok即可

MyBatis3框架详解(二)_第3张图片

方式二:未联网状态下解压mybatis的jar包导入

步骤1:找到mybatis-3.4.1.jar包,使用解压缩软件打开,按照mybatis-3.4.1.jar\org\apache\ibatis\builder\xml这个路径,即可找到两个dtd文件,将这两个文件复制出来即可。

MyBatis3框架详解(二)_第4张图片

步骤2:点击eclipse中Window--->Preference--->XML--->XML Catalog。然后点击Add添加,Key中填写dtd文件网址,Key type选择URI,Location中选择要引入的dtd文件,最后点击ok即可

MyBatis3框架详解(二)_第5张图片

 

三、properties标签(属性)

properties标签可以引入外部properties配置文件的内容

properties标签有两个参数:

  • 第一个参数(resource):引入类路径下的资源
  • 第二个参数(url):引入网络路径或磁盘路径下的资源

示例:通过properties标签,引入properties文件中的数据源信息

步骤1:创建properties文件(此处在全局配置文件的文件夹下创建)

MyBatis3框架详解(二)_第6张图片

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

步骤2:修改全局配置文件,通过properties标签引入properties文件,并读取数据源信息

MyBatis3框架详解(二)_第7张图片




	


	
		
			
			
				
				
				
				 
			
		
	

	
	
		
	

注意:与Spring框架整合时,数据源的配置和管理交由Spring来完成,即:properties标签不常使用!

 

四、settings标签(设置)

mybatis中settings是最复杂的配置,它能深刻影响mybatis底层的运行,但是在大部分情况下使用默认值便可以运行,所以在大部分情况下不需要大量配置它,只需要修改一些常用的规则即可,比如自动映射,驼峰命名映射,级联规则,是否启动缓存,执行器类型等。

settings标签的配置项说明如下:

配置项 作用 配置选项 默认值
cacheEnabled 该配置影响所有映射器中配置缓存的全局开关 true|false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态  true|false false
aggressiveLazyLoading 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载 true|false 版本3.4.1 (不包含)  之前 true,之后 false
multipleResultSetsEnabled

是否允许单一语句返回多结果集(需要兼容驱动)

true|false true
useColumnLabel 使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果 true|false true
useGeneratedKeys 允许JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby) true|false false
autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属性。
NONE 表示取消自动映射。
PARTIAL 表示只会自动映射,没有定义嵌套结果集和映射结果集。
FULL 会自动映射任意复杂的结果集(无论是否嵌套)
NONE、PARTIAL、FULL PARTIAL
autoMappingUnknownColumnBehavior 指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException 异常 NONE、WARNING、FAILING NONE
defaultExecutorType 配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新  SIMPLE、REUSE、BATCH SIMPLE
defaultStatementTimeout 设置超时时间,它决定驱动等待数据库响应的秒数 任何正整数 Not Set (null)
defaultFetchSize 设置数据库驱动程序默认返回的条数限制,此参数可以重新设置 任何正整数   Not Set (null)
safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds)。如果允许,设置 false true|false false
safeResultHandlerEnabled 允许在嵌套语句中使用分页(ResultHandler)。如果允许,设置false true|false true
mapUnderscoreToCamelCase 是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射 true|false false
localCacheScope MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。
默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据  
SESSION|STATEMENT SESSION
jdbcTypeForNull 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER NULL、VARCHAR、OTHER  OTHER
lazyLoadTriggerMethods 指定哪个对象的方法触发一次延迟加载 equals、clone、hashCode、toString
defaultScriptingLanguage 指定动态 SQL 生成的默认语言 org.apache.ibatis
.script.ing.xmltags
.XMLDynamicLanguageDriver
callSettersOnNulls 指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null true|false false
logPrefix 指定 MyBatis 增加到日志名称的前缀  任何字符串 Not set
loglmpl 指定 MyBatis 所用日志的具体实现,未指定时将自动査找 SLF4J|LOG4J|LOG4J2|JDK_LOGGING
|COMMONS_LOGGING
|ST DOUT_LOGGING|NO_LOGGING
Not set
proxyFactory 指定 MyBatis 创建具有延迟加栽能力的对象所用到的代理工具 CGLIB|JAVASSIST JAVASSIST (MyBatis 版本为 3.3 及以上的)
vfsImpl 指定 VFS 的实现类   提供 VFS 类的全限定名,如果存在多个,可以使用逗号分隔  Not set
useActualParamName 允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用) true|false true

示例:mapUnderscoreToCamelCase(是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射

数据库表设计:

MyBatis3框架详解(二)_第8张图片

数据库表对应的JavaBean:

MyBatis3框架详解(二)_第9张图片

settings标签中的mapUnderscoreToCamelCase属性,默认是false,即未开启自动驼峰命名规则映射,此时通过mybatis获取数据表中的信息,由于数据库表中last_name和JavaBean中lastName命名不同,不能直接映射,所以查询的字段为null

MyBatis3框架详解(二)_第10张图片

MyBatis3框架详解(二)_第11张图片

解决方案:

(1)为数据表中的列定义别名,别名对应JavaBean中的字段名

MyBatis3框架详解(二)_第12张图片

(2)将settings标签中的mapUnderscoreToCamelCase属性设置为true,即开启自动驼峰命名规则映射

MyBatis3框架详解(二)_第13张图片

MyBatis3框架详解(二)_第14张图片

MyBatis3框架详解(二)_第15张图片

 

五、typeAliases标签(类型别名)

typeAliases标签为某个Java类型起别名

(1)typeAliases标签下的typeAlias标签有两个参数:

  • 第一个参数(type):指定要起别名的类型全类名,默认别名就是类名的小写
  • 第二个参数(alias):指定新的别名

(2)typeAliases标签下的package标签,可以为某个包下的所有类批量起别名

  • 第一个参数(name):指定包名(为当前包以及下面所有的后代包的每一个类起一个默认别名,即类名小写)

(3)批量起别名时,如果有类名冲突,可以使用@Alias注解为某个类指定新的类名

示例1:使用typeAlias标签为某个类起别名

步骤1:在全局配置文件mybatis-config.xml中,为Employee类起别名

MyBatis3框架详解(二)_第16张图片




	
	
		
	
	
	
		
	

	
		
			
			
				
				
				
				 
			
		
	

	
	
		
	

步骤2:在sql映射文件中,直接使用上述别名即可

MyBatis3框架详解(二)_第17张图片





 
 
 
 
  
  
  
	

示例2:使用package标签为包下的所有类起别名

步骤1:在全局配置文件mybatis-config.xml中,为com.csu.marden包下的所有类起别名,默认为类名小写

MyBatis3框架详解(二)_第18张图片




	
	
		
	
	
	
		
	

	
		
			
			
				
				
				
				 
			
		
	

	
	
		
	

步骤2:在sql映射文件中,直接使用上述别名即可

MyBatis3框架详解(二)_第19张图片





 
 
 
 
  
  
  
	

 

六、typeHandlers标签(类型处理器)

mybatis中通过typeHandlers标签完成JDBC类型与Java类型的转换。即mybatis在设置预处理语句中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成Java类型。

类型处理器 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

 

七、plugins标签(插件)

插件是mybatis提供的一个非常强大的机制,我们可以通过插件来修改mybatis的一些核心行为。

插件通过动态代理机制,可以介入下面四大对象的任何一个方法的执行。

mybatis允许在sql映射语句执行过程中的某一点进行拦截调用。默认情况下,mybatis允许使用插件来拦截的方法调用如下:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

 

八、environments标签(环境)

environments标签

  • mybatis可以通过environments标签配置多种环境,比如开发,测试和生产环境需要不同的配置
  • 每种环境使用一个environment标签进行配置并指定唯一标识符
  • 可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境(default属性对应environment标签的id属性)

environment标签

  • environment标签用来配置一个具体的环境信息,包括id属性和两个标签
  • id属性:指定当前环境的唯一标识
  • 两个标签:transactionManager标签和dataSource标签

transactionManager标签

  • transactionManager标签用来配置事务管理器,其中type属性用来配置事务管理器的类型
  • type属性:JDBC | MANAGED | 自定义
  • JDBC(JdbcTransactionFactory):使用了JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理实务范围
  • MANAGED(ManagedTransactionFactory):不提交或回滚一个连接,让容器来管理实务的整个生命周期(比如JEE应用服务器的上下文)
  • 自定义:实现TransactionFactory接口,type==全类名/别名

dataSource标签

  • dataSource标签用来配置数据源,其中type属性用来配置数据源类型
  • type属性:UNPOOLED | POOLED | JNDI | 自定义
  • UNPOOLED(UnpooledDataSourceFactory):不适用连接池
  • POOLED(PooledDataSourceFactory):使用连接池
  • JNDI(JndiDataSourceFactory):在EJB或应用服务器这类容器汇总查找指定的数据源
  • 自定义:实现DataSourceFactory接口,定义数据源的获取方式,type==全类名/别名

注意:在environments标签下,尽管可以配置多个环境,但是default只能选择运用某一个环境(开发环境,测试环境,生产环境等)

MyBatis3框架详解(二)_第20张图片



 

	
	
				 
			            
			            
			                
			                
			                
			                
			            
			        

		        
		            
		            
		                
		                
		                
		                
		            
		        
	

	
	
	
	
		
	

注意:数据源的配置与事务管理器的配置都会由整合后的Spring来负责,此处做了解即可。

 

九、databaseIdProvider标签(数据库厂商标识)

mybatis通过databaseIdProvider标签支持多数据厂商,即根据不同的数据库厂商执行不同的语句

type属性是必须的,不配置时会报错,该属性值使用的是DB_VENDOR(VendorDatabaseIdProvider类的别名)。其作用就是得到数据库厂商的标识(数据库驱动自带),mybatis就能根据数据库厂商标识来执行不同的sql语句

property子标签的作用是配置一个数据库,其中name属性就是数据库名称,value属性就是我们自定义的别名,通过别名我们可以在sql语句中表示适用于哪种数据库运行

databaseIdProvider标签的配置: 

 
2     
3         
4         
5         
6     

sql映射文件中使用databaseId属性来标识数据库类型:

MyBatis3框架详解(二)_第21张图片





	
	

 

十、mappers标签(映射器)

mappers标签的作用是将sql映射文件注册到全局配置文件中

  • resource属性:引用类路径下的sql映射文件
  • url属性:引用网络路径或磁盘路径下的sql映射文件
  • class属性:直接引用接口(注册接口)。若有sql映射文件,则映射文件名必须和接口同名,并且放在与接口同一目录下。若没有sql映射文件(所有的sql都是利用注解写在接口上)。
  • package子标签:批量注册,引入包下所有的映射接口。映射文件名必须与接口同名,并且映射文件与接口必须放在同一个目录下,name属性写包名。

使用resource属性(使用相对于类路径下的资源):


  
  
  

使用url属性(使用网络路径或者磁盘路径下的资源---全限定路径):


  
  
  

使用class属性(直接引用接口):


  
  
  

使用package子标签(引入包下所有的映射接口)


  

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(web框架,mybatis)