1力图、mybatis中3個重要的類或者接口
1)SqlSessionFactoryBuilder類
用它來創(chuàng)建工廠對象悉罕,它重載了9次build()方法抬纸,我們常用build(inputstream)來創(chuàng)建工廠.
該類通常在項目中以單例的形式存在论笔。
API列表:
build(Reader reader)
build(InputStream inputStream)
build(InputStream inputStream, String environment)
2)SqlSessionFactory接口
用它來創(chuàng)建對指定數(shù)據(jù)庫的一個連接對象男公,即sqlsession噪伊。
它重載了8次openSession()方法猛们,這些方法都可以用來產(chǎn)生sqlsession連接對象。
該類通常在項目中以單例的形式存在棚贾。
API列表:
openSession() 默認非自動提交事務(wù)
openSession(boolean autoCommit) 指定true或者false提交事務(wù)
openSession(Connection connection); 通過一個JDBC連接對象構(gòu)建sqlsession
openSession(TransactionIsolationLevel level); 指定事務(wù)隔離級別
getConfiguration()方法 返回Configuration對象
4)SqlSession接口
用它可以執(zhí)行增刪改查的命令窖维,還可以用它獲取mapper接口,還可以管理JDBC事務(wù)(例如手動或者自動提交妙痹、回滾)铸史。
一句話,它代表了一次跟數(shù)據(jù)庫的連接會話,跟JDBC中的Connection對象相似怯伊。另外琳轿,事務(wù)就是一個不可分割的原子性的業(yè)務(wù)行為,即要么都成功,要么都失敗崭篡。
該類通常在項目中以多例的形式存在挪哄,并且要注意線程安全問題,不能聲明為實例變量琉闪,否則一個線程關(guān)閉了sqlsession會導(dǎo)致其他線程無法使用迹炼。
API列表:
insert()
delete()
update
selectXXX()系列
commit()
rollback()
close()
getMapper()
clearCache()
flushStatements()
getConnection() 返回JDBC的一個Connection對象
getConfiguration() 返回Configuration對象
2、和配置相關(guān)的類
1)Configuration類
用它封裝mybatis-config.xml和mapper.xml里面所有的信息颠毙,另外還給出了一些默認配置斯入,例如:
safeRowBoundsEnabled = false;
safeResultHandlerEnabled = true;
mapUnderscoreToCamelCase = false;
lazyLoadingEnabled = false;
aggressiveLazyLoading = true;
multipleResultSetsEnabled = true;
useGeneratedKeys = false;
useColumnLabel = true;
cacheEnabled = true;
defaultStatementTimeout
resultMaps
keyGenerators
有關(guān)事務(wù)設(shè)置的........
JDBC
MANAGED
有關(guān)連接池設(shè)置的........
JNDI
POOLED
UNPOOLED
有關(guān)緩存設(shè)置的........
PERPETUAL
FIFO
LRU
SOFT
WEAK
..........等等。
API列表:
屬性的get/set方法
addMapper(Class<T> type) 向配置對象中添加指定的mapper接口到MapperRegistry中
addMappers(String packageName) 向配置對象中添加指定包下的mapper接口到MapperRegistry中
包含的一些重要的工具類:
MapperRegistry
TypeAliasRegistry
TypeHandlerRegistry
CacheRefResolver
ResultMapResolver
JdbcTransactionFactory
ManagedTransactionFactory
JndiDataSourceFactory
PooledDataSourceFactory
UnpooledDataSourceFactory
ParameterHandler
ResultSetHandler
StatementHandler
SimpleExecutor
BatchExecutor
ReuseExecutor
CachingExecutor
InterceptorChain
Transaction
JdbcType
Environment
MappedStatement
舉例:config.getMappedStatement("selectByNameAndClass").getTimeout()獲得id為“selectByNameAndClass”對應(yīng)的SQL設(shè)置中的timeout的值蛀蜜。
可見刻两,Configuration類封裝了整個項目中所有的xml配置信息,包括mybatis-config.xml和mapper.xml滴某,這些信息都是在項目啟動的時候就讀進去的磅摹,運行時由于配置錯誤,會導(dǎo)致看似不相關(guān)的SQL執(zhí)行失敗霎奢。
映射詳情:
<parameterMap>標簽會被解析為ParameterMap對象户誓,其每個子元素會被解析為ParameterMapping對象。
<resultMap>標簽會被解析為ResultMap對象椰憋,其每個子元素會被解析為ResultMapping對象厅克。
每一個<select>赔退、<insert>橙依、<update>、<delete>標簽均會被解析為MappedStatement對象硕旗,標簽內(nèi)的sql會被解析為BoundSql對象窗骑。
2、認識mybatis-config.xml配置文件
1)<properties>標簽漆枚,讀取properties類型的配置文件
2)<typeAliases>為類指定別名创译,以便在其他地方引用,例如在mapper.xml里面引用墙基。
有兩種方式為類取別名:
第一软族,單個取:<typeAlias alias="Address" type="dashuju.mybatis.pojo.Address"/>
第二残制,批量攘⒃摇:<package name="dashuju.mybatis.pojo"/>
3)environments和environment標簽
配置程序的運行環(huán)境,例如生產(chǎn)環(huán)境初茶、測試環(huán)境等颗祝。
如何切換運行環(huán)境?更改<environments default="test">中的default值即可。
4)transactionManager標簽
指定事務(wù)的管理方式螺戳,每一種方式都有對應(yīng)的處理類搁宾,type的值有如下兩個,不分大小寫,不能寫錯否則報找不到對應(yīng)的類:
JDBC
MANAGED
5)dataSource標簽
連接池類型,type的值有如下三個倔幼,每一種方式都有對應(yīng)的處理類,不分大小寫,不能寫錯否則報找不到對應(yīng)的類:
POOLED:會從連接池取一個連接盖腿,用完后再放回連接池,見日志
UNPOOLED:會每次產(chǎn)生一個新連接损同,用完后直接關(guān)閉奸忽,見日志
JNDI:需要容器支持,配置方式跟上述兩種方式不同,見源碼JndiDataSourceFactory類揖庄,建立一個properties文件栗菜,并且包含如下鍵:
data_source=xxxxxxx
env.xxx=xxxxxxx
initial_context=xxxxxxx
6)property標簽
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
注意name的值區(qū)分大小寫并且不能改變,變量的引用是${}格式蹄梢,不是#{}
7)mappers標簽
加載映射文件疙筹,有3種方式:
第一,<mapper resource="dashuju/mybatis/mapper/StudentMapper.xml" />
第二禁炒,<mapper class="dashuju.mybatis.mapper.StudentMapper"/>
第三而咆,<package name="dashuju.mybatis.mapper"/>
第一種方式XXXmapper.xml的文件名稱可以跟mapper接口的文件名稱不一致,即只要能找到該xml就可以幕袱。
第二暴备、第三種由于掃描的是類,所以要求xml和mapper名稱要一致们豌,否則運行mapper接口方法時報找不到方法的異常涯捻。
3.xxxMapper.xml配置文件
1)namespace命名空間
namespace是用于綁定Dao接口的,即面向接口編程望迎,它的值是mapper接口的完全限定名也可以是任意取的名稱障癌。
綁定后,mapper接口中的方法就可以與xml映射文件中的SQL語句的ID一一對應(yīng)辩尊。
例如dashuju.mybatis.mapper.StudentMapper涛浙。
2)緩存移除機制eviction的值:
PERPETUAL
FIFO
LRU
SOFT
WEAK
4、mybatis中的常量摄欲,見源碼DynamicContext類轿亮、DefaultSqlSession類
_parameter
_databaseId
list
array
5、mybatis中的數(shù)據(jù)類型對照表胸墙,見源碼TypeAliasRegistry類
string—String
byte—Byte
long—Long
short—Short
int—Integer
integer—Integer
double—Double
float—Float
boolean—Boolean
byte[]—Byte[]
long[]—Long[]
short[]—Short[]
int[]—Integer[]
integer[]—Integer[]
double[]—Double[]
float[]—Float[]
boolean[]—Boolean[]
_byte—byte
_long—long
_short—short
_int—int
_integer—int
_double—double
_float—float
_boolean—boolean
_byte[]—byte[]
_long[]—long[]
_short[]—short[]
_int[]—int[]
_integer[]—int[]
_double[]—double[]
_float[]—float[]
_boolean[]—boolean[]
date—Date
decimal—BigDecimal
bigdecimal—BigDecimal
object—Object
date[]—Date[]
decimal[]—BigDecimal[]
bigdecimal[]—BigDecimal[]
object[]—Object[]
map—Map
hashmap—HashMap
list—List
arraylist—ArrayList
collection—Collection
iterator—Iterator
ResultSet—ResultSet
6我注、標簽
sql
include
foreach
where
if
一、SQL映射文件基礎(chǔ)
- resultType="Student"和resultMap="ResultMapStudent"的區(qū)別和注意事項:
1)區(qū)別劳秋,后者會走resulmap并且會執(zhí)行assiction等語句
2)resultType即使返回是list也是可以處理的
3)Student是別名
二仓手、主鍵生成
三胖齐、參數(shù)傳遞
四、高級映射
ResultMap主要解決:
1)屬性值和列名不一致
2)一對一嗽冒、一對多呀伙、多對多
通常,使用ResultType即可添坊,不要濫用ResultMap
五剿另、cache元素
六、動態(tài)SQL
七贬蛙、resultMap元素
八雨女、Collection元素
九、#和$的使用
獲取更多資源請關(guān)注微信公眾號:AKA程序王