最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TKmybatis的框架介紹和原理解析

 更新時(shí)間:2020年12月01日 14:49:05   作者:JMCui  
tkmybatis是在mybatis框架的基礎(chǔ)上提供了很多工具,讓開發(fā)更加高效,下面來看看這個(gè)框架的基本使用,后面會(huì)對(duì)相關(guān)源碼進(jìn)行分析,感興趣的同學(xué)可以看一下,挺不錯(cuò)的一個(gè)工具

一、TkMybatis

Tkmybatis 是基于 Mybatis 框架開發(fā)的一個(gè)工具,通過調(diào)用它提供的方法實(shí)現(xiàn)對(duì)單表的數(shù)據(jù)操作,不需要寫任何 sql 語句,這極大地提高了項(xiàng)目開發(fā)效率。

二、怎么用?

1. 引用

在 pom.xml 中引入 tk.mybatis 的引用。

<dependency>
 <groupId>tk.mybatis</groupId>
 <artifactId>mapper-spring-boot-starter</artifactId>
 <version>2.1.5</version>
</dependency>

2. DO 對(duì)象

@Table(name = "t_plan")
public class PopMerchantPlanDO{

	/**
	 * id
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	/**
	 * 編號(hào)
	 */
	private String code;
}

映射數(shù)據(jù)庫表和實(shí)體對(duì)象,類似的注解還有 @Column、@ColumnType、@Transient 等等。

3. Mapper 數(shù)據(jù)庫操作接口

public interface BaseDao<T> extends BaseMapper<T>, MySqlMapper<T>, IdsMapper<T>, ConditionMapper<T>, ExampleMapper<T> {
}

Dao 對(duì)象繼承的這些接口幫你封裝了一系列單表的操作,使你不用再為每個(gè)單表編寫繁雜重復(fù)的 sql 語句。

當(dāng)你使用 Dao 對(duì)象操作數(shù)據(jù)庫的時(shí)候,只需要調(diào)用這些接口中封裝好的方法,就能完成一系列對(duì)單表的 CURD 操作,比如下面的 selectAll 方法,鑒于篇幅,更多的 CURD 方法,大家可以打開 Mapper 接口自行查看,一目了然。

@RegisterMapper
public interface SelectAllMapper<T> {

 /**
  * 查詢?nèi)拷Y(jié)果
  *
  * @return
  */
 @SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
 List<T> selectAll();
}

當(dāng)然,對(duì)于復(fù)雜的 SQL 語句,比如 JOIN 操作等等,仍然需要自行編寫 xml 文件和 SQL 語句。

三、底層原理

TkMybatis 的封裝依賴一個(gè) @SelectProvider 注解來完成,如果你使用過 @Select 注解,那么 @SelectProvider 與它沒有質(zhì)的區(qū)別,只是在定義注解的方式上有所不同, 一個(gè)是直接定義 sql, 一個(gè)是在外部定義好 sql 直接引用。

public interface Mapper {

 @Select("select uuid,full_name as name from t_system_company ")
 List<Map<String, String>> getCompanyInfo();
}
@RegisterMapper
public interface SelectAllMapper<T> {

 @SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
 List<T> selectAll();
}

@SelectProvider 引用的各種 *Provider.class 實(shí)現(xiàn)類,就是依賴反射、注解等手段拼接 SQL 語句的過程。

 /**
  * 查詢?nèi)拷Y(jié)果
  *
  * @param ms
  * @return
  */
 public String selectAll(MappedStatement ms) {
  final Class<?> entityClass = getEntityClass(ms);
  //修改返回值類型為實(shí)體類型
  setResultType(ms, entityClass);
  StringBuilder sql = new StringBuilder();
  sql.append(SqlHelper.selectAllColumns(entityClass));
  sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));

  // 邏輯刪除的未刪除查詢條件
  sql.append("<where>");
  sql.append(SqlHelper.whereLogicDelete(entityClass, false));
  sql.append("</where>");

  sql.append(SqlHelper.orderByDefault(entityClass));
  return sql.toString();
 }

