一个简单的例子学会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 ListdtoList; //省略setter/getter方法}
控制层
- TestController.java
@Controllerpublic class TestController { @Autowired TestService testService; @ResponseBody @GetMapping("/test") public Listsearch( @RequestParam Long id ){ return testService.search(id); }}
业务逻辑层
- TestService.java
@Servicepublic class TestService { @Autowired StudentMapper studentMapper; @Autowired TeacherMapper teacherMapper; public Listsearch(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 Listsearch(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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月29日 19时44分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021.5.22 Jquery
2019-04-30
2021.5.25 JSON
2019-04-30
2021.5.25 Flex
2019-04-30
2021.5.28 AJAX
2019-04-30
正则表达式
2019-04-30
过滤器Filter
2019-04-30
2021.6.1 Array补充
2019-04-30
【收藏】Markdown笔记
2019-04-30
离散数学-图论
2019-04-30
啊沙发沙发
2019-04-30
2021-07-02
2019-04-30
「收藏」HTML笔记-持续更新中
2019-04-30
数据结构期末复习------排序汇总
2019-04-30
数据结构期末复习------查找汇总
2019-04-30
Vue学习(10)————————编程式导航,地址栏的#号去掉,路由的嵌套
2019-04-30
SpringBoot内置Tomcat配置参数
2019-04-30
Nginx基本知识
2019-04-30
微服务公用实体类andLombok
2019-04-30
小问题
2019-04-30
Spring Security之旅————————————基本介绍安装(1)
2019-04-30