JDBC、JdbcTemplate、Mybatis、JPA、SpringDataJPA 、Hibernate
MyBatis、JDBC、Hibernate區別是什麼?
JDBC -> java data base connection,只是提供介面,由資料庫廠商實現。 JDBCTemplate -> 內嵌於Spring框架,對JDBC的封裝,缺點:沒有快取 Mybatis -> 註解+xml+Java放射技術 Hibernate -> 不用編寫sql+分散式事務
一、JDBC
介紹
- JDBC(Java DataBase Connectivity ,java資料庫連線技術) 用來訪問各種資料庫 。JDBC 規範定義介面 , 具體的實現由各大資料庫廠商來實現。每個資料庫廠商根據自家資料庫的通訊格式編寫好自己資料庫的驅動,資料庫驅動由資料庫廠商提供。
開發步驟
- 開發步驟: 我們平時使用jdbc進行程式設計,大致需要下面幾個步驟: 1,使用jdbc程式設計需要連線資料庫,註冊驅動和資料庫資訊 2,操作Connection,開啟Statement物件 3,通過Statement物件執行SQL,返回結果到ResultSet物件 4,使用ResultSet讀取資料,然後通過程式碼轉化為具體的POJO物件 5,關閉資料庫相關的資源
優缺點
使用 JDBC 的好處:
- 我們只需要會呼叫 JDBC 介面中的方法即可,使用簡單
- 使用同一套 Java 程式碼,進行少量的修改就可以訪問其他 JDBC 支援的資料庫
jdbc的缺點: 一:工作量比較大,程式設計複雜;需要連線,然後處理jdbc底層事務,處理資料型別,還需要操作Connection,Statement物件和ResultSet物件去拿資料並關閉他們。
二、JDBCTemplate
JDBC已經能夠滿足大部分使用者最基本的需求, 但是在使用JDBC時,必須自己來管理資料庫資源如:獲取 PreparedStatement,設定SQL語句引數,關閉連線等步驟。 JDBCTemplate就是Spring對JDBC的封裝,目的是使JDBC更加易於使用。 JDBCTemplate是Spring的一部分。 JDBCTemplate處理了資源的建立和釋放。 他幫助我們避免一些常見的錯誤,比如忘了總要關閉連線。 他執行核心的JDBC工作流,如Statement的建立和執行,而我們只需要提供SQL語句和提取結果。 使用JdbcTemplate程式設計我們只需要做以下步驟: 1)提供SQL語句和佔位符的值 2)得到封裝好的查詢結果集
使用步驟
使用步驟
1) 匯入依賴的jar包(c3p0連線池、mysql驅動、spring相關)
2) 準備連線池
3) 建立 JdbcTemplate 物件,傳入連線池物件
4) 編寫SQL語句
5) 呼叫 execute()執行 DDL、update()執行 DML、queryXxx()執行 DQL 等方法
jdbcTemplate.queryForObject("select * from user where name=? and password=?",
new BeanPropertyRowMapper<>(User.class), name, password);
三、Hibernate
ORM模型
ORM取代了JDBC,所有的ORM模型都是基於JDBC進行封裝的,不同ORM模型對JDBC封裝的強度是不一樣的
ORM
- 物件關係對映(Object Relational Mapping),簡單的說ORM框架就是資料庫的表和簡單Java物件的對映關係模型,我們通過這層對映關係就可以簡單迅速地把資料庫表的資料轉化為POJO
如圖
Hibernate
Hibername一問世就成為了Java世界首選的ORM框架,它是建立在POJO和資料庫表模型的直接對映關係上的
執行過程
1、讀取配置檔案完成ORM的對映關係
2、獲取session進行增刪改查的操作
hibernate工作原理:
1、通過Configuration().configure();讀取並解析hibernate.cfg.xml配置檔案。
2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>讀取解析對映資訊。
3、通過config.buildSessionFactory();//得到sessionFactory。
4、sessionFactory.openSession();//得到session。
5、session.beginTransaction();//開啟事務。
6、persistent operate;
7、session.getTransaction().commit();//提交事務
8、關閉session;
9、關閉sessionFactory;
Hibernate優勢
- 消除了程式碼的對映規則,它全部被分離到了XML或者註解裡面去配置
- 無需再管理資料庫連線,它也可以配置在XML裡面
- 一個會話中,不要操作多個物件,只要操作Session物件即可
- 關閉資源只需要關閉一個Session便可
這就是Hibernate的優勢,在配置了對映檔案和資料庫連線檔案後,Hibernate就可以通過Session操作,非常容易,消除了jdbc帶來的大量程式碼,大大提高了程式設計的簡易性和可讀性。Hibernate還提供了級聯,快取,對映,一對多等功能。Hibernate是全表對映,通過HQL去操作pojo進而操作資料庫的資料。
Hibernate缺陷
- 全表對映帶來了不便,比如更新時需要傳送所有的欄位
- 無法根據不同的條件組裝不同的SQL
- 對多表關聯和複雜SQL查詢支援較差,需要自己寫SQL,返回後,需要自己將資料組裝為POJO
- 不能有效支援儲存過程
- 雖然有HQL,但是效能較差, 大型網際網路系統往往需要優化SQL,而hibernate做不到
四、Mybatis
為了解決Hibernate的不足,一個半自動對映的框架MyBatis應運而生
mybatis是一個java持久層框架,它封裝少、高效能·可優化、維護簡單等優點成為了目前java移動網際網路網站服務的首選持久層框架,它特別適合分散式和大資料網路資料庫程式設計
之所以稱它為半自動,是因為它需要手工匹配提供POJO、SQL和對映關係,而全表對映的Hibernate只需要提供POJO和對映關係便可
歷史
Mybaits的前身是Apache的一個開源專案iBatis,2010年這個專案由apache software foundation 遷移到了 google code 並且改名為Mybatis,2013年11月遷移到Github,目前mybaits是由Github維護的
名稱
iBatis一詞來源於“internet”和“abatis”的組合
mybaits所需要提供的對映檔案包含以下三個部分
- SQL
- 對映規則
- POJO
Mybatis優點
- 半自動的執行方式,除sql外操作由框架完成,方便快捷
- 手工定製sql,實現sql與java程式碼分離,靈活性高,方便維護
- 只需要sql進行操作,不需要學習額外的內容
- 輕量級的框架,執行速度快
什麼時候用mybaits
- hibernate只適用於場景不太複雜,要求效能不太苛刻的時候
- mybatis擁有動態列,動態表名,儲存過程支援,同時提供了簡易的快取、日誌、級聯,但是它的缺陷是需要你提供對映規則和sql,所以它的開發工作量比Hibernate略大一些
Hibernate 與 mybaits 的對比
jdbc,mybatis,hibernate的區別
1)從層次上看,
- JDBC是較底層的持久層操作方式,
- 而Hibernate和MyBatis都是在JDBC的基礎上進行了封裝使其更加方便程式設計師對持久層的操作。
2)從功能上看,
- JDBC就是簡單的建立資料庫連線,然後建立statement,將sql語句傳給statement去執行,如果是有返回結果的查詢語句,會將查詢結果放到ResultSet物件中,通過對ResultSet物件的遍歷操作來獲取資料;
- Hibernate是將資料庫中的資料表對映為持久層的Java物件,對sql語句進行修改和優化比較困難;
- MyBatis是將sql語句中的輸入引數和輸出引數對映為java物件,sql修改和優化比較方便.
3)從使用上看,
- 如果進行底層程式設計,而且對效能要求極高的話,應該採用JDBC的方式;
- 如果要對資料庫進行完整性控制的話建議使用Hibernate;
- 如果要靈活使用sql語句的話建議採用MyBatis框架。