tkMapper插件的详细讲解

  • 一、tkMapper简介
      • tkMapper就是一个MyBatis插件,是在MyBatis的基础上提供的开发工具,可以让开发变得简单,提高开发效率。
    • 作用:
      • 1、提供了针对单表通用的数据库操作方法
      • 2、逆向工程(根据数据表生成实体类、dao接口、映射文件)
  • 二、tkMapper整合
    • 1、基于SpringBoot完成MyBatis的整合
    • 2、整合tkMapper
      • 2.1、添加tkMapper的依赖
      • 2.2、修改启动类的@MapperScan注解的包为***tk.mybatis.spring.annotation.MapperScan***
  • 三、tkMapper的使用
    • 1、创建数据表
    • 2、创建实体类
    • 3、创建DAO接口
    • 4、测试
  • 四、tkMapper提供的常用方法
  • 五、如何使用tkMapper进行关联查询
    • 所有的关联查询都可以通过多个单表操作实现
    • 也可自定义连接查询,在DAO接口中自定义方法,创建Mapper文件
  • 六、逆向工程
    • 1、添加逆向工程依赖
    • 2、逆向工程配置
    • 3、将配置文件设置到逆向工程的maven插件

一、tkMapper简介

tkMapper就是一个MyBatis插件,是在MyBatis的基础上提供的开发工具,可以让开发变得简单,提高开发效率。

作用:

1、提供了针对单表通用的数据库操作方法

2、逆向工程(根据数据表生成实体类、dao接口、映射文件)


二、tkMapper整合

1、基于SpringBoot完成MyBatis的整合

2、整合tkMapper

2.1、添加tkMapper的依赖

       <dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency>

2.2、修改启动类的@MapperScan注解的包为tk.mybatis.spring.annotation.MapperScan

package com.qfedu.tkmapperdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;@SpringBootApplication
@MapperScan("com.qfedu.tkmapperdemo.dao")
public class TkmapperDemoApplication {public static void main(String[] args) {SpringApplication.run(TkmapperDemoApplication.class, args);}}

三、tkMapper的使用

1、创建数据表

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`user_id` int(64) NOT NULL AUTO_INCREMENT COMMENT '主键id;用户id',`username` varchar(255) NOT NULL COMMENT '用户名;用户名',`password` varchar(64) NOT NULL COMMENT '密码;密码',`nickname` varchar(255) DEFAULT NULL COMMENT '昵称;昵称',`realname` varchar(90) DEFAULT NULL COMMENT '真实姓名;真实姓名',`user_img` varchar(1024) NOT NULL COMMENT '头像;头像',`user_mobile` varchar(255) DEFAULT NULL COMMENT '手机号;手机号',`user_email` varchar(255) DEFAULT NULL COMMENT '邮箱地址;邮箱地址',`user_sex` varchar(1) DEFAULT NULL COMMENT '性别;M(男) or F(女)',`user_birth` datetime DEFAULT NULL COMMENT '生日;生日',`user_regtime` datetime NOT NULL COMMENT '注册时间;创建时间',`user_modtime` datetime NOT NULL COMMENT '更新时间;更新时间',PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户';

2、创建实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private int userId;private String username;private String password;private String nickname;private String realname;private String userImg;private String userMobile;private String userEmail;private String userSex;private Date userBirth;private Date userRegtime;private Date userModtime;
}

3、创建DAO接口

tkMapper已经完成了对单表的通用操作的封装,封装在Mapper接口和MySqlMapper接口;因此如果我们要完成对单表的操作,只需自定义DAO接口继承Mapper接口和MySqlMapper接口。

public interface UserDao extends Mapper<User>, MySqlMapper<User> {}

4、测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TkmapperDemoApplication.class)
public class UserDaoTest {@Autowiredprivate UserDao userDao;@Testpublic void test(){User user = new User();user.setUsername("aaaa");user.setPassword("1111");user.setUserImg("img/default.png");user.setUserRegtime(new Date());user.setUserModtime(new Date());int i = userDao.insert(user);System.out.println(i);}}

