当我们拿到项目需求后,有时候可能会感到迷茫,不知道整体流程和接下来该做什么。为了能够不断实战并快速提高自己,我们需要找到适合自己的一套开发流程。这样我们就能够有条不紊地进行项目开发,并且及时发现和修正自己的不足之处。
以最常用的java全栈开发为例,这个系列以MySQL数据库,后端以SpringBoot,MybatisPlus,Redis,Spring security,前端以vue,微信小程序的技术栈组合,进行步骤细化。
根据上文 全栈开发流程——数据表的分析与创建详解实战演示(一)我们讨论了建立数据库的详细过程
再此篇文章讲述后端的启动以及数据源的连接,如下:
Spring boot基本demo启动
新建项目
添加依赖项
构建maven
基本项目完成
更改文件后缀
新建 Spring Boot 项目后,resources 目录下有一个默认的全局配置文件 application.properties(空文件),Spring Boot 在底层已经自动配置好了默认配置。
默认的文件类型是 .properties,我们这边修改为 .yml,原因是 .yml 更加灵活、简洁!
添加基础依赖项 ——配置文件提示与lombok
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
<!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
再引入一个常用的工具包依赖
<!-- hutool 工具包 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.22</version> </dependency>
常见错误——maven
1.未正确配置setting.xml文件
打开Maven文件下conf/setting.xml文件,找到如图所示位置,如若未设置本地库的位置,则如黄色路径所示,在C:\Users\用户名.m2。设置了路径,则采用的是红色默认位置。(IDEA下使用Maven,未在全局设置中设置Maven Home Dictionary,则使用默认位置)
根据路径找到repository,删除库中对应的包文件,重新导入。
2.未配置阿里云国内镜像
尝试多次重新导入仍然无法运行,原因是此时网段无法访问maven.org网站,可采用阿里云镜像操作,打开maven安装文件夹的conf文件夹下的settings.xml文件,在如图所示位置配置如下:
完成后,先执行第一步操作后,重新导入包。
复制代码
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
3.爆红
如图修改即可
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.15</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>springboot-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring boot-demo</name> <description>spring boot-demo</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- hutool 工具包 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.22</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
以上为 springboot 的 demo 项目全部过程
springboot连接MySQL
新建项目
连接数据库
添加依赖
<!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
编辑application.yml配置文件
数据源和连接池
# 数据源 spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/schooldb?useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver hikari: # 连接池最大连接数 maximum-pool-size: 12 # 空闲时保持最小连接数 minimum-idle: 5 # 空闲连接存活时间 idle-timeout: 300000 # 连接超时时间 connection-timeout: 20000 # 测试sql connection-test-query: select 1
成功运行
测试一下是是否链接成功
import javax.sql.DataSource; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class DataSourceTests { @Autowired private DataSource dataSource; @Test public void testConnection() throws Exception { System.out.println(dataSource.getConnection()); } }
成功连接数据库
代码中使用了Spring Boot的注解@SpringBootTest来标注测试类,表明这是一个Spring Boot的测试类,并且会加载整个Spring应用程序上下文。
通过@Autowired注解,将名为dataSource的DataSource实例自动注入进来。DataSource是一个接口,它是Spring提供的用于创建和管理数据库连接的工具,并且可以处理数据库连接的打开、关闭和连接池管理等操作。在@Test注解的方法testConnection中,通过调用getConnection()方法来获取一个数据库连接,并将其打印出来。如果一切正常,将会打印出一个数据库连接对象。
SpringBoot 整合 MyBatis 操作 MySql
先给出数据库
CREATE DATABASE `mydemo`; USE `mydemo`; DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `user_id` bigint NOT NULL, `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', PRIMARY KEY (`user_id`), KEY `user_idx1_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户表'; INSERT INTO `sys_user` (`user_id`, `username`) VALUES (1, '雪碧'); INSERT INTO `sys_user` (`user_id`, `username`) VALUES (2, '可乐');
添加依赖项
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/schooldb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC hikari: # 连接池最大连接数 maximum-pool-size: 12 # 空闲时保持最小连接数 minimum-idle: 5 # 空闲连接存活时间 idle-timeout: 300000 # 连接超时时间 connection-timeout: 20000 # 测试sql connection-test-query: select 1 # mybatis 配置 mybatis: mapper-locations: - classpath:mapper/*.xml - classpath*:com/**/mapper/*.xml
修改 SpringBoot 配置文件
除数据源和连接池外,还有mybatis的mapper和mapper.xml位置
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/schooldb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC hikari: # 连接池最大连接数 maximum-pool-size: 12 # 空闲时保持最小连接数 minimum-idle: 5 # 空闲连接存活时间 idle-timeout: 300000 # 连接超时时间 connection-timeout: 20000 # 测试sql connection-test-query: select 1 # mybatis 配置 mybatis: mapper-locations: - classpath:mapper/*.xml - classpath*:com/**/mapper/*.xml
创建实体类
package com.example.mybatisdemo.model; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @Data @ToString @Builder @NoArgsConstructor @AllArgsConstructor public class User { private Long userId; private String username; }
创建 Mapper 接口
package com.example.mybatisdemo.mapper; import com.example.mybatisdemo.model.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface SysUserMapper { /** * 根据用户ID查询用户信息 * * @param userId 用户ID * @return 用户信息 */ User queryUserById(Long userId); }
这段代码是一个MyBatis的Mapper接口,被注解为@Mapper表示该接口是MyBatis的映射器接口。
Mapper接口是定义与数据库交互的方法的接口,通过MyBatis配置文件与SQL语句进行映射。其中,SysUserMapper接口定义了一个查询用户信息的方法queryUserById,该方法接受一个userId参数,返回一个User对象。
该接口的实现是由MyBatis框架自动创建,并且会根据接口方法的注解和参数类型来动态生成SQL语句,以实现数据库操作。## 创建 Mapper 映射文件根据 mybatis.mapper-locations 配置地址创建 Mapper 映射文件
<?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="com.example.mybatisdemo.mapper.SysUserMapper"> <!-- 通用查询映射结果 --> <resultMap id="baseResultMap" type="com.example.mybatisdemo.model.User"> <id column="user_id" property="userId"/> <result column="username" property="username"/> </resultMap> <select id="queryUserById" resultMap="baseResultMap"> select * from sys_user where user_id = #{userId} </select> </mapper>
创建 Service 与接口
- Service
package com.example.mybatisdemo.service; import com.example.mybatisdemo.mapper.SysUserMapper; import com.example.mybatisdemo.model.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class UserService { private final SysUserMapper sysUserMapper; /** * 根据用户ID查询用户信息 * * @param userId 用户ID * @return 用户信息 */ public User queryUserById(Long userId) { return sysUserMapper.queryUserById(userId); } }
- 接口
package com.example.mybatisdemo.controller; import com.example.mybatisdemo.model.User; import com.example.mybatisdemo.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @RequestMapping("/user") public class UserController { private final UserService UserService; @GetMapping("/{userId}") public ResponseEntity<User> queryUserById(@PathVariable Long userId) { return ResponseEntity.ok(UserService.queryUserById(userId)); } }
这段代码是一个基于Spring Boot的RESTful风格的控制器类。它使用@RestController注解标识该类为一个控制器,并将返回的数据直接作为HTTP响应体进行返回。
@RequiredArgsConstructor是一个Lombok注解,它会为控制器类生成一个包含所有final修饰的成员变量的构造函数。@RequestMapping(“/user”)用于映射URL路径,即指定该控制器的基本URL路径为/user。UserController类的构造函数接受一个UserService类型的参数,并使用final修饰符标识为成员变量,表示该类依赖于UserService。
@GetMapping(“/{userId}”)用于映射GET请求的URL路径。{userId}是一个路径变量,表示一个具体的用户ID。public ResponseEntityqueryUserById(@PathVariable Long userId)方法是该控制器的处理方法,用于根据用户ID查询用户信息。它使用@PathVariable注解将URL路径中的路径变量userId绑定到方法的参数上。该方法使用UserService调用queryUserById方法查询用户信息,并将结果包装成ResponseEntity对象返回ResponseEntity.ok(UserService.queryUserById(userId))表示请求成功,响应状态码为200,并将用户信息作为响应体返回。
测试接口
案例成功
SpringBoot 整合 MyBatis-Plus 实现分页查询
构建查询数据
CREATE DATABASE `mydemo`; USE `mydemo`; DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `user_id` bigint NOT NULL, `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', PRIMARY KEY (`user_id`), KEY `user_idx1_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户表'; INSERT INTO `sys_user` (`user_id`, `username`) VALUES (1, '雪碧'); INSERT INTO `sys_user` (`user_id`, `username`) VALUES (2, '可乐'); -- 创建岗位信息表 CREATE TABLE `sys_post` ( `post_id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID', `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位编码', `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位名称', `post_sort` int NOT NULL COMMENT '岗位排序', `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新人', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注信息', PRIMARY KEY (`post_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='岗位信息表'; -- 向岗位信息表插入数据 INSERT INTO `sys_post` VALUES (11, 'user8', '员工8', 10, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人'); INSERT INTO `sys_post` VALUES (2, 'cto', 'cto', 0, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '秃头大佬'); INSERT INTO `sys_post` VALUES (3, 'user', '董事长', -1, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '资本家'); INSERT INTO `sys_post` VALUES (4, 'user1', '员工1', 3, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人'); INSERT INTO `sys_post` VALUES (5, 'user2', '员工2', 4, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人'); INSERT INTO `sys_post` VALUES (6, 'user3', '员工3', 5, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人'); INSERT INTO `sys_post` VALUES (7, 'user4', '员工4', 6, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人'); sys_user
添加依赖
<!-- Mysql 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
实体类
package com.example.mybatisplusdemo.model; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; @Getter @Setter public class BaseEntity implements Serializable { /** * 创建者 */ @TableField(fill = FieldFill.INSERT) private String createBy; /** * 创建时间 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 更新者 */ @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
package com.example.mybatisplusdemo.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; /** * 岗位管理 * * @author Strive * @date 2022-03-15 17:18:40 */ @Data @TableName("sys_post") @EqualsAndHashCode(callSuper = true) public class Post extends BaseEntity { private static final long serialVersionUID = -8744622014102311894L; /** * 岗位ID */ @TableId(type = IdType.ASSIGN_ID) private Long postId; /** * 岗位编码 */ private String postCode; /** * 岗位名称 */ private String postName; /** * 岗位排序 */ private Integer postSort; /** * 是否删除 -1:已删除 0:正常 */ private String delFlag; /** * 备注信息 */ private String remark; }
package com.example.mybatisplusdemo.model; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; /** @author Strive */ @Data @ToString @Builder @NoArgsConstructor @AllArgsConstructor @TableName("sys_user") public class User { @TableId private Long userId; private String username; }
Mapper 接口
package com.example.mybatisplusdemo.mapper; import cn.hutool.db.Page; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.example.mybatisplusdemo.model.Post; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface PostMapper extends BaseMapper<Post> { IPage<Post> selectPageSql(@Param("page") Page page, @Param("query") Post mingYuePost); }
其中定义了一个selectPageSql方法,用于分页查询Post表的数据。方法参数使用了@Param注解来给参数取别名,方便在SQL语句中使用。
其中,@Param(“page”)表示分页参数,@Param(“query”)表示查询条件。方法返回值类型为IPage,表示查询结果的分页对象。IPage是MybatisPlus框架提供的分页对象,它包含了查询结果的总数、当前页码、每页记录数等信息。
这段代码可以实现根据指定的分页参数和查询条件,查询Post表的数据,并返回分页对象。
package com.example.mybatisplusdemo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.mybatisplusdemo.model.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> {}
编写 Mapper.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="com.example.mybatisplusdemo.mapper.PostMapper"> <resultMap id="PostMap" type="com.example.mybatisplusdemo.model.Post"> <id property="postId" column="post_id"/> <result property="postCode" column="post_code"/> <result property="postName" column="post_name"/> <result property="postSort" column="postSort"/> <result property="delFlag" column="del_flag"/> <result property="createTime" column="create_time"/> <result property="createBy" column="create_by"/> <result property="updateTime" column="update_time"/> <result property="updateBy" column="update_by"/> <result property="remark" column="remark"/> </resultMap> <select id="selectPageSql" resultMap="PostMap"> SELECT p.post_id, p.post_name, p.post_code, p.post_sort as postSort, p.del_flag, p.create_time, p.update_time, p.update_by, p.create_by, p.remark FROM sys_post p <where> p.del_flag = '0' <if test="query.postName != null and query.postName != ''"> <bind name="postNameLike" value="'%' + query.postName + '%'" /> and p.post_name LIKE #{postNameLike} </if> </where> <if test="null != page.orders"> <include refid="dynamicOrder"></include> </if> </select> <!-- 动态排序 --> <sql id="dynamicOrder"> ORDER BY <choose> <when test="page.orders != null and page.orders.size > 0"> <foreach collection="page.orders" item="order" separator=","> ${order.column} <choose> <when test="order.asc == true"> asc </when> <otherwise> desc </otherwise> </choose> </foreach> </when> </choose> </sql> </mapper>
Service
package com.example.mybatisplusdemo.service; import cn.hutool.db.Page; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.mybatisplusdemo.mapper.PostMapper; import com.example.mybatisplusdemo.model.Post; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor public class PostService extends ServiceImpl<PostMapper, Post> { private final PostMapper PostMapper; public IPage<Post> pageSql(Page page, Post Post) { return PostMapper.selectPageSql(page, Post); } }
package com.example.mybatisplusdemo.service; import com.example.mybatisplusdemo.mapper.UserMapper; import com.example.mybatisplusdemo.model.User; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor public class UserService { private final UserMapper sysUserMapper; /** * 根据用户ID查询用户信息 * * @param userId 用户ID * @return 用户信息 */ public User queryUserById(Long userId) { log.info("根据用户ID查询用户信息"); return sysUserMapper.selectById(userId); } }
提供分页查询接口
package com.example.mybatisplusdemo.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.mybatisplusdemo.model.Post; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @RequestMapping("/post") public class PostController { private final com.example.mybatisplusdemo.service.PostService PostService; @GetMapping("/page") public ResponseEntity<IPage<Post>> page(Page<Post> page) { return ResponseEntity.ok(PostService.page(page)); } @GetMapping("/pageSql") public ResponseEntity<IPage<Post>> pageSql(cn.hutool.db.Page page, Post Post) { return ResponseEntity.ok(PostService.pageSql(page, Post)); } }
package com.example.mybatisplusdemo.controller; import com.example.mybatisplusdemo.model.User; import com.example.mybatisplusdemo.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** @author Strive */ @RestController @RequiredArgsConstructor @RequestMapping("/user") public class UserController { private final UserService UserService; @GetMapping("/{userId}") public ResponseEntity<User> queryUserById(@PathVariable Long userId) { return ResponseEntity.ok(UserService.queryUserById(userId)); } }
新增分页拦截器
package com.example.mybatisplusdemo.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { /** * 分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
这是一个用于配置MyBatis Plus的配置类。在这个类中,我们定义了一个名为MyBatisPlusConfig的@Configuration注解,表示它是一个配置类。
该配置类中定义了一个名为mybatisPlusInterceptor的@Bean注解方法,用于创建一个MybatisPlusInterceptor对象。MybatisPlusInterceptor是MyBatis Plus提供的分页插件,它可以用于实现数据库分页查询的功能。在mybatisPlusInterceptor方法中,我们创建了一个MybatisPlusInterceptor对象,并向其中添加了一个PaginationInnerInterceptor内部拦截器。内部拦截器用于处理分页查询的逻辑,这里选择使用MySQL数据库作为数据源,所以传入DbType.MYSQL参数。
通过这个配置,我们可以将该分页插件集成到我们的MyBatis Plus配置中,从而实现分页查询的功能。
由于篇幅问题,剩余缓存内容在下一篇完成,剩余内容为:
此篇文章的全部代码为,可以私信获取