tkMapper插件的详细讲解
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插件的详细讲解相关推荐
- 详细讲解3DMAX导出插件-tiamo
转自:详细讲解3DMAX导出插件-tiamo 3dmax的导出插件是用来把做好的3d模型导出成自己引擎需要的格式的一个dll,它由3dmax加载调用.具体怎样去写一个插件,小T不多说,在3dmax的s ...
- c4d流体插件_【C4D】流体插件详细讲解2
教程内容会持续更新... 请关注每篇文章的视频内容 ###-----------------+++-------------------### RF流体插件 链接:https://pan.baidu. ...
- vue-cli2、vue-cli3脚手架详细讲解
转载自 vue-cli2.vue-cli3脚手架详细讲解 前言: vue脚手架指的是vue-cli它是vue官方提供的一个快速构建单页面(SPA)环境配置的工具,cli 就是(command-line ...
- blog微服务架构代码_Spring Cloud微服务架构代码结构详细讲解
上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity ...
- mybatis-plus超详细讲解
(6条消息) mybatis-plus超详细讲解_zdsg45的博客-CSDN博客_mybatis-plushttps://blog.csdn.net/zdsg45/article/details/1 ...
- react的超详细讲解
create-react-app 项目目录 在HTML中使用react 1 2 3基础 React的注意事项 模拟的React 和 render React组件 函数组件 类组件 React 的数据源 ...
- 2.5万字详细讲解个人网站的开发过程和项目的部署
目录 简介 1 技术介绍 1.1 个人博客功能 1.2 技术组合 1.3 工具与坏境 2 项目的环境配置 2.1 vue的环境配置 2.2 解决跨域问题 2.3 关于图标的获取 3 前端技术 3.1 ...
- [转帖]详细讲解六大QQ病毒的特征以及清除方法
[转帖]详细讲解六大QQ病毒的特征以及清除方法 一."QQ尾巴"病毒 病毒主要特征 这种病毒并不是利用QQ本身的漏洞 进行传播.它其实是在某个网站首页上嵌入了一段恶意代码,利用I ...
- form表单校验插件(含详细注解)
说到表单校验,第一个想起来的肯定是jquery的validate.js,该插件的确是很强大,用在项目中也很健壮,但是为什么我选择重新自己封装一个插件呢? 为什么要自己封装表单验证插件: 1.因为项目中 ...
最新文章
- 【必懂概念】一文详解什么是空洞卷积?
- 【 FPGA 】UltraFast设计方法学:理解实现策略
- linux php-fpm启动失败,linux运行php-fpm遇到问题
- BLE-NRF51822教程11-手机动态修改设备名
- python笔记1:字符串处理函数
- 【常用模板】 01背包
- 爬虫项目——xpath练手(1)
- 域名/网站名/URL
- java 读取 properties 配置文件的几种方式
- 怎么用计算机算弧度制,怎么设置计算器 把度数转化为弧度
- 爱发php企业发卡网源码_企业级发卡平台源码,界面友好,支付通道齐全,运营级发卡平台源码...
- c语言音乐播放器的代码大全,C语言音乐播放器实例代码
- 【自然语言处理】【对比学习】搞nlp还不懂对比学习,不会吧?快来了解下SimCLR
- UI设计从业者,怎样才能成为月薪过万的UI设计师?
- Kubernetes部署
- linux audacity,linux下编译安装音频处理audacity-2.0.3教程
- oVirt管理端高可用模式搭建(hosted-engine)
- Linux入门:基本操作
- Reactive Extensions (Rx) 入门(5) —— Rx的事件编程③
- 国产银河麒麟操作系统下载地址收集--【更新】2023.02
热门文章
- PHP isset()与empty()的区别
- SparkML -- LightGBM On Spark
- HAKE笔记:Learning Hierarchy-Aware Knowledge Graph Embeddings for Link Prediction
- uinavgationcontroller
- Android实现PDF格式文件预览
- 记一次实验报告:基于Linux的中小型企业网络架构
- 基于 STM32对音频数据的 Flash 读取与 DAC 播放
- Windows7无法显示.png、.jpg图片缩略图的问题
- 2011正月初3 震中映秀
- 关于n%k=n-(n/k)*K