目录
一、快速认识tkMapper:
(资料图片)
二、tkMapper整合
2.1基于springboot整合mybatis
2.2 添加tkMapper依赖
三、tkMapper的使用:
3.1tkMapper常用方法之增删改
3.2tkMapper常用方法之查询
3.3tkMapper关联查询实现
四、tkMapper逆向工程
一、快速认识tkMapper:基于mybatis提供了很多第三方插件,这些插件通常可以完成数据操作方法的封装、数据库逆向工程工作(根据数据表生成实体类、映射文件)
tkMapper就是一个Mybatis插件,是在Mybatis的基础上提供了许多工具,让开发变得简单,提高开发效率
提供了针对表通用的数据库操作方法逆向工程(根据数据表生成实体类、dao接口、映射文件) 二、tkMapper整合 2.1基于springboot整合mybatis创建springboot工程,创建工程时,添加常用注解的添加(例如:springweb、mybatis、数据驱动文件、lombok)此处略~~
2.2 添加tkMapper依赖使用tkMapper必须要导入它的依赖项,根据循序渐进和需要我们会添加所有的相关依赖,在这里我们首先需要添加tkmapper的依赖
tk.mybatis mapper-spring-boot-starter 2.1.5
添加启动类配置文件:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/fmmallspring.datasource.username=rootspring.datasource.password=990501mybatis.type-aliases-package=com.xgsm.beansmybatis.mapper-locations=classpath:mappers/*Mapper
添加完依赖和启动类配置文件之后,我们需要修改一下@MapperScan注解的包为:import tk.mybatis.spring.annotation.MapperScan;(很重要!!)
三、tkMapper的使用:在对tkMapper的使用之前呢,我们需要做一些准备工作。
(1)、创建数据表
users表:
CREATE TABLE `users` ( `user_id` int NOT NULL AUTO_INCREMENT COMMENT "主键id 用户id", `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "用户名 用户名", `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "密码 密码", `nickname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "昵称 昵称", `realname` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "真实姓名 真实姓名", `user_img` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "头像 头像", `user_mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "手机号 手机号", `user_email` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "邮箱地址 邮箱地址", `user_sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "性别 M(男) or F(女)", `user_birth` date DEFAULT NULL COMMENT "生日 生日", `user_regtime` datetime NOT NULL COMMENT "注册时间 创建时间", `user_modtime` datetime NOT NULL COMMENT "更新时间 更新时间", PRIMARY KEY (`user_id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT COMMENT="用户 ";/*Data for the table `users` */insert into `users`(`user_id`,`username`,`password`,`nickname`,`realname`,`user_img`,`user_mobile`,`user_email`,`user_sex`,`user_birth`,`user_regtime`,`user_modtime`) values (1,"zhangsan","f379eaf3c831b04de153469d1bec345e",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-15 16:10:53","2021-04-15 16:10:53"),(2,"aaaa","1111",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-16 11:10:01","2021-04-16 11:10:01"),(3,"wahaha","4297f44b13955235245b2497399d7a93",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-16 15:36:52","2021-04-16 15:36:52"),(4,"heihei","4297f44b13955235245b2497399d7a93","二狗",NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-16 15:38:49","2021-04-16 15:38:49"),(5,"Tony","4297f44b13955235245b2497399d7a93","托尼",NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-23 10:25:04","2021-04-23 10:25:04"),(6,"hanmeimei","f379eaf3c831b04de153469d1bec345e",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-23 10:30:52","2021-04-23 10:30:52"),(7,"lilei123","4297f44b13955235245b2497399d7a93",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-23 10:33:03","2021-04-23 10:33:03"),(8,"tom123123","4297f44b13955235245b2497399d7a93",NULL,NULL,"img/default.png",NULL,NULL,NULL,NULL,"2021-04-23 10:34:49","2021-04-23 10:34:49");/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
user_addr表:
/*SQLyog Ultimate v10.00 Beta1MySQL - 8.0.26 : Database - fmmall**********************************************************************//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=""*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO" */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;CREATE DATABASE /*!32312 IF NOT EXISTS*/`fmmall` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION="N" */;USE `fmmall`;/*Table structure for table `user_addr` */DROP TABLE IF EXISTS `user_addr`;CREATE TABLE `user_addr` ( `addr_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "地址主键id", `user_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "用户ID", `receiver_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "收件人姓名", `receiver_mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "收件人手机号", `province` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "省份", `city` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "城市", `area` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "区县", `addr` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "详细地址", `post_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "邮编", `status` int DEFAULT NULL COMMENT "状态,1正常,0无效", `common_addr` int DEFAULT NULL COMMENT "是否默认地址 1是 1:是 0:否", `create_time` datetime NOT NULL COMMENT "创建时间", `update_time` datetime NOT NULL COMMENT "更新时间", PRIMARY KEY (`addr_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT COMMENT="用户地址 ";/*Data for the table `user_addr` */insert into `user_addr`(`addr_id`,`user_id`,`receiver_name`,`receiver_mobile`,`province`,`city`,`area`,`addr`,`post_code`,`status`,`common_addr`,`create_time`,`update_time`) values ("1","1","张三","13030303300","湖北","武汉","江夏区","光谷大道77号","421000",1,1,"2021-04-30 09:33:30","2021-04-28 09:33:37"),("2","1","小丽","13131313311","湖北","宜昌","夷陵区","巴拉巴拉","410000",1,0,"2021-04-30 09:34:41","2021-04-30 09:34:44"),("3","6","韩梅梅","13232323322","湖南","长沙","岳麓区","淅沥淅沥","430000",1,1,"2021-04-30 09:35:49","2021-04-30 09:35:53");/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
(2)、创建实体类
Users:
package com.xgsm.beans;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;import java.io.Serializable;import java.util.Date;@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublic class Users implements Serializable{ /** 主键id;用户id */ private Integer userId ; /** 用户名;用户名 */ private String username ; /** 密码;密码 */ private String password ; /** 昵称;昵称 */ private String nickname ; /** 真实姓名;真实姓名 */ private String realname ; /** 头像;头像 */ private String userImg ; /** 手机号;手机号 */ private String userMobile ; /** 邮箱地址;邮箱地址 */ private String userEmail ; /** 性别;M(男) or F(女) */ private char userSex ; /** 生日;生日 */ private Date userBirth ; /** 注册时间;创建时间 */ private Date userRegtime ; /** 更新时间;更新时间 */ private Date userModtime ;}
UserAddr:
package com.xgsm.beans;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;import java.util.Date;;/** * 用户地址; * @author : * @date : 2022-7-24 */@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublic class UserAddr{ /** 地址主键id */ private String addrId ; /** 用户ID */ private String userId ; /** 收件人姓名 */ private String receiverName ; /** 收件人手机号 */ private String receiverMobile ; /** 省份 */ private String province ; /** 城市 */ private String city ; /** 区县 */ private String area ; /** 详细地址 */ private String addr ; /** 邮编 */ private String postCode ; /** 状态;1正常,0无效 */ private Integer status ; /** 是否默认地址;1是 1:是 0:否 */ 0:否") private Integer commonAddr ; /** 创建时间 */ private Date createTime ; /** 更新时间 */ private Date updateTime ;}
(3)、创建dao接口
tkMapper已经完成了对单表的通用操作的封装,主要封装在Mapper接口和MysqlMapper接口中,因此我们如果要完成对单表的操作,只需要自定义dao接口继承这两个接口即可 。
package com.xgsm.dao;import com.xgsm.beans.Users;import tk.mybatis.mapper.common.Mapper;import tk.mybatis.mapper.common.MySqlMapper;public interface UserDao extends Mapper, MySqlMapper {}
(4)、测试接口
导入junit和springboot-test依赖
junit junit 4.13.2 org.springframework.boot spring-boot-starter-test
使用junit生成测试文件
package com.xgsm.dao;import com.xgsm.beans.Users;import com.xgsm.tkmapperdemo.TkmapperApplication;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.Date;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTest(classes = TkmapperApplication.class)public class UserDaoTest {@Autowired private UserDao userDao;@Testpublic void test(){ System.out.println(userDao); Users users = new Users(); users.setUsername("aaa"); users.setPassword("daddd"); users.setUserImg("njh.png"); users.setUserModtime(new Date()); users.setUserRegtime(new Date()); userDao.insert(users);}}
测试结果:
测试结果,回填的id为空,这里也是一个坑。注意:在进行主键回填的时候,实体类中id必须要用@Id指定一下,要不然映射的时候找不到id;
再次测试~
3.1.2修改
修改主键为"9’的用户信息。过程如下:创建一个users对象,对象的id是需要修改的用户的id,其他信息是需要更改后的信息。代码如下:
@Test public void updateTest(){ Users users = new Users(9,"aaaaa","323232","蛙哈哈","我是娃哈哈","wahaha.jpg",null,null,"男",new Date(),new Date(),new Date());// 修改主键为9的用户信息 int i =userDao.updateByPrimaryKey(users);// 断言 assertEquals(1,i);}
测试结果:
3.1.3删除:
根据id进行删除,代码如下:
@Test public void deleteTest(){ int i = userDao.deleteByPrimaryKey(9); assertEquals(1,i); }
3.2tkMapper常用方法之查询 3.2.1查询所有: @Test public void selectAllTest(){ List usersList = userDao.selectAll(); for (Users i :usersList ) { System.out.println(i); } }
测试结果:
3.2.2根据主键查询:@Test public void selectbyidTest(){ Users users = userDao.selectByPrimaryKey(8); System.out.println(users); }
测试结果:
3.2.3根据条件查询查询用户名为"aaaa’的用户
@Test public void select3Test(){//条件查询 Example em = new Example(Users.class);//可以封装任何条件,需要给一个泛型// 将条件封装到example的内部类 Example.Criteria criteria = em.createCriteria();// 条件的封装是面向对象的 criteria.andEqualTo("username","aaaa");// criteria.andEqualTo("password","1111"); List users = userDao.selectByExample(em);//符合条件的可能是个集合 System.out.println(users); }
测试结果:
3.3tkMapper关联查询实现查询userid为1的用户信息以及他的收货地址信息
(1)、创建UserAddrDao
package com.xgsm.dao;import com.xgsm.beans.UserAddr;import tk.mybatis.mapper.common.Mapper;import tk.mybatis.mapper.common.MySqlMapper;import tk.mybatis.mapper.common.SqlServerMapper;public interface UserAddrDao extends Mapper, MySqlMapper {}
(2)、实现
实现思路:在Users中添加private List
package com.xgsm.dao;import com.xgsm.beans.UserAddr;import com.xgsm.beans.Users;import com.xgsm.tkmapperdemo.TkmapperApplication;import org.apache.catalina.User;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import tk.mybatis.mapper.entity.Example;import java.util.Date;import java.util.List;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTest(classes = TkmapperApplication.class)public class UserDaoTest { @Autowired private UserDao userDao; @Autowired private UserAddrDao userAddrDao; @Test public void select4Test() {//条件查询 Example em = new Example(Users.class);//可以封装任何条件,需要给一个泛型// 将条件封装到example的内部类 Example.Criteria criteria = em.createCriteria();// 条件的封装是面向对象的 criteria.andEqualTo("userId", 1); List users = userDao.selectByExample(em);//符合条件的可能是个集合// 得到userid后,二次查询 Example example = new Example(UserAddr.class); Example.Criteria criteriaAddr = example.createCriteria(); criteria.andEqualTo("userId", users.get(0).getUserId()); List userAddrList = userAddrDao.selectByExample(example);// 将查询到的集合给users users.get(0).setUserAddrList(userAddrList); for (Users i:users ) { System.out.println(i); }// System.out.println(users); }}
输出结果如下:
四、tkMapper逆向工程逆向工程,就是根据创建好的数据表,生成实体类、dao、映射文件
4.1添加逆向工程依赖此依赖是一个mybatis的maven插件
org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 mysql mysql-connector-java 8.0.29 tk.mybatis mapper 4.1.5
4.2逆向工程配置 在resources目录下创建generatorConfig.xml,在里面定义了需要生成的表,以及生成文件的路径等信息~
在此之前要先声明一个"GeneralDao’
package com.xgsm.general;import org.springframework.stereotype.Repository;import tk.mybatis.mapper.common.Mapper;import tk.mybatis.mapper.common.MySqlMapper;@Repositorypublic interface GeneralDao extends MySqlMapper, Mapper {}
将"配置文件’设置到maven插件中
org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 ${basedir}/src/main/resources/generatorConfig.xml mysql mysql-connector-java 8.0.29 tk.mybatis mapper 4.1.5
双击mybatis-generator:generate执行逆向生成~
关键词:
Copyright 2000-2021 by www.jiaoyu.nfhot.net all rights reserved
邮箱 : 954 29 18 82 @qq.com