Java框架tk_TKmybatis的框架介绍和原理解析
一、tkmybatis
tkmybatis 是基于 mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率。
二、怎么用?
1. 引用
在 pom.xml 中引入 tk.mybatis 的引用。
tk.mybatis
mapper-spring-boot-starter
2.1.5
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 extends basemapper, mysqlmapper, idsmapper, conditionmapper, examplemapper {
}
dao 对象继承的这些接口帮你封装了一系列单表的操作,使你不用再为每个单表编写繁杂重复的 sql 语句。
当你使用 dao 对象操作数据库的时候,只需要调用这些接口中封装好的方法,就能完成一系列对单表的 curd 操作,比如下面的 selectall 方法,鉴于篇幅,更多的 curd 方法,大家可以打开 mapper 接口自行查看,一目了然。
@registermapper
public interface selectallmapper {
/**
* 查询全部结果
*
* @return
*/
@selectprovider(type = baseselectprovider.class, method = "dynamicsql")
list 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> getcompanyinfo();
}
@registermapper
public interface selectallmapper {
@selectprovider(type = baseselectprovider.class, method = "dynamicsql")
list 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("");
sql.append(sqlhelper.wherelogicdelete(entityclass, false));
sql.append("");
sql.append(sqlhelper.orderbydefault(entityclass));
return sql.tostring();
}
四、结语
当初从 hibernate 换到 mybatis,把 hql、qbc 语句的成本换成简单的 sql 语句,这?现在又兜兜转转回去了?
tkmybatis 减少了一系列对单表的单调接口和繁杂的 sql 语句,但也降低了代码的可读性,另外这种广而全的数据库操作,必然会牺牲一部分的查询性能。
可以在一些并发量不大、对性能要求不高的项目中尝试下 tkmybatis ,对一些比较大的项目来说,还是希望自己对 sql 的控制更强一点。
希望与广大网友互动??
点此进行留言吧!
Java框架tk_TKmybatis的框架介绍和原理解析相关推荐
- 【java】Java即时编译(JIT)器原理解析及实践
1.概述 转载:Java即时编译(JIT)器原理解析及实践 一.导读 常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行.而Java为了实现"一次编译,处处运行&q ...
- 【卡尔曼滤波介绍与原理解析】
[卡尔曼滤波介绍与原理解析] 学习参考外文链接:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/. 参考链接:https:// ...
- Android开源框架PowerfulViewLibrary——PowerfulEditText的介绍和源码解析
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/63685905 An ...
- java switch 类型_Java switch case数据类型原理解析
这篇文章主要介绍了Java switch case数据类型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java 中 switch cas ...
- Java框架tk_TKmybatis的框架介绍和原理分析及Mybatis新特性
tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现对员工表的增删改查 ...
- Android热修复(1):热修复的介绍和原理解析
一.热修复的产生概述 在开发中我们会遇到如下的情况: 1.刚发布的版本出现了严重的bug,这就需要去解决bug.测试并打渠道包在各个应用市场上重新发布,这会耗费大量的人力物力,代价会比较大. 2.已经 ...
- java aqs详解_Java AQS底层原理解析
AQS底层原理 AQS(AbstractQueuedSynchronizer)是一个抽象同步队列,JUC(java.util.concurrent)中很多同步锁都是基于AQS实现的. AQS的基本原理 ...
- java date类 时区_Java时区转换及Date类实现原理解析
这篇文章主要介绍了Java时区转换及Date类实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.时区的说明 地球表面按经线从东到西,被 ...
- java 序列化 原理解析
序列化相关文章: * Java 序列化 之 Serializable * Java 序列化之 Externalizable * Java 序列化 之 单例模式. 阅读本文章之前,务必要阅读上面的三篇文 ...
最新文章
- docker学习笔记(五)docker实战
- Centos运行Mysql因为内存不足进程被杀
- 科技公司都是如何应对 COVID-19?
- Mysql报too many connections详解
- 目标检测之2015iccv---objdetection 专题论文
- 华为助力“沙漠奇迹”成为高密互联的高尔夫球场
- wordpress各种获取url函数总结
- 【IoT】产品设计:如何写好硬件产品的需求文档?
- 使用补丁修改DSDT/SSDT [DSDT/SSDT综合教程]
- HTC6950新手基本操作方法
- oracle siebel crm 8.0,Solix实现Oracle Siebel CRM 8.1整合
- Cocoa-专业术语
- VC++分析数据包实现SMTP协议分析
- web大学生个人网站作业模板——上海旅游景点介绍网页代码 家乡旅游网页制作模板 大学生静态HTML网页源码
- word如何添加页码
- IT兄弟连 Java语法教程 Java平台的版本划分
- 《罪犯与女儿》,看完你会热泪盈眶
- mac电脑打不开html文件怎么处理,苹果电脑Mac打不开网页怎么办?Mac打不开网页的解决方法...
- Intel网卡升级iPXE固件
- 未来,人工智能会剥夺人类的工作吗?
热门文章
- TDengine 在 TCL 空调能源管理平台的实践
- 自顾不暇的大搜车能为吉利汽车做些什么?
- Tello SDK 开发避坑指南(持续更新)
- 基于JAVA旅行指南网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 全球与中国扩管器驱动市场深度研究分析报告
- 管家婆软件如何管理商品的多种型号?
- 信创操作系统--麒麟Kylin桌面版 (项目七 网络连接:有线、无线网络)
- fasterxml-jackson发生Can not deserialize instance of的原因
- 【BZOJ 4892】DNA
- 文字转图片,文字水印图片,合成图片,教你 Python 生成网站原创配图!