框架:初识Mybatis
1.mybatis是什么?
mybatis是一個持久層的框架,是apache下的頂級項目。
mybatis托管到goolecode下,再后來托管到github下(https://github.com/mybatis/mybatis-3/releases)。
mybatis讓程序將主要精力放在sql上,通過mybatis提供的映射方式,自由靈活生成(半自動化,大部分需要程序員編寫sql)滿足需要sql語句。
MyBatis是一個實現了JPA規范的用來連接數據庫并對其進行CRUD操作的開源框架
mybatis可以將向 preparedStatement中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象。(輸出映射)
1.1??MyBatis的優點
·????????簡單易學,容易上手(相比于Hibernate) —- 基于SQL編程
·????????消除了JDBC大量冗余的代碼,不需要手動開關連接
·????????很好的與各種數據庫兼容(因為MyBatis使用JDBC來連接數據庫,所以只要JDBC支持的數據庫MyBatis都支持,而JDBC提供了可擴展性,所以只要這個數據庫有針對Java的jar包就可以就可以與MyBatis兼容),開發人員不需要考慮數據庫的差異性。
·????????提供了很多第三方插件(分頁插件 / 逆向工程)
·????????能夠與Spring很好的集成
?
2.mybatis框架
?
?
下面作簡要概述:
1.??? SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句,此文件需要在SqlMapConfig.xml中加載。
2.???通過mybatis環境等配置信息構造SqlSessionFactory(即會話工廠)。
3.??? 由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession進行。
4.??? mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。
5.??? MappedStatement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個MappedStatement對象,sql的id即是MappedStatement的id。
6.MappedStatement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過MappedStatement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是JDBC編程中對preparedStatement設置參數。
7.MappedStatement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過MappedStatement在執行sql后將輸出結果映射至java對象中,輸出結果映射過程相當于JDBC編程中對結果的解析處理過程。
?
3.舉個小例子:
1)???????映射文件命名:
User.xml(原始ibatis命名),mapper代理開發映射文件名稱叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml
在映射文件中配置sql語句。
2)???? 在SqlMapConfig.xml加載映射文件
在sqlMapConfig.xml中加載User.xml:
使用User.xml,添加根據用戶名稱模糊查詢用戶信息的sql語句。
?
4:小結
parameterType
在映射文件中通過parameterType指定輸入參數的類型。
resultType
在映射文件中通過resultType指定輸出結果的類型。
?
#{}和${}
?
#{}表示一個占位符號,#{}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,#{}中可以寫成value或其它名稱。
#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
?
${}表示一個拼接符號,會引用sql注入,所以不建議使用${}。
${}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,${}中只能寫成value。
${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
selectOne和selectList
selectOne表示查詢出一條記錄進行映射。如果使用selectOne可以實現,使用selectList也可以實現(list中只有一個對象)。
selectList表示查詢出一個列表(多條記錄)進行映射。如果使用selectList查詢多條記錄,不能使用selectOne。
如果使用selectOne報錯:
org.apache.ibatis.exceptions.TooManyResultsException:Expected one result (or null) to be returned by selectOne(), but found: 4
?Mybatis是什么?
mybatis是一個持久層框架,mybatis是一個不完全的ORM框架。sql語句需要程序員自己去編寫,但是mybatis也有映射(輸入參數映射、輸出結果映射)。
mybatis入門門檻不高,學習成本低,讓程序員把精力放在sql語句上,對sql語句優化非常方便,適用與需求變化較多項目,比如互聯網項目。
mybatis框架執行過程:
1、配置mybatis的配置文件,SqlMapConfig.xml(名稱不固定)
2、通過配置文件,加載mybatis運行環境,創建SqlSessionFactory會話工廠
???????SqlSessionFactory在實際使用時按單例方式。
3、通過SqlSessionFactory創建SqlSession
???????SqlSession是一個面向用戶接口(提供操作數據庫方法),實現對象是線程不安全的,建議sqlSession應用場合在方法體內。
4、調用sqlSession的方法去操作數據。
???????如果需要提交事務,需要執行SqlSession的commit()方法。
5、釋放資源,關閉SqlSession
mybatis開發dao的方法:
1、原始dao 的方法
???????需要程序員編寫dao接口和實現類
???????需要在dao實現類中注入一個SqlSessionFactory工廠。
?
2、mapper代理開發方法(建議使用)
???????只需要程序員編寫mapper接口(就是dao接口)
???????程序員在編寫mapper.xml(映射文件)和mapper.java需要遵循一個開發規范:
???????1、mapper.xml中namespace就是mapper.java的類全路徑。
???????2、mapper.xml中statement的id和mapper.java中方法名一致。
???????3、mapper.xml中statement的parameterType指定輸入參數的類型和mapper.java的方法輸入參數類型一致。
???????4、mapper.xml中statement的resultType指定輸出結果的類型和mapper.java的方法返回值類型一致。
?
SqlMapConfig.xml配置文件:可以配置properties屬性、別名、mapper加載。。。
輸入映射:
???????parameterType:指定輸入參數類型可以簡單類型、pojo、hashmap。。
???????對于綜合查詢,建議parameterType使用包裝的pojo,有利于系統 擴展。
?
輸出映射:
???????resultType:
??????????????查詢到的列名和resultType指定的pojo的屬性名一致,才能映射成功。
???????reusltMap:
??????????????可以通過resultMap 完成一些高級映射。
??????????????如果查詢到的列名和映射的pojo的屬性名不一致時,通過resultMap設置列名和屬性名之間的對應關系(映射關系)。可以完成映射。
??????????????高級映射:
?????????????????????將關聯查詢的列映射到一個pojo屬性中。(一對一)
?????????????????????將關聯查詢的列映射到一個List<pojo>中。(一對多)
?
動態sql:(重點)
???????if判斷(掌握)
???????where
???????foreach
???????sql片段(掌握)
?
總結
以上是生活随笔為你收集整理的框架:初识Mybatis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 框架:SpringBoot构建Restf
- 下一篇: 行为型模式:策略模式