YangeIT大约 15 分钟中州养老AIIOT版本MysqlApifoxServletHTTPGETPOST

1. SpringBoot简介

今日目标

  • Spring核心概念
  • SpringBoot常见注解
  • SpringBoot常见起步依赖
  • SpringBoot集成MybatisPlus
  • MybatisX插件
  • MyBatisPlus分页插件

1.1. Spring核心概念 🍐 🍐

Spring核心概念

之前我们在编写代码时,需要什么对象,就直接new一个就可以了。 这种做法呢,层与层之间代码就耦合了,费时间且不方便,最好是拿来就用!! 有点像 饭来张口衣来伸手!那么得这么做:

1). 不能使用new对象

2). 应用程序中用到这个对象,就直接从容器中获取,不需要创建

我们想要实现上述解耦操作,就涉及到Spring中的两个核心概念:

  • 控制反转: Inversion Of Control,简称IOC

对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。 对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器

  • 依赖注入: Dependency Injection,简称DI

容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

程序运行时需要某个资源,此时容器就为其提供这个资源。

IOC容器中创建、管理的对象,称之为:bean对象

image
image

总结

课堂作业

  1. 截图下图,说说什么IOC,以及IOC有什么好处?🎤
看看这张图,联想一下这样的好处
看看这张图,联想一下这样的好处

1.2. SpringBoot常见的注解

SpringBoot常见的注解

一、核心注解

@SpringBootApplication

组合注解,包含@Configuration、@EnableAutoConfiguration和@ComponentScan

主要用在启动类上,表明当前类是SpringBoot应用的启动类

@RestController

@Controller + @ResponseBody的组合 表示该类是控制器且所有方法返回JSON响应

二、依赖注入相关

@Autowired

自动装配依赖对象,默认按类型匹配,后面实训中使用

@Component 通用组件注解

衍生注解:@Service

三、Web相关注解

  • @RequestMapping 映射HTTP请求路径,衍生简化注解:@GetMapping, @PostMapping等
  • @PathVariable 获取URL路径中的变量值
  • @RequestParam 获取请求参数
  • @RequestBody 将HTTP请求体转换为Java对象

总结

课堂作业

image
image
image
image
image
image

1.3. SpringBoot常见的起步依赖

起步依赖

起步依赖是SpringBoot中一个重要的概念,它是一个依赖集合,用于简化构建过程。它包含了一组常用的依赖,这些依赖可以自动配置,以帮助开发者快速构建应用程序。

image
image

常见的起步依赖有:

  • spring-boot-starter-web:用于构建Web应用程序,包括Spring MVC和Tomcat。
  • spring-boot-starter-test:用于构建测试应用程序,包括JUnit和Mockito。
  • mybatis-plus-boot-starter:用于简化Mybatis的配置,包括Mybatis和Mybatis-Plus的注解。

总结

课堂作业

  1. 起步依赖有什么作用?特点是什么?🎤

2. MybatisPlus框架 🍐 ✏️❤️

2.1 SpringBoot下集成MybatisPlus框架 🍐 ✏️❤️

SpringBoot下集成MybatisPlus框架

MyBatis 是一个持久层框架,用于简化 Java 应用程序与关系型数据库的交互。它通过将 SQL 语句与 Java 代码进行映射,提供了一种方便且灵活的方式来访问和操作数据库

image
image

中文网open in new window

接下来可以进行MybatisPlus初体验了!!👇

在体验之前,需要做如下准备工作:

  1. 项目工程创建完成后,在pom.xml文件中的dependencies标签内,导入MybatisPlus的起步依赖和MySQL驱动依赖
步骤图解
步骤图解
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>
<!-- mybatis plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.13</version>
</dependency>




注意:一定要安装MyBatisX插件

2.Idea链接Mysql

按照下图,连接数据库:👇

image
image
  1. 创建mybatis数据库,设置编码为utf-8mb4,创建user表,并导入一下假数据
-- 创建数据库 mybatis
create database if not exists mybatis;
-- 删除原有的user表
DROP TABLE IF EXISTS `user`;
-- 创建user表
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL UNIQUE,
  `password` varchar(32) NOT NULL DEFAULT '12345678',
  `age` int(10) NOT NULL,
  `hobby` varchar(50) DEFAULT NULL,
  `description` varchar(200) NOT NULL,
  `department` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('8', '赵灵儿', '12345678', '20', '阵法、法术修炼', '纯真善良的女子,拥有强大的阴阳之力', '阴阳家');
