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")
publicclassPopMerchantPlanDO{
/**
*id
*/
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
privateLongid;
/**
*编号
*/
privateStringcode;
}
映射数据库表和实体对象,类似的注解还有@Column、@ColumnType、@Transient等等。
3.Mapper数据库操作接口
publicinterfaceBaseDaoextendsBaseMapper ,MySqlMapper ,IdsMapper ,ConditionMapper ,ExampleMapper { }
Dao对象继承的这些接口帮你封装了一系列单表的操作,使你不用再为每个单表编写繁杂重复的sql语句。
当你使用Dao对象操作数据库的时候,只需要调用这些接口中封装好的方法,就能完成一系列对单表的CURD操作,比如下面的selectAll方法,鉴于篇幅,更多的CURD方法,大家可以打开Mapper接口自行查看,一目了然。
@RegisterMapper publicinterfaceSelectAllMapper{ /** *查询全部结果 * *@return */ @SelectProvider(type=BaseSelectProvider.class,method="dynamicSQL") List selectAll(); }
当然,对于复杂的SQL语句,比如JOIN操作等等,仍然需要自行编写xml文件和SQL语句。
三、底层原理
TkMybatis的封装依赖一个@SelectProvider注解来完成,如果你使用过@Select注解,那么@SelectProvider与它没有质的区别,只是在定义注解的方式上有所不同,一个是直接定义sql,一个是在外部定义好sql直接引用。
publicinterfaceMapper{
@Select("selectuuid,full_nameasnamefromt_system_company")
List
@RegisterMapper publicinterfaceSelectAllMapper{ @SelectProvider(type=BaseSelectProvider.class,method="dynamicSQL") List selectAll(); }
@SelectProvider引用的各种*Provider.class实现类,就是依赖反射、注解等手段拼接SQL语句的过程。
/**
*查询全部结果
*
*@paramms
*@return
*/
publicStringselectAll(MappedStatementms){
finalClass>entityClass=getEntityClass(ms);
//修改返回值类型为实体类型
setResultType(ms,entityClass);
StringBuildersql=newStringBuilder();
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));
returnsql.toString();
}
四、结语
当初从Hibernate换到Mybatis,把HQL、QBC语句的成本换成简单的SQL语句,这?现在又兜兜转转回去了?
Tkmybatis减少了一系列对单表的单调接口和繁杂的SQL语句,但也降低了代码的可读性,另外这种广而全的数据库操作,必然会牺牲一部分的查询性能。
可以在一些并发量不大、对性能要求不高的项目中尝试下Tkmybatis,对一些比较大的项目来说,还是希望自己对SQL的控制更强一点。
相关链接:1.mybatis@SelectProvider注解,打赌你没有用过
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。