1.#{}和${}
{}表示一個(gè)占位符號(hào)诀诊,#{}接收輸入?yún)?shù)讹弯,類型可以是簡單類型况既,pojo、hashmap组民。
如果接收簡單類型棒仍,#{}中可以寫成value或其它名稱。
{}接收pojo對(duì)象值邪乍,通過OGNL讀取對(duì)象中的屬性值降狠,通過屬性.屬性.屬性...的方式獲取對(duì)象屬性值对竣。
${}表示一個(gè)拼接符號(hào),會(huì)引用sql注入榜配,所以不建議使用${}否纬。
${}接收輸入?yún)?shù),類型可以是簡單類型蛋褥,pojo临燃、hashmap。
如果接收簡單類型烙心,${}中只能寫成value膜廊。
${}接收pojo對(duì)象值,通過OGNL讀取對(duì)象中的屬性值淫茵,通過屬性.屬性.屬性...的方式獲取對(duì)象屬性值爪瓜。
2.SqlSession使用范圍
SqlSessionFactoryBuilder
通過SqlSessionFactoryBuilder創(chuàng)建會(huì)話工廠SqlSessionFactory將SqlSessionFactoryBuilder當(dāng)成一個(gè)工具類使用即可,不需要使用單例管理SqlSessionFactoryBuilder匙瘪。在需要?jiǎng)?chuàng)建SqlSessionFactory時(shí)候铆铆,只需要new一次SqlSessionFactoryBuilder即可。
SqlSessionFactory
通過SqlSessionFactory創(chuàng)建SqlSession丹喻,使用單例模式管理sqlSessionFactory(工廠一旦創(chuàng)建薄货,使用一個(gè)實(shí)例)。將來mybatis和spring整合后碍论,使用單例模式管理sqlSessionFactory谅猾。
SqlSession
SqlSession是一個(gè)面向用戶(程序員)的接口。SqlSession中提供了很多操作數(shù)據(jù)庫的方法:如:selectOne(返回單個(gè)對(duì)象)鳍悠、selectList(返回單個(gè)或多個(gè)對(duì)象)税娜。
原始dao開發(fā)問題
1.dao接口實(shí)現(xiàn)類方法中存在大量模板方法贼涩,設(shè)想能否將這些代碼提取出來,大大減輕程序員的工作量遥倦。
2.調(diào)用sqlsession方法時(shí)將statement的id硬編碼了
3.調(diào)用sqlsession方法時(shí)傳入的變量,由于sqlsession方法使用泛型袒哥,即使變量類型傳入錯(cuò)誤,在編譯階段也不報(bào)錯(cuò)消略,不利于程序員開發(fā)。
開發(fā)規(guī)范
在mapper.xml中namespace等于mapper接口地址
mapper.java接口中的方法名和mapper.xml中statement的id一致
mapper.java接口中的方法輸入?yún)?shù)類型和mapper.xml中statement的parameterType指定的類型一致艺演。
mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致桐臊。
SqlSession是線程不安全的,在SqlSesion實(shí)現(xiàn)類中除了有接口中的方法(操作數(shù)據(jù)庫的方法)還有數(shù)據(jù)域?qū)傩浴?/p>
SqlSession最佳應(yīng)用場合在方法體內(nèi)晓殊,定義成局部變量使用。