INSERT INTO `user` VALUES ('9', '楚留香', '12345678', '32', '剑术、侠义行侠', '风流倜傥的豪客,以智慧和剑术征服江湖', '江湖人士');
INSERT INTO `user` VALUES ('10', '白浅', '12345678', '26', '宫廷舞蹈、仙法修炼', '美丽高贵的仙子,守护爱与正义的力量', '青丘派');
INSERT INTO `user` VALUES ('11', '苏明玉', '12345678', '29', '医术、家族事务', '聪明伶俐的女医生,心系家族兴衰', '苏家');
INSERT INTO `user` VALUES ('13', '李逍遥', '12345678', '28', '剑术、侠义行侠', '潇洒自如的剑客,为爱与正义奋斗', '天墉城');
INSERT INTO `user` VALUES ('14', '陆展元', '12345678', '31', '龙族法术、海洋探险', '勇敢善良的龙族王子,探索海洋奥秘', '东海龙宫');
INSERT INTO `user` VALUES ('18', '萧炎', '12345678', '25', '功夫、修炼', '机缘巧合下拥有强大火焰之力的少年', '草庙村');
INSERT INTO `user` VALUES ('19', '陆九淳', '12345678', '29', '家族事务、剑术修炼', '家族责任重于一切的江湖少年', '陆家');
INSERT INTO `user` VALUES ('20', '韩立', '12345678', '22', '灵力修炼、阵法研究', '机智聪明的年轻修士,掌握神奇的法术', '韩家');
INSERT INTO `user` VALUES ('21', '顾惜朝', '12345678', '28', '法术修炼、守护门派', '心地善良的女子,为守护门派而战', '古玄门');
INSERT INTO `user` VALUES ('22', '九霄真人', '12345678', '35', '仙法修炼、教导弟子', '威严正直的仙人,指导后辈修仙道路', '蓝霞宫');
INSERT INTO `user` VALUES ('23', '姬昌', '12345678', '33', '阴阳术、仙法修炼', '智勇双全的江湖人物,掌握阴阳之力', '太阴派');
INSERT INTO `user` VALUES ('24', '西门吹雪', '12345678', '30', '剑术、侠义行侠', '风流倜傥的剑客,执着追求剑道境界', '独孤家');
INSERT INTO `user` VALUES ('25', '夏冰', '12345678', '26', '魔法修炼、冰雪之力', '美丽神秘的女子,掌握冰雪之力', '幻冥宗');
INSERT INTO `user` VALUES ('26', '杨影枫', '12345678', '27', '暗器、侠义行侠', '冷酷无情的刺客,为正义而战', '影家');
INSERT INTO `user` VALUES ('27', '白素素', '12345678', '24', '文学创作、人界事务', '善良纯真的女子,用文字记录人间百态', '人界');
INSERT INTO `user` VALUES ('28', '独孤剑', '12345678', '32', '剑术、侠义行侠', '心系家族的剑客,剑法高超', '独孤家');
INSERT INTO `user` VALUES ('29', '楚九霄', '12345678', '28', '阵法、家族事务', '机智聪明的年轻人,心系家族荣耀', '楚家');
INSERT INTO `user` VALUES ('30', '谢晓峰', '12345678', '31', '拳脚功夫、江湖恩怨', '正直勇敢的江湖豪杰,忠于兄弟情义', '铁血帮');
INSERT INTO `user` VALUES ('31', '叶孤城', '12345678', '29', '剑术、侠义行侠', '冷酷无情的剑客,追求剑道极致', '武境城');
INSERT INTO `user` VALUES ('32', '李逸风', '12345678', '25', '修炼、探险', '热血青年,勇往直前探索未知世界', '蓝枫大陆');
INSERT INTO `user` VALUES ('33', '萧霜', '12345678', '27', '冰雪法术、守护宗门', '冷艳高傲的女子,守护冰霜宗的利益', '冰霜宗');
INSERT INTO `user` VALUES ('34', '楚玉峰', '12345678', '30', '家族事务、阵法修炼', '机智聪明的年轻人,家族责任重于一切', '楚家');
INSERT INTO `user` VALUES ('35', '陆雪琪', '12345678', '24', '法术、修行', '美丽冷傲的仙子,修炼法术追求修行境界', '青云门');
INSERT INTO `user` VALUES ('36', '明月心', '12345678', '26', '琴音、舞蹈', '温柔善良的女子,以音乐传递爱与希望', '云裳派');
INSERT INTO `user` VALUES ('37', '程灵素', '12345678', '27', '仙法修炼、仙岛事务', '温柔善良的仙子,守护仙岛和平', '蓬莱仙岛');
INSERT INTO `user` VALUES ('38', '韩非', '12345678', '23', '学术研究、阵法修炼', '聪明睿智的年轻人,研究阵法和学术', '韩家');
INSERT INTO `user` VALUES ('40', '戚芳', '12345678', '23', '武功、家族事务', '机智勇敢的女子,为家族荣誉而战', '戚家');
INSERT INTO `user` VALUES ('41', '楚轩辕', '12345678', '28', '家族事务、剑术修炼', '家族责任重于一切的剑客', '楚家');
INSERT INTO `user` VALUES ('42', '秦王', '12345678', '35', '政务、战争', '智勇双全的帝王,统一六国的志向', '秦国');
INSERT INTO `user` VALUES ('43', '李寻欢', '12345678', '30', '剑术、侠义行侠', '聪明机智的江湖人物,正义心十足', '大宛城');
INSERT INTO `user` VALUES ('44', '唐三藏', '12345678', '45', '佛法修行、西行取经', '慈悲心肠的高僧,带领徒弟西天取经', '大唐');
INSERT INTO `user` VALUES ('45', '吴青烟', '12345678', '26', '法术修行、江湖事务', '冷艳高傲的女子,修炼法术追求江湖大业', '青云门');

  1. 根据数据库表结构,创建User类,属性和数据库user表的字段对应
