這篇文章主要介紹“MyBatis是怎么來的”,在日常操作中,相信很多人在MyBatis是怎么來的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MyBatis是怎么來的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
站在用戶的角度思考問題,與客戶深入溝通,找到于洪網(wǎng)站設(shè)計與于洪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋于洪地區(qū)。
在早期開發(fā)還沒有ORM框架時我們要操作數(shù)據(jù)庫都是通過JDBC來操作。
JDBC測試代碼:
/** * 原生操作JDBC方式 * @Author: maomao * @Date: 2021-04-07 10:59 */ public class JdbcTest { public static final String URL = "jdbc:MySQL://127.0.0.1:3306/data_test?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true"; public static final String USER_NAME = "root"; public static final String PASSWORD = "123456"; @Test public void testJdbc(){ Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { //打開連接 connection = DriverManager.getConnection(URL,USER_NAME,PASSWORD); //執(zhí)行SQL statement = connection.createStatement(); String sql = "select * from user_department where id = 1"; resultSet = statement.executeQuery(sql); //獲取結(jié)果集,并封裝到j(luò)ava對象中 while (resultSet.next()){ User user = new User(); user.setId(resultSet.getLong("id")); user.setName(resultSet.getString("name")); user.setAge(resultSet.getInt("age")); System.out.println(user); } //后續(xù)使用邏輯。。。。 }catch (SQLException e){ e.printStackTrace(); }finally { //關(guān)閉資源 try { if (resultSet != null) resultSet.close(); } catch (SQLException se2) { } try { if (statement != null) statement.close(); } catch (SQLException se2) { } try { if (connection != null) connection.close(); } catch (SQLException se) { se.printStackTrace(); } } } }
主要分為以下幾步:
注冊數(shù)據(jù)庫驅(qū)動
獲取一個Connection連接
創(chuàng)建一個Statement對象
執(zhí)行execute()方法執(zhí)行sql,獲得ResultSet結(jié)果集
通過ResultSet獲取數(shù)據(jù),給POJO賦值,轉(zhuǎn)為java對象
最后關(guān)閉數(shù)據(jù)庫相關(guān)資源,包括ResultSet、Statement、Connection
如果你 有幸接觸過一些早期的老項目,可能會在項目Dao層看到很多這樣的操作。
好一點的會將數(shù)據(jù)庫這些操作做一個工具封裝,不好的你會看到每個查詢方法中就會有類似以上測試代碼一樣的內(nèi)容。
你可以想象一下現(xiàn)在每個常規(guī)的數(shù)據(jù)庫操作,比如byId()、save()、update()等等這些方法在以前都包裝在類似上邊測試代碼中的樣子(瑟瑟發(fā)抖)。
ORM(Object Relational Mapping)也就是對象與關(guān)系映射
在早期誕生的比較主流的一個ORM框架是Hibernate,在2001年時誕生了第一個版本。
它幫我們解決了JDBC時期復(fù)雜的對象關(guān)系映射問題,簡化了數(shù)據(jù)庫開發(fā)操作。讓開發(fā)人員無需再關(guān)注數(shù)據(jù)庫連接、對象與數(shù)據(jù)庫表的映射關(guān)系轉(zhuǎn)換問題。所以早期主流開發(fā)J2EE是從SSH(struts + spring + hibernate)開始的。
hibernate本身功能非常強大,有自己的查詢語法HQL可以通過操作對象關(guān)系來生成對應(yīng)的SQL語句,也可以根據(jù)數(shù)據(jù)庫方言生成兼容各數(shù)據(jù)庫場景的SQL,所以移植性好。自動管理連接資源,還提供了緩存機制。
所以hibernate毫無疑問成為了當(dāng)時J2EE開發(fā)時的主流ORM框架。
但Hibernate在業(yè)務(wù)復(fù)雜的項目中也存在一些問題:
需要學(xué)習(xí)新的HQL語法
自動生成SQL的方式,如果需要基于SQL去做一些優(yōu)化的話,非常困難,導(dǎo)致性能優(yōu)化是一個問題。
不支持動態(tài)SQL,無法根據(jù)條件自動生成SQL
基于以上問題,我們需要一個更加靈活的框架。此時就誕生了MyBatis(早期叫iBatis)。
MyBatis官網(wǎng)地址
”半自動化“的ORM框架MyBatis就解決了上邊幾個問題。”半自動化“是相當(dāng)于Hibernate全自動化來說的。它的封裝程度沒有Hibernate那么高,不會自動生成全部的SQL語句,主要解決的是SQL和對象的映射問題。
在MyBatis里,sql和代碼是分離的,所以會寫SQL基本上就會用MyBatis,沒有額外的學(xué)習(xí)成本。
所以J2EE又迎來了幾次架構(gòu)變更
SSI (Struts2 + Spring + iBatis)
SSM(Spring MVC + Spring + MyBatis)
MyBatis憑借小巧、簡單易學(xué)、靈活、sql與代碼解耦等特點慢慢取代了Hibernate成為主流ORM框架直到現(xiàn)在。
到此,關(guān)于“MyBatis是怎么來的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
標(biāo)題名稱:MyBatis是怎么來的
網(wǎng)站鏈接:http://weahome.cn/article/jgsdoi.html