MyBatis相關總結

Mybatis中的#和$有何區別。

#相當於對數據加了雙引號,$相當於直接顯示數據。
1、#將傳入的數據都當做一個字符串,會對自動傳入的數據加雙引號。如:order by #id#。如果傳入的id值爲11,則解析sql爲order by “11”。如果傳入的值是id,則解析爲order by “id”

2、$將傳入的數據直接顯示生成在sql中,如:order by #id#。如果傳入的值id爲11,則解析爲order by 11。如果傳入值爲id,則解析爲order by id。
3、#方式能很大程度防止sql注入
$無法防止sql注入。
4、 $一般用於傳入數據庫對象,例如傳入表名。
5、一般能用#的就不用 $。

Mybatis的編程步驟

  1. 創建SqlSessionFactory
  2. 通過SqlSessionFactory創建SqlSession
  3. 通過SqlSession執行數據庫操作
  4. 通過SqlSession.commit()。提交事務
  5. 調用SqlSession.close()。關閉會話。

JDBC編程有哪些不足之處,MyBatis是如何解決的

  • 數據庫連接創建、釋放頻繁,造成系統資源浪費從而影響系統性能。如果使用數據庫連接池可以解決此問題。
    解決:在SqlMapConfig.xml中配置數據庫連接池,使用連接池管理數據庫連接。
  • Sql語句寫在代碼中不易維護,實際應用sql變化可能較大,sql變動時需要改寫代碼。
    解決:將sql語句配置在***mapper.xml文件中,與Java代碼剝離。
  • 向sql語句傳參麻煩,因爲sql語句where條件不一定,可能多也可能少,佔位符需要和參數一一對應。
    解決:Mybatis自動將Java對象映射到sql語句中,並可以通過< if >標籤來決定是否使用某些條件等。
  • 對結果集解析麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果將查詢結果封裝爲pojo對象則解析比較方便,
    解決:MyBatis將sql查詢結果自動映射至Java對象。

使用 MyBatis 的 mapper 接口調用時有哪些要求?

  1. Mapper 接口方法名和 mapper.xml 中定義的每個 sql 的 id 相同
  2. Mapper 接口方法的輸入參數類型和 mapper.xml 中定義的每個 sql 的 parameterType 的類型相同
  3. Mapper 接口方法的輸出參數類型和 mapper.xml 中定義的每個 sql 的 resultType 的類型相同
  4. Mapper.xml 文件中的 namespace 即是 mapper 接口的類路徑。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章