image
image
  1. 在application.yml配置文件下(如果没有在resources下创建即可),配置数据库信息(驱动、链接、用户名、密码)

配置文件后缀名.yaml .yml都可以

# 顶格写
spring:
  #数据库连接信息
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: 1234
#Mybatisplus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-aliases-package: cn.yangeit.pojo
  global-config:
    db-config:
      logic-delete-field: isDeleted
      id-type: auto
  1. 创建UserMapper接口继承BaseMapper接口,添加@Mapper注解
@Mapper
public interface UserMapper extends BaseMapper<User> {

}

 




6. 在resources下创建mapper文件夹,创建UserMapper.xml文件(内容如下),配置文件后缀名.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.yangeit.UserMapper">

</mapper>

注意namespace的值要和UserMapper接口的全类名一致 image

需求1:查询id为30的用户,返回浏览器可以先自己分析

image
image

需求2:查询名字叫 陆雪琪的用户,返回浏览器

image
image

需求3:爱好中含有 "法术" 的用户,返回浏览器

image
image

需求4:删除用户为 韩立的用户,返回 ok 字符串

image
image

需求5:将id为36的用户,hobby修改为 听焱哥上课,返回 ok 字符串

image
image

需求6:插入一个用户,姓名为 "楚云飞",年龄为 20,爱好为 "剑术",描述为:"潇洒的剑客,剑法高超",门派为 "楚家", 返回操作结果给浏览器

image
image

总结

课堂作业

  1. 如果你完成上面的6个需求,那么你掌握了SpringBoot集成MybatisPlus基本的操作 🎤
  2. 接下来依葫芦画瓢,利用MybatisPlus实现下面的需求,请自己动手,丰衣足食 😋
  • 需求1:查询姓名中含有 "李" 的用户,返回浏览器
  • 需求2:查询年龄在 20-30 之间的用户,返回浏览器
  • 需求3:查询属于楚家的人,并且擅长阵法的人,返回浏览器
  • 需求4:插入一个用户,姓名为哈利波特,年龄为 18,爱好为 "魔法",描述为:"哈利波特,来自霍格沃茨魔法学校",门派为 "霍格沃茨魔法学校", 返回操作结果给浏览器

:::

2.2 MyBatisX插件的使用 ✏️

前言

MybatisX idea 快速开发插件

image
image

MybatisX 辅助 idea 快速开发 mybatis 插件,为效率而生。

官方安装: File -> Settings -> Plugins -> Browse Repositories.. 输入 mybatisx 安装下载

Jar 安装: File -> Settings -> Plugins -> Install plugin from disk.. 选中 mybatisx.zip(重要,是zip包) 安装

