MyBatis #{}和${}

1.#{}和${}

{}表示一個(gè)占位符號,#{}接收輸入?yún)?shù),類型可以是簡單類型,pojo、hashmap。

如果接收簡單類型,#{}中可以寫成value或其它名稱。

{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。

${}表示一個(gè)拼接符號,會引用sql注入,所以不建議使用${}。

${}接收輸入?yún)?shù),類型可以是簡單類型,pojo、hashmap。

如果接收簡單類型,${}中只能寫成value。

${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。

2.SqlSession使用范圍

SqlSessionFactoryBuilder
通過SqlSessionFactoryBuilder創(chuàng)建會話工廠SqlSessionFactory將SqlSessionFactoryBuilder當(dāng)成一個(gè)工具類使用即可,不需要使用單例管理SqlSessionFactoryBuilder。在需要創(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è)對象)、selectList(返回單個(gè)或多個(gè)對象)。

原始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),定義成局部變量使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容