四、tkMapper提供的常用方法

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TkmapperDemoApplication.class)
public class CategoryDAOTest {@Autowiredprivate CategoryDAO categoryDAO;@Testpublic void testInsert() {Category category = new Category(0, "测试类别2", 1, 0, "0.2png", "haha", "aaa.jpg", "black");//int i = categoryDAO.insert(category);int i = categoryDAO.insertUseGeneratedKeys(category);System.out.println(category.getCategoryId());assertEquals(1, i);}@Testpublic void testUpdate() {Category category = new Category(47, "测试类别3", 1, 0, "0.3png", "haha3", "aaa.jpg", "black");int i = categoryDAO.updateByPrimaryKey(category);//根据自定义条件修改,Example example就是封装条件的//categoryDAO.updateByExample(Example example);assertEquals(1, i);}@Testpublic void testDelete(){int i = categoryDAO.deleteByPrimaryKey(47);//根据条件删除//categoryDAO.deleteByExample(Example example);assertEquals(1,i);}@Testpublic void testSelect1(){//查询所有List<Category> categories = categoryDAO.selectAll();for(Category category : categories){System.out.println(category);}}@Testpublic void testSelect2(){//根据主键查询Category category = categoryDAO.selectByPrimaryKey(46);System.out.println(category);}@Testpublic void testSelect3(){//条件查询//1.创建一个Example封装  类别Category查询条件Example example = new Example(Category.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("categoryLevel",1);criteria.orLike("categoryName","%干%");List<Category> categories = categoryDAO.selectByExample(example);for (Category category : categories){System.out.println(category);}}@Testpublic void testSelect4(){//分页查询int pageNum = 2;int pageSize = 10;int start = (pageNum-1)*pageSize;RowBounds rowBounds = new RowBounds(start, pageSize);List<Category> categories = categoryDAO.selectByRowBounds(new Category(), rowBounds);for (Category category : categories){System.out.println(category);}//查询总记录数int i = categoryDAO.selectCount(new Category());System.out.println(i);}@Testpublic void testSelect5(){//带条件分页查询//条件Example example = new Example(Category.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("categoryLevel",1);//分页int pageNum = 2;int pageSize = 6;int start = (pageNum-1)*pageSize;RowBounds rowBounds = new RowBounds(start, pageSize);List<Category> categories = categoryDAO.selectByExampleAndRowBounds(example, rowBounds);for (Category category:categories){System.out.println(category);}//查询满足条件的总记录数int i = categoryDAO.selectCountByExample(example);System.out.println(i);}
}

五、如何使用tkMapper进行关联查询

所有的关联查询都可以通过多个单表操作实现

