一、tk.mybatis简介
tk.mybatis是一个基于Mybatis的增强工具包,它使用简单的注解来完成Mybatis单表的基本crud操作,同时提供通用的Mapper接口,可以在不写SQL语句的情况下实现单表的增删改查操作。 相较于使用Mybatis的mapper.xml文件,tk.mybatis使用注解方式实现Mapper接口,简化了开发的难度,提高了开发效率。
二、tk.mybatis的主要优点
1、使用简单的注解实现单表crud操作,避免了繁琐的XML配置,提高了开发效率。 2、提供通用的Mapper接口,实现单表的增删改查操作,减少了代码量。 3、支持复杂SQL语句的自定义查询,提供了更灵活的查询方式。 4、支持多种数据库,提供了针对不同数据库的方言,大大提升了兼容性。
三、tk.mybatis的使用方法
1、依赖引入
在pom.xml文件中引入tk.mybatis的依赖:
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>latest</version>
</dependency>
2、Mapper接口的编写
创建Mapper接口并使用注解来完成单表的crud操作:
public interface UserMapper extends Mapper<User> {
// 使用注解方式完成查询操作
@Select("SELECT * FROM user WHERE name = #{name}")
User findByUserName(@Param("name") String name);
}
3、整合Spring
在Spring Boot中整合tk.mybatis非常简单,只需要在启动类上添加注解@EnableMapperScan
注解即可,如下所示:
@SpringBootApplication
@EnableMapperScan(basePackages = "com.example.mapper")
public class MybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisDemoApplication.class, args);
}
}
四、tk.mybatis常见问题
1、tk.mybatis没找到
在pom.xml文件中引入依赖后,如果编译出现找不到tk.mybatis的错误,可以尝试使用以下命令清除Maven本地仓库的缓存:
mvn dependency:purge-local-repository
2、tk.mybatis官网
tk.mybatis的官方网站为 https://mapperhelper.github.io/mybatis-mapper-3/,上面有详细的使用文档和示例,可以供开发者参考。
3、tk.mybatis连接查询方式
对于tk.mybatis支持的连接查询方式,可以使用Provider注解来自定义SQL语句,这样可以完成更复杂的连接查询。
public interface UserMapper extends Mapper<User> {
// 使用Provider注解自定义SQL语句
@SelectProvider(type = UserSqlProvider.class, method = "findUsersByJoin")
List<User> findUsersByJoin(@Param("name") String name, @Param("age") Integer age);
class UserSqlProvider {
public String findUsersByJoin(Map<String, Object> params) {
StringBuilder sql = new StringBuilder("SELECT u.*, r.rolename FROM user u ");
sql.append("LEFT JOIN user_role ur ON u.id = ur.user_id ");
sql.append("LEFT JOIN role r ON r.id = ur.role_id ");
sql.append("WHERE 1 = 1 ");
if (params.containsKey("name")) {
sql.append("AND u.name = #{name} ");
}
if (params.containsKey("age")) {
sql.append("AND u.age = #{age} ");
}
return sql.toString();
}
}
}