tkMapper 就是一个 MyBatis 插件,基于 MyBatis 提供很多工具,提高开发效率,主要有以下两个功能。
tkMapper 的使用需要基于 MyBatis。
创建 Spring Boot 项目,选中 Lombok、Spring Web、MyBatis Framework、MySQL Driver 依赖
application.yml 配置文件中配置相关信息
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/springdb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8 username: root password: luis mybatis: type-aliases-package: com.luis.beans mapper-locations: classpath:mappers/*Mapper.xml
注意:配置后,手动创建 beans 和 mappers 文件夹
创建 dao 文件夹,在启动类上添加 dao 的包扫描器 @MapperScan(basePackages = {"com.luis.dao"})
添加依赖
<!-- tkMapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency>
如果自己在 maven 仓库中搜索,注意搜索关键词:mapper starter
PS:添加后,注意手动刷新 pom
更换启动类上 dao 包的包扫描器来源,不使用原先的 @MapperScan
,要使用新添加的 tkMapper 的 @MapperScan
import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan(basePackages = {"com.luis.dao"}) //使用tkMapper的包扫描器注解 public class SpringbootTkMapperDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootTkMapperDemoApplication.class, args); } }
PS:注意注解的包来源 import tk.mybatis.spring.annotation.MapperScan
以上,tkMapper 环境已经搭建完成
tkMapper 提供针对单表通用的数据库操作方法。
DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `user_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `user_realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `user_img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
@Data @NoArgsConstructor @AllArgsConstructor @Table(name = "users") //数据库表名和实体类类名不一致需要指定映射关系! public class User { @Id //指定主键 private Integer userId; private String userName; private String userPwd; private String userRealname; private String userImg; }
注意:创建的 Dao 接口需要继承 tkMapper 中提供的 Mapper
和 MySqlMapper
两个接口,这两个接口提供了对单表的通用操作。
public interface UserDao extends Mapper<User>, MySqlMapper<User> { }
可选优化策略【建议使用】:
如果不想每次创建 dao 接口时都继承 tkMapper 中的两个接口,可以自己写一个通用的接口模板,只需要让这个通用的接口模板继承 tkMapper 中的两个接口,然后自己创建的 dao 接口只需要继承这个通用的接口模板即可!
但是,需要注意的是,这个通用的接口模板千万不能写在 dao 目录下!因为 dao 目录下的接口会被扫描到,有固定的功能用处;而我们自定义的通用接口模板只是为了继承,没有其他特殊功能!
使用示例:
1、可在 dao 目录同级创建 general 目录,在 general 目录下创建 GeneralDao 接口,并继承 tkMapper 中的两个接口。
package com.luis.general; import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; /** * @Author: Luis * @date: 2022/11/9 14:39 * @description: 自定义的通用接口模板 */ public interface GeneralDao<T> extends Mapper<T>, MySqlMapper<T> { }2、创建 dao 接口,继承 GeneralDao 即可!
public interface UserDao extends GeneralDao<User> { }
添加 Junit 和 springboot test 两个测试依赖:
<!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- springboot test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
写测试类进行测试:
@RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootTkMapperDemoApplication.class) //启动类.class public class UserDaoTest { @Autowired private UserDao userDao; //如果爆红线不用管(或Dao接口上添加@Repository注解) @Test public void test() { User user = new User(); user.setUserName("mike"); user.setUserPwd("123"); user.setUserRealname("zhangsan"); user.setUserImg("user/default.jpg"); int i = userDao.insert(user); System.out.println("========> i = " + i); } }
insert
:普通添加insertUseGeneratedKeys
:可返回自增 id 的添加updateByPrimaryKey
:根据主键修改deleteByPrimaryKey
:根据主键删除