    @Testpublic void testSelect(){//查询用户的同时查询订单Example example = new Example(User.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("username","zhangsan");//根据用户名查询用户//1.先根据用户名查询用户信息List<User> users = userDao.selectByExample(example);User user = users.get(0);//2.再根据用户id到订单表查询订单Example example1 = new Example(Orders.class);Example.Criteria criteria1 = example1.createCriteria();criteria1.andEqualTo("userId",user.getUserId());List<Orders> ordersList = orderDAO.selectByExample(example1);//3.将查询到订单集合设置到useruser.setOrdersList(ordersList);System.out.println(user);}

也可自定义连接查询,在DAO接口中自定义方法,创建Mapper文件

六、逆向工程

逆向工程,根据创建好的数据表,生成实体类、DAO、映射文件

1、添加逆向工程依赖

此依赖是一个mybatis的maven插件

            <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>3.4.4</version></dependency></dependencies></plugin>

2、逆向工程配置

  • 在resources/generator目录下创建generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--引入数据库连接配置--><context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><property name="javaFileEncoding" value="UTF-8"/><!--配置 GeneralDAO--><plugin type="tk.mybatis.mapper.generator.MapperPlugin"><property name="mappers" value="com.qfedu.tkmapperdemo.general.GeneralDAO"/></plugin><!--配置数据库连接--><jdbcConnectiondriverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/fmmall"userId="root"password="mysql"></jdbcConnection><!--配置实体类存放路径--><javaModelGenerator targetPackage="com.qfedu.tkmapperdemo.beans" targetProject="src/main/java"/><!--配置 XML 存放路径--><sqlMapGenerator targetPackage="/" targetProject="src/main/resources/mappers"/><!--配置 DAO 存放路径--><javaClientGenerator targetPackage="com.qfedu.tkmapperdemo.dao" targetProject="src/main/java" type="XMLMAPPER"/><table tableName="%"><!--mysql 配置--><!--<generatedKey column="id" sqlStatement="Mysql" identity="true"/>--><!--oracle 配置--><!--<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>--></table></context>
</generatorConfiguration>

3、将配置文件设置到逆向工程的maven插件

tkMapper插件的详细讲解相关推荐

  1. 详细讲解3DMAX导出插件-tiamo

    转自:详细讲解3DMAX导出插件-tiamo 3dmax的导出插件是用来把做好的3d模型导出成自己引擎需要的格式的一个dll,它由3dmax加载调用.具体怎样去写一个插件,小T不多说,在3dmax的s ...

  2. c4d流体插件_【C4D】流体插件详细讲解2

    教程内容会持续更新... 请关注每篇文章的视频内容 ###-----------------+++-------------------### RF流体插件 链接:https://pan.baidu. ...

  3. vue-cli2、vue-cli3脚手架详细讲解

    转载自 vue-cli2.vue-cli3脚手架详细讲解 前言: vue脚手架指的是vue-cli它是vue官方提供的一个快速构建单页面(SPA)环境配置的工具,cli 就是(command-line ...

  4. blog微服务架构代码_Spring Cloud微服务架构代码结构详细讲解

    上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity ...

  5. mybatis-plus超详细讲解

    (6条消息) mybatis-plus超详细讲解_zdsg45的博客-CSDN博客_mybatis-plushttps://blog.csdn.net/zdsg45/article/details/1 ...

  6. react的超详细讲解

    create-react-app 项目目录 在HTML中使用react 1 2 3基础 React的注意事项 模拟的React 和 render React组件 函数组件 类组件 React 的数据源 ...

  7. 2.5万字详细讲解个人网站的开发过程和项目的部署

    目录 简介 1 技术介绍 1.1 个人博客功能 1.2 技术组合 1.3 工具与坏境 2 项目的环境配置 2.1 vue的环境配置 2.2 解决跨域问题 2.3 关于图标的获取 3 前端技术 3.1 ...

  8. [转帖]详细讲解六大QQ病毒的特征以及清除方法

    [转帖]详细讲解六大QQ病毒的特征以及清除方法  一."QQ尾巴"病毒 病毒主要特征 这种病毒并不是利用QQ本身的漏洞 进行传播.它其实是在某个网站首页上嵌入了一段恶意代码,利用I ...

  9. form表单校验插件(含详细注解)

    说到表单校验,第一个想起来的肯定是jquery的validate.js,该插件的确是很强大,用在项目中也很健壮,但是为什么我选择重新自己封装一个插件呢? 为什么要自己封装表单验证插件: 1.因为项目中 ...

最新文章

  1. 【必懂概念】一文详解什么是空洞卷积?
  2. 【 FPGA 】UltraFast设计方法学:理解实现策略
  3. linux php-fpm启动失败,linux运行php-fpm遇到问题
  4. BLE-NRF51822教程11-手机动态修改设备名
  5. python笔记1:字符串处理函数
  6. 【常用模板】 01背包
  7. 爬虫项目——xpath练手(1)
  8. 域名/网站名/URL
  9. java 读取 properties 配置文件的几种方式
  10. 怎么用计算机算弧度制,怎么设置计算器 把度数转化为弧度
  11. 爱发php企业发卡网源码_企业级发卡平台源码,界面友好,支付通道齐全,运营级发卡平台源码...
  12. c语言音乐播放器的代码大全,C语言音乐播放器实例代码
  13. 【自然语言处理】【对比学习】搞nlp还不懂对比学习,不会吧?快来了解下SimCLR
  14. UI设计从业者,怎样才能成为月薪过万的UI设计师?
  15. Kubernetes部署
  16. linux audacity,linux下编译安装音频处理audacity-2.0.3教程
  17. oVirt管理端高可用模式搭建(hosted-engine)
  18. Linux入门:基本操作
  19. Reactive Extensions (Rx) 入门(5) —— Rx的事件编程③
  20. 国产银河麒麟操作系统下载地址收集--【更新】2023.02

热门文章

  1. PHP isset()与empty()的区别
  2. SparkML -- LightGBM On Spark
  3. HAKE笔记:Learning Hierarchy-Aware Knowledge Graph Embeddings for Link Prediction
  4. uinavgationcontroller
  5. Android实现PDF格式文件预览
  6. 记一次实验报告:基于Linux的中小型企业网络架构
  7. 基于 STM32对音频数据的 Flash 读取与 DAC 播放
  8. Windows7无法显示.png、.jpg图片缩略图的问题
  9. 2011正月初3 震中映秀
  10. 关于n%k=n-(n/k)*K