四、結(jié)語

當(dāng)初從 Hibernate 換到 Mybatis,把 HQL、QBC 語句的成本換成簡單的 SQL 語句,這?現(xiàn)在又兜兜轉(zhuǎn)轉(zhuǎn)回去了?

Tkmybatis 減少了一系列對(duì)單表的單調(diào)接口和繁雜的 SQL 語句,但也降低了代碼的可讀性,另外這種廣而全的數(shù)據(jù)庫操作,必然會(huì)犧牲一部分的查詢性能。

可以在一些并發(fā)量不大、對(duì)性能要求不高的項(xiàng)目中嘗試下 Tkmybatis ,對(duì)一些比較大的項(xiàng)目來說,還是希望自己對(duì) SQL 的控制更強(qiáng)一點(diǎn)。

相關(guān)鏈接:1. mybatis @SelectProvider 注解, 打賭你沒有用過

相關(guān)文章

  • Java用文件流下載網(wǎng)絡(luò)文件示例代碼

    Java用文件流下載網(wǎng)絡(luò)文件示例代碼

    這篇文章主要介紹了Java用文件流的方式下載網(wǎng)絡(luò)文件,大家參考使用吧
    2013-11-11
  • Java實(shí)現(xiàn)提取HTML文件中的文本內(nèi)容

    Java實(shí)現(xiàn)提取HTML文件中的文本內(nèi)容

    從?HTML?文件中提取文本內(nèi)容是數(shù)據(jù)抓取中的一個(gè)常見任務(wù),本文主要和大家分享了如何使用免費(fèi)?Java?API?從HTML?文件中提取文本內(nèi)容,需要的可以參考下
    2024-04-04
  • Java中Minio的基本使用詳解

    Java中Minio的基本使用詳解

    這篇文章主要介紹了Java中Minio的基本使用詳解,MinIO 是一個(gè)基于Apache License v2.0開源協(xié)議的對(duì)象存儲(chǔ)服務(wù),它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,需要的朋友可以參考下
    2024-01-01
  • Java正則表達(dá)式匹配電話格式

    Java正則表達(dá)式匹配電話格式

    正則表達(dá)式是由普通的字符以及特殊字符組成的文字模式,用來在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。本文給大家介紹java正則表達(dá)式匹配電話格式,對(duì)java正則表達(dá)式匹配相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • spring boot 結(jié)合jsp案例詳解

    spring boot 結(jié)合jsp案例詳解

    這篇文章主要介紹了spring boot 結(jié)合jsp案例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java finally塊執(zhí)行時(shí)機(jī)全面分析

    java finally塊執(zhí)行時(shí)機(jī)全面分析

    下面小編就為大家?guī)硪黄猨ava finally塊執(zhí)行時(shí)機(jī)全面分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java使用正則表達(dá)式去除小數(shù)點(diǎn)后面多余的0功能示例

    Java使用正則表達(dá)式去除小數(shù)點(diǎn)后面多余的0功能示例

    這篇文章主要介紹了Java使用正則表達(dá)式去除小數(shù)點(diǎn)后面多余的0功能,結(jié)合具體實(shí)例形式分析了java字符串正則替換相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 最新評(píng)論

    元阳县| 曲松县| 开平市| 长治县| 施秉县| 浦东新区| 呼图壁县| 察哈| 都匀市| 武安市| 山东| 开阳县| 年辖:市辖区| 平邑县| 柳河县| 靖州| 海晏县| 威信县| 山东省| 枞阳县| 罗城| 洪江市| 盖州市| 南雄市| 伊金霍洛旗| 沁水县| 郯城县| 高雄县| 浦东新区| 庆城县| 乌兰浩特市| 元谋县| 磴口县| 定陶县| 建水县| 凉城县| 来安县| 汕头市| 勐海县| 房产| 阳曲县|