是如今不少公司都選擇使用的一個ORM(Object Relational Mapping)框架,因此是值得了解和學習一番的。程序員
MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 能夠對配置和原生Map使用簡單的 XML 或註解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。(來自官方文檔)面試
解釋下上面這段話:spring
1.支持定製話SQL說明,使用mybatis程序員能夠本身寫sql語句,能夠更好的優化SQL語句,相對Hibernate對sql的優化更方便.sql
2. 支持存儲過程,就是在mybatis配置文件中進行了配置,在Java中就能夠很方便的調用存儲過程,以下配置,在Java中調用這個statement的id就能夠調用到配置中的存儲過程:數據庫
<insert id="CALL_INSERT_T_USER" parameterMap="insertParamterMap" statementType="CALLABLE"> {call test.adduser(?, ?, ?, ?, ?)} </insert>
3. 高級映射就是相應的輸入輸出映射.設計模式
4. 避免JDBC的全部手動操做,即設置好對應的輸入輸出參數,就會返回相對應的設定對象 ; 而且框架處理了鏈接池,以及statement,結果集的的關閉.mybatis
5. 對配置和元素map使用簡單的xml配置,下面舉個例子:app
a. 配置的statement框架
<insert id="INSERT_TABLE_T_USER"> insert into t_user(name,age,sex,address) values(#{name},#{age},#{sex},#{address}) </insert>
b. Java中的調用代碼:工具
@Test public void testMapParamert() { Map<String, String> param = new HashMap<String, String>(); param.put("name", "zhangsan"); param.put("age", "18"); param.put("sex", "male"); param.put("address", "sichuanchengdu"); param.put("phone", "110"); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.insert("INSERT_TABLE_T_USER", param); sqlSession.commit(); }
這樣直接設置參數到map集合中,map中的K值和配置文件中寫的參數名相對應,就能夠將相應的值設置進去; (我在工做中用的ibatis是這樣用的 , 回來試了下mybatis也是支持的,不過通常其餘公司不這樣使用).
市面上經常使用的ORM框架,有Entity EJB、Hibernate、IBATIS、TopLink、OJB 還有 Spring中的JdbcTemplate 等, 據我見過或者面試過的公司中基本都是Hibernate和mybatis,遇到過兩家公司會使用的是spring的JdbcTemplate.
我在工做學習中主要用到和了解過的就orm框架是Hibernate和mybatis,如今簡單的對比下二者:
mybatis:專一是sql自己,須要程序員本身編寫sql語句,sql修改、優化比較方便。
是一個不徹底 的ORM框架,雖然程序員本身寫sql,mybatis 也能夠實現映射(輸入映射、輸出映射)。
應用場景:適用與需求變化較多的項目,好比:互聯網項目。
hibernate:是一個標準ORM框架(對象關係映射)。入門門檻較高的,不須要程序寫sql,sql語句自動生成了。
對sql語句進行優化、修改比較困難的。
應用場景:適用與需求變化很少的中小型項目,好比:後臺管理系統,erp、orm、oa等. (來自某培訓單位老師)
spring的JdbcTemplate: 使用模板設計模式設計的一套操做數據的庫的Jdbc工具類 , 由程序員來寫sql以及輸入輸出參數進行映射,封裝了獲取數據庫鏈接關閉資源等功能,之前大概看過如今都忘記了,後續有時間進行補充.
上面大概介紹了下mybatis是什麼以及一些相關的東西,中間還夾雜了一些代碼,若是沒了解過mybatis的能夠跳過其中的代碼 , 學習瞭解過mybatis在來看上述代碼(由於只作簡單介紹因此代碼中省略了一些次要的東西) .