TKmybatis的框架介绍和原理解析

作者:JMCui 时间:2022-08-28 21:35:42 

一、TkMybatis

Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率。

二、怎么用?

1. 引用

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


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

2. DO 对象


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

/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 编号
*/
private String code;
}

映射数据库表和实体对象,类似的注解还有 @Column、@ColumnType、@Transient 等等。

3. Mapper 数据库操作接口


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

Dao 对象继承的这些接口帮你封装了一系列单表的操作,使你不用再为每个单表编写繁杂重复的 sql 语句。

当你使用 Dao 对象操作数据库的时候,只需要调用这些接口中封装好的方法,就能完成一系列对单表的 CURD 操作,比如下面的 selectAll 方法,鉴于篇幅,更多的 CURD 方法,大家可以打开 Mapper 接口自行查看,一目了然。


@RegisterMapper
public interface SelectAllMapper<T> {

/**
 * 查询全部结果
 *
 * @return
 */
@SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
List<T> selectAll();
}

当然,对于复杂的 SQL 语句,比如 JOIN 操作等等,仍然需要自行编写 xml 文件和 SQL 语句。

三、底层原理

TkMybatis 的封装依赖一个 @SelectProvider 注解来完成,如果你使用过 @Select 注解,那么 @SelectProvider 与它没有质的区别,只是在定义注解的方式上有所不同, 一个是直接定义 sql, 一个是在外部定义好 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 实现类,就是依赖反射、注解等手段拼接 SQL 语句的过程。


/**
 * 查询全部结果
 *
 * @param ms
 * @return
 */
public String selectAll(MappedStatement ms) {
 final Class<?> entityClass = getEntityClass(ms);
 //修改返回值类型为实体类型
 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();
}

四、结语

当初从 Hibernate 换到 Mybatis,把 HQL、QBC 语句的成本换成简单的 SQL 语句,这?现在又兜兜转转回去了?

Tkmybatis 减少了一系列对单表的单调接口和繁杂的 SQL 语句,但也降低了代码的可读性,另外这种广而全的数据库操作,必然会牺牲一部分的查询性能。

可以在一些并发量不大、对性能要求不高的项目中尝试下 Tkmybatis ,对一些比较大的项目来说,还是希望自己对 SQL 的控制更强一点。

相关链接:1. mybatis @SelectProvider 注解, 打赌你没有用过

来源:https://www.cnblogs.com/jmcui/p/14067042.html

标签:TKmybatis是什么,框架,原理
0
投稿

猜你喜欢

  • HashMap的get()方法的NullPointerException问题

    2023-09-23 07:24:12
  • JAVA JDK8 List分组的实现和用法

    2023-11-26 09:56:11
  • SpringBoot整合WebService的实现示例

    2023-05-25 12:37:55
  • SpringBoot项目中使用Mockito的示例代码

    2023-09-25 22:31:14
  • 详解Spark Sql在UDF中如何引用外部数据

    2021-08-17 14:51:17
  • mybatis根据表逆向自动化生成代码的实现

    2023-03-12 15:39:02
  • 详解Java中Iterable与Iterator用法

    2022-05-14 04:25:30
  • c#取得控制台应用程序根目录

    2023-06-16 14:25:44
  • 同时使用@LoadBalanced @RefreshScope注解负载均衡失效分析

    2023-12-07 10:59:24
  • Java线程池大小的设置方法实例

    2022-10-04 04:20:19
  • spring boot 注入 property的三种方式(推荐)

    2023-01-23 05:10:27
  • mybatis-plus 返回部分字段的解决方式

    2023-03-25 14:45:04
  • 使用String类型小数值转换为Long类型

    2023-04-14 10:34:56
  • Java中final变量使用总结

    2022-09-29 08:32:00
  • JavaMail入门教程之解析邮件(5)

    2023-11-29 08:25:13
  • 聊一聊Java的JVM类加载机制

    2023-11-08 03:58:37
  • 学习Java HashMap,看这篇就够了

    2023-11-11 11:18:56
  • 不规范使用ThreadLocal导致bug分析解决

    2023-11-24 20:03:59
  • 带你一文深入认识Java String类

    2023-10-15 10:55:54
  • MyBatis-Plus多表联查的实现方法(动态查询和静态查询)

    2023-11-23 22:26:45
  • asp之家 软件编程 m.aspxhome.com