1. 准备数据库建表语句

CREATE TABLE book (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    book_name VARCHAR(100) NOT NULL COMMENT '书名',
    author VARCHAR(50) NOT NULL COMMENT '作者',
    category VARCHAR(20) NOT NULL COMMENT '分类(玄幻/仙侠/都市等)',
    word_count INT DEFAULT 0 COMMENT '字数',
    status TINYINT DEFAULT 0 COMMENT '状态(0:连载中,1:已完结)',
    score DECIMAL(3,1) DEFAULT 0.0 COMMENT '评分(0-10分)',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '逻辑删除(0:未删除,1:已删除)'
) COMMENT '网络小说书籍表';

INSERT INTO book (book_name, author, category, word_count, status, score) VALUES
('斗破苍穹', '天蚕土豆', '玄幻', 5320000, 1, 9.5),
('凡人修仙传', '忘语', '仙侠', 7710000, 1, 9.3),
('诡秘之主', '爱潜水的乌贼', '奇幻', 4430000, 1, 9.8),
('大王饶命', '会说话的肘子', '都市', 2800000, 1, 8.9),
('圣墟', '辰东', '玄幻', 6130000, 1, 8.7),
('全职高手', '蝴蝶蓝', '游戏', 5350000, 1, 9.2),
('雪中悍刀行', '烽火戏诸侯', '武侠', 4570000, 1, 9.4),
('万族之劫', '老鹰吃小鸡', '都市', 8350000, 1, 9.1),
('大奉打更人', '卖报小郎君', '仙侠', 3790000, 1, 9.6),
('深空彼岸', '辰东', '科幻', 2100000, 0, 8.8);


INSERT INTO book (book_name, author, category, word_count, status, score) VALUES
('诛仙', '萧鼎', '仙侠', 1520000, 1, 9.4),
('斗罗大陆', '唐家三少', '玄幻', 3000000, 1, 9.0),
('遮天', '辰东', '玄幻', 6320000, 1, 9.2),
('将夜', '猫腻', '玄幻', 3800000, 1, 9.3),
('赘婿', '愤怒的香蕉', '历史', 5200000, 1, 9.1),
('全球高武', '老鹰吃小鸡', '都市', 8350000, 1, 8.9),
('我师兄实在太稳健了', '言归正传', '仙侠', 3100000, 1, 9.0),
('诡秘地海', '狐尾的笔', '克苏鲁', 1800000, 1, 8.8),
('黎明之剑', '远瞳', '科幻', 4200000, 1, 9.2),
('从红月开始', '黑山老鬼', '科幻', 2500000, 0, 8.7);


将上述的sql粘贴到idea的sql执行console中执行即可 image

  1. 使用MybatisX插件生成实体类和Mapper接口和映射文件,图解如下:
image
image
image
image
  1. 在启动类中添加注解@MapperScan("com.itheima.mapper"),扫描mapper接口
image
image
  1. 创建controller包,并且在controller包下创建BookController类,参考UserController的代码,编写如下代码:
image
image
  1. 启动项目,访问 http://localhost:8848/books/listopen in new window ,返回如下结果:
image
image

总结

课堂作业

参考上述的讲义,使用MyBatisX插件完成代码生产和测试!

将完成的截图上传到任务平台,这个作为实训分数哦

2.3 MyBatisPlus分页查询 ✏️

MyBatisPlus分页查询

image
image

分页的好处:

  1. 减少数据的处理量,提高查询效率
  2. 减少内存消耗,防止内存溢出
  3. 提高用户体验,提升网站性能

MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。

准备工作:👇

1. 配置分页插件

在 Spring Boot 项目中,你可以通过 Java 配置来添加分页插件:

在cn.yangeit下创建config包,并在该包下创建MybatisPlusConfig类,代码如下:

@Configuration
@MapperScan("cn.yangeit.mapper")//扫描mapper接口
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}
image
image

2. Page类说明 👇

image
image

3. 开始分页查询 👇

需求1:查询第一页,每页显示5条数据,返回浏览器image

需求2:查询玄幻类 第2页,每页显示2条数据,返回浏览器

image
image
image
image

总结

课堂作业

观察控制台的日志,分析分页查询的原理! image

将分页配置类注释,再次运行,观察控制台的日志,分析分页查询的原理!