MyBatis原理
MyBatis 是一個基於Java的持久層框架。它提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映,將介面和 Java 的POJO(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
原理:
MyBatis應用程式根據XML配置檔案建立SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是xml配置檔案,一處是Java程式碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession例項直接執行對映的sql語句,完成對資料的增刪改查和事務提交等,用完之後關閉SqlSession。
圖片來自他人
二、MyBatis例子:
@Mapper
public interface NewsDAO {
String TABLE_NAME="news";
String INSERT_FIELDS=" title, link, image,like_count, comment_count,created_date,user_id ";
String SELECT_FIELDS=" id, "+INSERT_FIELDS;
//Java註解的方式******************
@Update({"update ", TABLE_NAME, " set like_count = #{likeCount} where id=#{id}"})
int updateLikeCount(@Param("id") int id, @Param("likeCount") int likeCount);
//xml
//從首頁中選擇一批諮詢(分頁處理)不在通過註解方式寫而是通過xml來寫該方法,xml放下相同的包目錄下並且自定義名字一樣
List<News> selectByUserIdAndOffset(@Param("userId")int userId,@Param("offset") int offset
,@Param("limit")int limit);
}
與介面同名的xml檔案要放在,相同的包的相同的目錄下。 xml裡可以做一些複雜的處理的,比如下面例子中的<if test="userId !=0">...</if>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.linglee.dao.NewsDAO"> <!--指定介面-->
<sql id="table">news</sql><!--表名 列名-->
<sql id="selectFields">id,title, link, image, like_count, comment_count,created_date,user_id
</sql>
<select id="selectByUserIdAndOffset" resultType="com.linglee.model.News"> <!--id-->
SELECT
<include refid="selectFields"/>
FROM
<include refid="table"/>
<if test="userId != 0">
WHERE user_id = #{userId}
</if>
ORDER BY id DESC
LIMIT #{offset},#{limit}
</select>
</mapper>
二、MyBatis與Hibernate:
相同點:他們都是市面上流行的ORM框架。他們均是通過xml配置生成sessionFactory然後通過sessionFactory生成session執行sql和管理事務。他們都支援JDBC和事務管理。
區別主要在一下幾個方面體現:
1.開發速度
MyBatis支援的學習相比Hibernate更簡單,支援原生sql,學習更簡單。Hibernate的學習難度更大。開發速度差距不大。MyBatis要維護dao層資料庫欄位和bean屬性對映,Hibernate要在bean中新增欄位對映。
2.執行效率
MyBatis支援原生sql自定義查詢欄位更加靈活,基本屬於JDBC操作。hibernate是對JDBC更復雜的封裝。每次查詢需要完整的對映,對待複雜的查詢通過HQL語句生成的sql語句效率不能保證。所以MyBatis會比Hi稍快。
3.日誌管理
MyBatis需要log4j列印日誌。Hibernate有自己帶的日誌系統,且更細緻。
4.快取機制
Hibernate具有一級快取和二級快取。一級快取為session快取,當session失效快取也失效。二級快取是SessionFactory級別,由於SessionFactory在系統中是單例,所以二級快取會一直存在整個應用的生命週期中。
5.對映方式
MyBatis的物件關係對映配置靈活,Hibernate則需要配置完整的物件關係對映,物件關係維護的更好。業務表的關聯太多,建議使用MyBatis。
6.sql優化效能調優
MyBatis原生sql效能優化,有時候相比Hibernate自動生成的sql好太多。
7.資料庫移植方面
MyBatis的資料移植方面,沒有Hibernate。Hibernate自動生成sql能適應更多的資料庫,並且能反向生成表。
8.後期維護
MyBatis後期維護比Hibernate更方便
相關文章
- Mybatis工作原理MyBatis
- Mybatis原理和SqlSessionMyBatisSQLSession
- MyBatis原理解析MyBatis
- MyBatis介面繫結原理MyBatis
- 面試被問MyBatis原理?面試MyBatis
- 深入淺出MyBatis:MyBatis解析和執行原理MyBatis
- MyBatis框架原理3:快取MyBatis框架快取
- MyBatis-07-外掛原理MyBatis
- MyBatis動態代理執行原理MyBatis
- mybatis系列第1篇:框架原理MyBatis框架
- MyBatis的解析和執行原理MyBatis
- [Spring]MyBatis的執行原理SpringMyBatis
- 淺析MyBatis的動態代理原理MyBatis
- 從原始碼角度分析 MyBatis 工作原理原始碼MyBatis
- simple-mybatis的原理及實現MyBatis
- 面試官:你分析過mybatis工作原理嗎?面試MyBatis
- 深入原始碼理解Spring整合MyBatis原理原始碼SpringMyBatis
- mybatis原理,配置介紹及原始碼分析MyBatis原始碼
- 【MyBatis原始碼分析】外掛實現原理MyBatis原始碼
- springboot~mybatis-pagehelper原理與使用Spring BootMyBatis
- 兩張圖徹底搞懂MyBatis的Mapper原理!MyBatisAPP
- 【Mybatis原始碼解析】- 整體架構及原理MyBatis原始碼架構
- Mybatis底層原理學習(三):查詢結果集的處理原理MyBatis
- 【肥朝】圖解原始碼 | MyBatis的Mapper原理圖解原始碼MyBatisAPP
- Mybatis外掛擴充套件以及與Spring整合原理MyBatis套件Spring
- Mybatis第三方PageHelper分頁外掛原理MyBatis
- 持久層Mybatis3底層原始碼分析,原理解析MyBatisS3原始碼
- Mybatis-Plus的應用場景及注入SQL原理分析MyBatisSQL
- 深入理解 MyBatis的二級快取的設計原理MyBatis快取
- 當面試官問我Mybatis初始化原理時,我笑了面試MyBatis
- 深入詳解Mybatis的架構原理與6大核心流程MyBatis架構
- Day65 Mybatis的執行原理以及常見面試題MyBatis面試題
- Mybaitis入門基礎(一)MyBatis的概念引入及工作原理AIMyBatis
- 【Mybatis原始碼解析】- JDBC連線資料庫的原理和操作MyBatis原始碼JDBC資料庫
- 幾百行程式碼寫個Mybatis,原理搞的透透的!行程MyBatis
- 送命題:講一講Mybatis外掛的原理及如何實現?MyBatis
- mybatis底層原理學習(一):SqlSessionFactory和SqlSession的建立過程MyBatisSQLSession
- MyBatis(二)MyBatis入門程式(MyBatis demo)MyBatis