欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TKmybatis的框架介紹和原理解析

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

一、TkMybatis

Tkmybatis 是基于 Mybatis 框架開發(fā)的一個(gè)工具,通過(guò)調(diào)用它提供的方法實(shí)現(xiàn)對(duì)單表的數(shù)據(jù)操作,不需要寫任何 sql 語(yǔ)句,這極大地提高了項(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ù)庫(kù)表和實(shí)體對(duì)象,類似的注解還有 @Column、@ColumnType、@Transient 等等。

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

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

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

當(dāng)你使用 Dao 對(duì)象操作數(shù)據(jù)庫(kù)的時(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 語(yǔ)句,比如 JOIN 操作等等,仍然需要自行編寫 xml 文件和 SQL 語(yǔ)句。

三、底層原理

TkMybatis 的封裝依賴一個(gè) @SelectProvider 注解來(lái)完成,如果你使用過(guò) @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 語(yǔ)句的過(guò)程。

 /**
  * 查詢?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é)語(yǔ)

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

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

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

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

相關(guān)文章

  • java實(shí)現(xiàn)商品信息管理系統(tǒng)

    java實(shí)現(xiàn)商品信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)商品信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Java關(guān)鍵詞final示例解讀

    Java關(guān)鍵詞final示例解讀

    這篇文章主要介紹了Java關(guān)鍵詞final解讀,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 最新評(píng)論