tkMapper的使用-超详细_世界热点评

来源:个人图书馆-卓精 时间:2023-06-26 16:33:13

目录

一、快速认识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 userAddrList。在实现中,先对userID为1 的用户信息进行查询,然后拿到用户信息后,在用查询到的userid作为查询条件,查询userid为1的用户收货地址信息即可~代码如下:

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

备案号:粤ICP备18025786号-52

邮箱 : 954 29 18 82 @qq.com