前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TkMybatis 是什么?

TkMybatis 是什么?

作者头像
JMCui
发布2020-12-03 10:26:41
4.9K0
发布2020-12-03 10:26:41
举报
文章被收录于专栏:JMCuiJMCui

一、TkMybatis

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

二、怎么用?

1. 引用

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

代码语言:javascript
复制
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

2. DO 对象

代码语言:javascript
复制
@Table(name = "t_plan")
public class PopMerchantPlanDO{

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

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

3. Mapper 数据库操作接口

代码语言:javascript
复制
public interface BaseDao<T> extends BaseMapper<T>, MySqlMapper<T>, IdsMapper<T>, ConditionMapper<T>, ExampleMapper<T> {
}

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

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

代码语言:javascript
复制
@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 直接引用。

代码语言:javascript
复制
public interface Mapper {

    @Select("select uuid,full_name as name from t_system_company ")
    List<Map<String, String>> getCompanyInfo();
}
代码语言:javascript
复制
@RegisterMapper
public interface SelectAllMapper<T> {

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

@SelectProvider 引用的各种 *Provider.class 实现类,就是依赖反射、注解等手段拼接 SQL 语句的过程。

代码语言:javascript
复制
    /**
     * 查询全部结果
     *
     * @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 的控制更强一点。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、TkMybatis
  • 二、怎么用?
    • 1. 引用
      • 2. DO 对象
        • 3. Mapper 数据库操作接口
        • 三、底层原理
        • 四、结语
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档