Tkmybatis 是基于 Mybatis 框架开发的一个工具,经过调用它提供的方法实现对单表的数据操做,不须要写任何 sql 语句,这极大地提升了项目开发效率。java
在 pom.xml 中引入 tk.mybatis 的引用。git
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency>
@Table(name = "t_plan") public class PopMerchantPlanDO{ /** * id */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 编号 */ private String code; }
映射数据库表和实体对象,相似的注解还有 @Column、@ColumnType、@Transient 等等。github
public interface BaseDao<T> extends BaseMapper<T>, MySqlMapper<T>, IdsMapper<T>, ConditionMapper<T>, ExampleMapper<T> { }
Dao 对象继承的这些接口帮你封装了一系列单表的操做,使你不用再为每一个单表编写繁杂重复的 sql 语句。spring
当你使用 Dao 对象操做数据库的时候,只须要调用这些接口中封装好的方法,就能完成一系列对单表的 CURD 操做,好比下面的 selectAll 方法,鉴于篇幅,更多的 CURD 方法,你们能够打开 Mapper 接口自行查看,一目了然。sql
@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 直接引用。mybatis
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 语句,这?如今又兜兜转转回去了?app
Tkmybatis 减小了一系列对单表的单调接口和繁杂的 SQL 语句,但也下降了代码的可读性,另外这种广而全的数据库操做,必然会牺牲一部分的查询性能。框架
能够在一些并发量不大、对性能要求不高的项目中尝试下 Tkmybatis ,对一些比较大的项目来讲,仍是但愿本身对 SQL 的控制更强一点。