一个简单的例子学会mybatis-generator+tk.mybatis插件 实现父子表关系查询
发布日期:2021-06-30 22:58:42 浏览次数:2 分类:技术文章

本文共 9003 字,大约阅读时间需要 30 分钟。

项目环境:

开发环境:IntelliJ IDEA 2019.3.1 ,JDK1.8 ,MySQL: 5.6.47

采用远程数据库连接:使用ailiyun ESC CentOS 7.0

项目技术:

学会使用mybatis-generator自动部署代码

学会使用tk.mybatis插件进行数据库的操作
学会实现父子表管子查询

项目资源连接:

项目说明

 本项目采用mybatis-generator的自动生成插件和Tk插件结合,实现对父子表的联合查询,使返回结果包括父表信息和它的子表每个子数据信息。

在这里插入图片描述

项目准备

创建数据库schooldb

 使用Navicat创建数据库schooldb,并运行下面的sql文件

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for tbl_student-- ----------------------------DROP TABLE IF EXISTS `tbl_student`;CREATE TABLE `tbl_student`  (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `teacher_id` bigint(20) NULL DEFAULT NULL,  `name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '学生姓名',  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;-- ------------------------------ Records of tbl_student-- ----------------------------INSERT INTO `tbl_student` VALUES (1, 1, '小明', 15);INSERT INTO `tbl_student` VALUES (2, 1, '小李', 15);INSERT INTO `tbl_student` VALUES (3, 1, '小红', 14);INSERT INTO `tbl_student` VALUES (4, 2, '小李', 14);INSERT INTO `tbl_student` VALUES (5, 2, '王二', 15);INSERT INTO `tbl_student` VALUES (6, 2, '张三', 13);-- ------------------------------ Table structure for tbl_teacher-- ----------------------------DROP TABLE IF EXISTS `tbl_teacher`;CREATE TABLE `tbl_teacher`  (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '老师姓名',  `age` int(11) NULL DEFAULT NULL COMMENT '老师年龄',  `phone` int(11) NULL DEFAULT NULL COMMENT '手机号',  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;-- ------------------------------ Records of tbl_teacher-- ----------------------------INSERT INTO `tbl_teacher` VALUES (1, '王老师', 45, 1596369856);INSERT INTO `tbl_teacher` VALUES (2, '李老师', 32, 1358948956);SET FOREIGN_KEY_CHECKS = 1;

项目结构

在这里插入图片描述

一、依赖与配置

依赖

在这里插入图片描述

pom.xml

tk.mybatis
mapper-spring-boot-starter
2.0.4
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.1
com.alibaba
druid-spring-boot-starter
1.1.10
mysql
mysql-connector-java
runtime
5.1.6
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
mysql
mysql-connector-java
runtime
5.1.6
tk.mybatis
mapper
4.1.5
${basedir}/src/main/resources/mybatis-generator.xml
true
true

配置application.properties

#远程数据库连接spring.datasource.url=jdbc:mysql://121.40.83.80:3306/schooldb?characterEncoding=UTF-8&useSSL=false#数据库用户名spring.datasource.username=alvin#数据库密码spring.datasource.password=123456#数据源类型spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcemybatis.mapper-locations=classpath:/mapper/*.xml

配置Tk<Mapper>

 在utils包下 创建TkMapper.java类

/** * 继承 * @param 
*/public interface TkMapper
extends Mapper
, MySqlMapper
{
//特别注意,该接口不能被扫描到,否则会出错}

配置mybatis-generator.xml

配置启动类

 这里需要在启动类加入一个注解@MapperScan(basePackages = "com.alvin.mybatis.mapper"),注意它的引包是import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication//com.alvin.mybatis.mapper是我们扫描.mapper的地址@MapperScan(basePackages = "com.alvin.mybatis.mapper")public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args); }}

配置data sources

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、自动生成

在这里插入图片描述

在这里插入图片描述
自动生成结果如下
在这里插入图片描述

三、实现父子表查询

数据层

  • StudentDto.java
public class StudentDto {
private Long id; private String name; private Integer age; private Long teacherId; //省略setter/getter方法}
  • TeacherDto.java
public class TeacherDto {
private Long id; private String name; private Integer age; private Integer phone; private List
dtoList; //省略setter/getter方法}

控制层

  • TestController.java
@Controllerpublic class TestController {
@Autowired TestService testService; @ResponseBody @GetMapping("/test") public List
search( @RequestParam Long id ){
return testService.search(id); }}

业务逻辑层

  • TestService.java
@Servicepublic class TestService {
@Autowired StudentMapper studentMapper; @Autowired TeacherMapper teacherMapper; public List
search(Long id){
List
repList = new ArrayList<>(); TeacherDto teacherDto = new TeacherDto(); //查询该老师的所有信息 Teacher teacher = teacherMapper.selectByPrimaryKey(id); BeanUtils.copyProperties(teacher,teacherDto); repList.add(teacherDto); //查询该老师的所有学生 Example example = new Example(Student.class); example.createCriteria().andEqualTo("teacherId",id); List
students = studentMapper.selectByExample(example); //查询每个学生的个人信息 List
studentDtoList = new ArrayList<>(); for(Student student : students){
StudentDto studentDto = new StudentDto(); BeanUtils.copyProperties(student,studentDto); studentDtoList.add(studentDto); teacherDto.setDtoList(studentDtoList); } return repList; }}

也可以根据java8的特性使用stream代替for迭代

@Servicepublic class TestService {
@Autowired StudentMapper studentMapper; @Autowired TeacherMapper teacherMapper; public List
search(Long id){
List
repList = new ArrayList<>(); TeacherDto teacherDto = new TeacherDto(); //查询该老师的所有信息 Teacher teacher = teacherMapper.selectByPrimaryKey(id); BeanUtils.copyProperties(teacher,teacherDto); repList.add(teacherDto); //查询该老师的所有学生 Example example = new Example(Student.class); example.createCriteria().andEqualTo("teacherId",id); List
students = studentMapper.selectByExample(example); //查询每个学生的个人信息 List
list = students.stream().map(student -> {
StudentDto studentDto = new StudentDto(); BeanUtils.copyProperties(student, studentDto); return studentDto; }).collect(Collectors.toList()); teacherDto.setDtoList(list); return repList;}

四、Postman调用

在这里插入图片描述

转载地址:https://lukeyalvin.blog.csdn.net/article/details/104222834 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:自动注入@InjectField的使用
下一篇:适用于Java Web开发者的十大必要的框架和库

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月29日 19时44分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章