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