SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
- 1. 环境准备
- 2. 项目创建和初始化
- 2.1 创建项目
- 2.2 项目依赖配置
- 2.3 项目包结构预设
- 2.4 项目启动类创建
- 2.5 启动项目
- 3. 配置文件(application.yml)
- 4. 数据库MySQL集成
- 4.1 依赖引入
- 4.2 参数配置
- 5. 数据库框架MyBatis集成(自动生成代码配置)
- 5.1 依赖引入
- 5.2 代码生成配置(generatorConfig.xml)
- 5.3 数据库配置文件jdbc.properties
- 5.4 建表
- 5.5 生成代码
- 5.6 添加注解
- 5.7 调用测试
- 6. 数据库Redis集成
- 6.1 依赖引入(pom.xml)
- 6.2 参数配置(application.yml)
- 6.3 配置类(RedisConfig.java)
- 6.4 工具类(RedisUtils.java)
- 6.5 接口代码
- 6.6 调用测试
- 7. 项目接口
- 7.1 用户管理接口
- 7.1.1 UserInfoController.java
- 7.1.2 接口测试
- 7.2 登录接口
- 7.2.1 UserLogin.java
- 7.2.2 接口测试
- 7.3 商品管理接口
- 7.3.1 建表
- 7.3.2 接口创建(GoodsInfoController.java)
- 7.3.3 接口测试
- 7.4 订单管理接口
- 7.4.1 建表
- 7.4.2 接口创建(OrderInfoController.java)
- 7.4.3 接口测试
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
SpringBoot入门实战系列篇专栏
SpringBoot入门实战(第一篇:环境准备和项目初始化)
SpringBoot入门实战(第二篇:MySQL集成配置)
SpringBoot入门实战(第三篇:MyBatis集成配置,自动生成代码配置)
SpringBoot入门实战(第四篇:Redis集成配置)
SpringBoot入门实战(第五篇:项目接口-用户管理)
SpringBoot入门实战(第六篇:项目接口-登录)
SpringBoot入门实战(第七篇:项目接口-商品管理)
SpringBoot入门实战(第八篇:项目接口-订单管理)完结篇
SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
1. 环境准备
- Java环境配置:Java JDK 下载安装和配置环境变量
- Maven安装和配置:Maven安装配置教程(精简版)
- 开发工具-IDEA社区版:IntelliJ IDEA Community 下载安装和使用指南
- IDEA配置maven仓库:IDEA配置MAVEN本地仓库
2. 项目创建和初始化
使用IDEA开发工具创建spring boot项目
2.1 创建项目
打开idea社区版
左上角菜单栏打开,选择File
—New
—Project...
创建界面如下(默认打开的界面)
按照顺序定义或者修改配置参数
1
新建项目类型 默认Java2
项目名称(Name) 默认untitled 自定义为sb_demo3
-4
项目位置(Location) 自定义项目位置,下方一行提示信息中会有创建后的项目路径5
构建系统(Build system) 默认Maven,如果不是,则选择Maven6
Java JDK选择(JDK) 选择自己安装的JDK版本,这里选择的是1.8版本7
新增示例代码(Add sample code) 默认不勾选,这里无需示例代码8
项目组织架构(Advanced Settings)
GroupId默认org.example这里自定义为com.xh
ArtifactId默认项目名称,这里无需修改9
最后选择Create创建项目
参数配置后如下
创建后的项目界面如下
2.2 项目依赖配置
配置spring boot相关依赖,这里直接配置三个依赖,分别对应spring boot的依赖、lombok依赖、fastjson依赖。
注1
:lombok依赖通过注解方式简化样板代码的编写,可自动生成getter、setter、构造函数、toString等方法
注2
:fastjson依赖是为了实现Java对象和json格式字符转之间的相互转换
在pom.xml中配置如下代码
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>
配置后的完整代码
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xh</groupId><artifactId>sb_demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency></dependencies></project>
配置依赖后不要忘了右上角maven刷新按钮点一下
如图
2.3 项目包结构预设
提前创建项目的包结构,这里简单创建几个常用包,后续有需要可继续新建包
打开src/main/java包,在Java包下创建如下包
com.xh.user
com.xh.product
com.xh.analystic
创建后如下
2.4 项目启动类创建
在com.xh包下创建启动类
SbApplication.java
package com.xh;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @func: 项目启动类* @author: LiBai* @version: v1.0* @createTime: 2025/4/10 10:45*/
@SpringBootApplication
public class SbApplication {public static void main(String[] args) {SpringApplication.run(SbApplication.class, args);}}
2.5 启动项目
鼠标选中启动类文件右键选择Run’SbApplication()'执行项目
如下,表示项目正常启动,一切配位配置的参数都为默认,如默认端口8080
3. 配置文件(application.yml)
在src/main/resources
包下创建文件application.yml
(右键New
—File
,然后填写文件名,带后缀)
在application.yml中配置端口号如下
server:port: 8088
配置后重启服务,右上角有启动类名和绿色启动按钮,现在项目正在运行,直接点击可重启
服务端口即变为8088
如下
4. 数据库MySQL集成
4.1 依赖引入
pom.xml中引入所需依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2.7.18</version></dependency>
引入后重新加载依赖
完整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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xh</groupId><artifactId>sb_demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2.7.18</version></dependency></dependencies></project>
4.2 参数配置
在配置文件application.yml中配置MySQL连接参数
localhost
是本机地址,也可换成远程IP地址
3306
是端口号,根据自己mysql服务配置
sb_demo
是数据库名称,根据自己数据名称配置
spring:datasource:url: jdbc:mysql://localhost:3306/sb_demo?useUnicode=true&characterEncoding=utf-8&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 1234
完整application.yml
server:port: 8088spring:datasource:url: jdbc:mysql://localhost:3306/sb_demo?useUnicode=true&characterEncoding=utf-8&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 1234
5. 数据库框架MyBatis集成(自动生成代码配置)
5.1 依赖引入
引入相关依赖和插件
依赖部分
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency>
插件部分
<build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
<!-- <version>2.3.4.RELEASE</version>--></plugin><!--添加mybatis generator maven插件--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><!--generatorConfig.xml位置--><configurationFile>src/main/resources/generatorConfig.xml</configurationFile><verbose>true</verbose><!-- 如果本来就有mapper、dao文件了就覆盖--><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><phase>deploy</phase><goals><goal>generate</goal></goals></execution></executions><!--此处必须添加mysql驱动包--><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>8.0.31</version></dependency></dependencies></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.csv</include><include>**/*.yml</include><include>**/*.xml</include><include>**/*.properties</include><include>**/*.json</include><include>**/*.js</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.csv</include><include>**/*.yml</include><include>**/*.xml</include><include>**/*.properties</include><include>**/*.json</include><include>**/*.js</include></includes><filtering>false</filtering></resource></resources></build>
引入后完整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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xh</groupId><artifactId>sb_demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
<!-- <version>1.3.2</version>--></dependency></dependencies><build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
<!-- <version>2.3.4.RELEASE</version>--></plugin><!--添加mybatis generator maven插件--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><!--generatorConfig.xml位置--><configurationFile>src/main/resources/generatorConfig.xml</configurationFile><verbose>true</verbose><!-- 如果本来就有mapper、dao文件了就覆盖--><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><phase>deploy</phase><goals><goal>generate</goal></goals></execution></executions><!--此处必须添加mysql驱动包--><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>8.0.31</version></dependency></dependencies></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.csv</include><include>**/*.yml</include><include>**/*.xml</include><include>**/*.properties</include><include>**/*.json</include><include>**/*.js</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.csv</include><include>**/*.yml</include><include>**/*.xml</include><include>**/*.properties</include><include>**/*.json</include><include>**/*.js</include></includes><filtering>false</filtering></resource></resources></build></project>
5.2 代码生成配置(generatorConfig.xml)
自动生成代码的配置文件在resources包下创建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><properties resource="jdbc.properties"/><context id="sqlserverTables" targetRuntime="MyBatis3"><!-- 生成的pojo,将implements Serializable--><plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin><!--替换默认生成的dao-Example--><plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin"><property name="searchString" value="Example$" /><property name="replaceString" value="Impl" /></plugin><commentGenerator><!-- 是否去除自动生成的注释 true:是 : false:否 --><property name="suppressAllComments" value="true" /></commentGenerator><!-- 数据库链接URL、用户名、密码 --><jdbcConnection driverClass="${spring.datasource.driverClassName}"connectionURL="${spring.datasource.url}"userId="${spring.datasource.username}"password="${spring.datasource.password}"></jdbcConnection><!--默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer--><!--true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal--><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!--生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,--><!--也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下--><!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">--><!--<javaModelGenerator targetPackage="${daopackage}" targetProject="./src/main/java">--><javaModelGenerator targetPackage="${daopackage}" targetProject="./src/main/java"><property name="enableSubPackages" value="true"/><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!--对应的mapper.xml文件 --><sqlMapGenerator targetPackage="${daopackage}" targetProject="./src/main/java"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 对应的Mapper接口类文件 --><javaClientGenerator type="XMLMAPPER" targetPackage="${daopackage}" targetProject="./src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><table tableName="${tableName}"enableCountByExample="false"enableUpdateByExample="true"enableDeleteByExample="true"enableSelectByExample="true"selectByExampleQueryId="false"><property name="useActualColumnNames" value="false"/></table></context>
</generatorConfiguration>
5.3 数据库配置文件jdbc.properties
resources包下创建文件jdbc.properties
spring.datasource.driverLocation=mysql-connector-java-8.0.21.jar
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sb_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=1234daopackage = com.user.dao
tableName = tb_user
其中daopackage是生成代码后存储的位置
tableName是表名
5.4 建表
在MySQL表中新建用户表tb_user
建表语句
CREATE TABLE tb_user(id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255) NOT NULL COMMENT "密码",pass_word VARCHAR(255) NOT NULL COMMENT "账号",gender VARCHAR(255) NOT NULL COMMENT "性别",address VARCHAR(255) NOT NULL COMMENT "地址",p_number VARCHAR(255) NOT NULL COMMENT "手机号",vip_class INT DEFAULT 0 COMMENT "vip等级,共4级,0-1-2-3"
);
执行后建表完成
5.5 生成代码
修改jdbc.properties中的daopackage和tableName,然后到IDEA工具找到Maven工具窗口,一般在右侧
打开sb_demo—Plugins—mybatis-generator—mybatis-generator:generate,如下(双击即可)
生成成功的控制台界面
或者在终端窗口(Terminal)使用maven命令
mvn mybatis-generator:generate
生成的代码文件如下
5.6 添加注解
分别对TbUser.java、TbUserImpl.java、TbUserMapper.interface添加注解
TbUser.java添加@Component注解
TbUserImpl.java添加@Service注解
TbUserMapper.interface添加@Mapper注解
完成以上即可进行数据库表相关操作的代码编写
5.7 调用测试
代码编写:
编写接口进行数据添加
在user包下创建controller包,并在controller包下新建Java代码
代码如下
package com.user.controller;import com.alibaba.fastjson.JSONObject;
import com.user.dao.TbUser;
import com.user.dao.TbUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/16 15:36*/
@RestController
@RequestMapping(value = "/xh/v1/user")
public class UserAddTest {@AutowiredTbUserMapper tbUserMapper;@PostMapping(value = "/addUser")public JSONObject addUser(@RequestBody JSONObject requestBody){System.out.println("add user info ----> ");TbUser tbUser = new TbUser();tbUser.setUsername(requestBody.getString("username"));tbUser.setPassWord(requestBody.getString("passWord"));tbUser.setGender(requestBody.getString("gender"));tbUser.setAddress(requestBody.getString("address"));tbUser.setpNumber(requestBody.getString("pNumber"));tbUser.setVipClass(requestBody.getInteger("vipClass"));tbUserMapper.insert(tbUser);return requestBody;}}
接口调用:
postman调用接口
URL地址
127.0.0.1:8088/xh/v1/user/addUser
请求体内容
{"username":"libai","passWord":"352894","gender":"男","address":"上海市浦东新区","pNumber":"13122993366","vipClass":2
}
如下(postman中截图)
数据查看:
在mysql表中查看数据是否成功添加
mysql可用,生成代码可用
6. 数据库Redis集成
6.1 依赖引入(pom.xml)
所需依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.7.18</version></dependency>
6.2 参数配置(application.yml)
配置文件中配置redis相关参数
application.yml
spring:redis:host: 127.0.0.1port: 6379password: xh.1234database: 0jedis:pool:max-idle: 8min-idle: 1max-active: 8max-wait: -1timeout: 20000
6.3 配置类(RedisConfig.java)
在com.xh.common.config包下创建redis配置类RedisConfig.java
package com.xh.common.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/17 9:47*/
@Configuration
public class RedisConfig {@Bean@SuppressWarnings("all")public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();template.setKeySerializer(stringRedisSerializer);template.setValueSerializer(stringRedisSerializer);GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();template.setHashKeySerializer(stringRedisSerializer);template.setHashValueSerializer(genericJackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
}
6.4 工具类(RedisUtils.java)
在com.xh.common.utils包下创建Redis工具类RedisUtils.java
package com.xh.common.utils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/17 9:46*/
@Component
public class RedisUtils {@AutowiredRedisTemplate<String, Object> redisTemplate;public static RedisTemplate<String, Object> _redisTemplate;@PostConstructpublic void init(){_redisTemplate = redisTemplate;}// =============================common============================/** 设置失效时间 */public static void setexpire(String key, long time) {_redisTemplate.expire(key, time, TimeUnit.SECONDS);}/** 获取过期时间 */public static long getexpire(String key) {return _redisTemplate.getExpire(key, TimeUnit.SECONDS);}/** 判断key是否存在 */public static boolean haskey(String key) {return _redisTemplate.hasKey(key);}/** 查询key */public static Set<String> search(String keyword){return _redisTemplate.keys(keyword);}/** 删除key */@SuppressWarnings("unchecked")public static void delete(String... key) {if (key.length == 1) {_redisTemplate.delete(key[0]);} else {_redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));}}// =============================String============================/** 获取普通类型缓存 */public static Object get(String key) {return key == null ? null : _redisTemplate.opsForValue().get(key);}/** 设置普通类型缓存 */public static void set(String key, Object value) {_redisTemplate.opsForValue().set(key, value);}/** 设置普通类型缓存 带失效时间*/public static void set(String key, Object value, long time) {_redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);}// =============================Hash==============================/** 从hashmap中返回键位item的值 */public static Object hget(String key, String item) {return _redisTemplate.opsForHash().get(key, item);}/** 向hashmap写入一个键值对 */public static void hset(String key, String item, Object value) {_redisTemplate.opsForHash().put(key, item, value);}/** 从hashmap中删除名为item的key */public static void hremove(String key, Object... item) {_redisTemplate.opsForHash().delete(key, item);}/** 判断hashmap里面是否包含item的key */public static boolean hhasitem(String key, String item) {return _redisTemplate.opsForHash().hasKey(key, item);}/** 一次性从hashmap中返回所有的键值对 */public static Map<Object, Object> hmget(String key) {return _redisTemplate.opsForHash().entries(key);}/** 向hashmap写入多个个键值对 */public static void hmset(String key, Map<String, Object> map) {_redisTemplate.opsForHash().putAll(key, map);}// =============================List==============================/** 返回一个list的长度 */public static long lgetsize(String key) {return _redisTemplate.opsForList().size(key);}/** 返回一个list 给定开始index和结束index */public static List<Object> lget(String key, long start, long end) {return _redisTemplate.opsForList().range(key, start, end);}/*** jwh-20241022-获取列表第一个元素并从redis中移除* @param key redis数据的键* @return 返回移除的数据*/public static Object lGetPop(String key) {return _redisTemplate.opsForList().leftPop(key);}/** 通过索引index获取list中的值 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素 */public static Object lgetindex(String key, long index) {return _redisTemplate.opsForList().index(key, index);}/** 将list放入缓存 */public static void lset(String key, Object value) {_redisTemplate.opsForList().rightPush(key, value);}/** 将list放入缓存 */public static void lset(String key, List<Object> value) {_redisTemplate.opsForList().rightPushAll(key, value);}/** 根据索引修改list中的某条数据 */public static void lupdateindex(String key, long index, Object value) {_redisTemplate.opsForList().set(key, index, value);}/** 移除N个值为value */public static long lRemove(String key, long count, Object value) {return _redisTemplate.opsForList().remove(key, count, value);}// =============================Set===============================/** 获取set的长度 */public static long sgetsetsize(String key) {return _redisTemplate.opsForSet().size(key);}/** 获取set中的全部元素 */public static Set<Object> sget(String key) {return _redisTemplate.opsForSet().members(key);}/** 判断set中是否包含value */public static boolean shaskey(String key, Object value) {return _redisTemplate.opsForSet().isMember(key, value);}/** set中添加对象*/public static long sset(String key, Object... values) {return _redisTemplate.opsForSet().add(key, values);}/** 删除set中的values元素*/public static long sremove(String key, Object... values) {return _redisTemplate.opsForSet().remove(key, values);}}
6.5 接口代码
创建接口,新增数据到redis中,以存储字符串类型数据为例
com.xh.user.controller包下创建RedisTest.java
package com.xh.user.controller;import com.alibaba.fastjson.JSONObject;
import com.xh.common.utils.RedisUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/17 9:59*/
@RestController
@RequestMapping(value = "/xh/v1/redis")
public class RedisTest {@RequestMapping(value = "/strAdd")public JSONObject strAdd(){RedisUtils.set("RedisTest001","this is a test for redis util");System.out.println("this is a test for redis util");return null;}
}
6.6 调用测试
请求地址
127.0.0.1:8088/xh/v1/redis/strAdd
请求参数为空
调用后并查看redis客户端
可以看到数据已存入,其余方法类似
以上就是spring boot集成redis内容
7. 项目接口
完成以上配置集成,可进行项目接口编写
7.1 用户管理接口
在com.xh.user.controller包下创建用户管理类UserInfoController.java
7.1.1 UserInfoController.java
UserInfoController.java代码
package com.xh.user.controller;import com.alibaba.fastjson.JSONObject;
import com.xh.user.dao.TbUser;
import com.xh.user.dao.TbUserImpl;
import com.xh.user.dao.TbUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/17 10:53*/
@CrossOrigin
@RestController
@RequestMapping(value = "/xh/v1/user")
public class UserInfoController {@AutowiredTbUserMapper tbUserMapper;@RequestMapping(value = "/addUserInfo")public JSONObject addUserInfo(@RequestBody JSONObject requestBody){TbUser tbUser = JSONObject.parseObject(requestBody.toJSONString(), TbUser.class);tbUserMapper.insert(tbUser);JSONObject result = new JSONObject();result.put("code", 200);result.put("data", requestBody);result.put("msg", "新增用户数据");return result;}@GetMapping(value = "/readUserInfo")public JSONObject readUserInfo(){TbUserImpl tbUserImpl = new TbUserImpl();List<TbUser> tbUsers = tbUserMapper.selectByExample(tbUserImpl);JSONObject result = new JSONObject();if (!tbUsers.isEmpty()){result.put("code", 200);result.put("data", tbUsers);result.put("msg", "查询所有用户数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "数据为空");}return result;}@PutMapping(value = "/changeUserInfo")public JSONObject changeUserInfo(@RequestBody JSONObject requestBody){String username = requestBody.getString("username");TbUserImpl tbUserImpl = new TbUserImpl();TbUserImpl.Criteria criteria = tbUserImpl.createCriteria();criteria.andUsernameEqualTo(username);List<TbUser> tbUsers = tbUserMapper.selectByExample(tbUserImpl);JSONObject result = new JSONObject();if (!tbUsers.isEmpty()){// 这里使用updateByExampleSelective// 不能使用updateByExample,不然必须要含有id参数才能插入成功tbUserMapper.updateByExampleSelective(JSONObject.parseObject(requestBody.toJSONString(),TbUser.class), tbUserImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "修改用户数据");return result;}else {result.put("code", 4000);result.put("data", "");result.put("msg", "修改用户数据失败,未找到对应数据");return result;}}@DeleteMapping(value = "/removeUserInfo")public JSONObject removeUserInfo(@RequestBody JSONObject requestBody){String username = requestBody.getString("username");TbUserImpl tbUserImpl = new TbUserImpl();TbUserImpl.Criteria criteria = tbUserImpl.createCriteria();criteria.andUsernameEqualTo(username);List<TbUser> tbUsers = tbUserMapper.selectByExample(tbUserImpl);JSONObject result = new JSONObject();if (!tbUsers.isEmpty()){tbUserMapper.deleteByExample(tbUserImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "删除用户数据");return result;}else {result.put("code", 4000);result.put("data", "");result.put("msg", "删除用户数据失败,未找到对应数据");return result;}}}
7.1.2 接口测试
添加数据(注册账号)
url
127.0.0.1:8088/xh/v1/user/addUserInfo
请求类型
POST
请求参数
{"username":"baijuyi","passWord":"965825","gender":"男","address":"上海市长宁区","pNumber":"18898985858","vipClass":1
}
postman截图
查询数据
url
127.0.0.1:8088/xh/v1/user/readUserInfo
请求类型
GET
请求参数 空
postman截图
更新数据
url
127.0.0.1:8088/xh/v1/user/updateUserInfo
请求类型
PUT
请求参数
{"username":"baijuyi","passWord":"965825","gender":"男","address":"上海市杨浦区","pNumber":"18898985858","vipClass":1
}
postman截图
移除数据
url
127.0.0.1:8088/xh/v1/user/removeUserInfo
请求类型
DELETE
请求参数
{"username":"libai"
}
postman截图
7.2 登录接口
在com.xh.user.controller包下创建类UserLogin.java
7.2.1 UserLogin.java
UserLogin.java代码
package com.xh.user.controller;import com.alibaba.fastjson.JSONObject;
import com.xh.user.dao.TbUser;
import com.xh.user.dao.TbUserImpl;
import com.xh.user.dao.TbUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/17 10:33*/
@CrossOrigin
@RestController
@RequestMapping(value = "/xh/v1/user")
public class UserLoginController {@AutowiredTbUserMapper tbUserMapper;@RequestMapping(value = "/login")public JSONObject login(@RequestBody JSONObject requestBody){String username = requestBody.getString("username");String passWord = requestBody.getString("passWord");TbUserImpl tbUserImpl = new TbUserImpl();TbUserImpl.Criteria criteria = tbUserImpl.createCriteria();criteria.andUsernameEqualTo(username);criteria.andPassWordEqualTo(passWord);List<TbUser> tbUsers = tbUserMapper.selectByExample(tbUserImpl);JSONObject result = new JSONObject();if (!tbUsers.isEmpty()){result.put("code", 200);result.put("data", tbUsers.get(0));result.put("msg", "账号密码正确,校验通过");return result;}else{result.put("code", 4000);result.put("data", "");result.put("msg", "账号密码错误,校验未通过,请确认账号密码并重新输入");return result;}}
}
注意,登录前必须先注册,注册接口包含在下一步的用户管理类中
7.2.2 接口测试
url
127.0.0.1:8088/xh/v1/user/login
请求类型
POST
请求参数
{"username":"libai","passWord":"352894"
}
postman截图
7.3 商品管理接口
商品管理部分
7.3.1 建表
创建商品表tb_goods
CREATE TABLE tb_goods(id INT AUTO_INCREMENT PRIMARY KEY,g_id INT NOT NULL COMMENT "商品id",g_name VARCHAR(255) NOT NULL COMMENT "商品名称",g_category VARCHAR(255) NOT NULL COMMENT "商品分类",g_price DOUBLE NOT NULL COMMENT "商品价格",g_inventory INT NOT NULL COMMENT "商品库存",g_status VARCHAR(255) NOT NULL COMMENT "商品状态"
);
7.3.2 接口创建(GoodsInfoController.java)
原来项目的商品包名叫product,不是很准确,现在改成goods
在com.xh.goods.dao包下根据表tb_goods生成代码,配置好注解后
在com.xh.goods.controller包下创建商品管理类GoodsInfoController.java
代码如下
package com.xh.goods.controller;import com.alibaba.fastjson.JSONObject;
import com.xh.goods.dao.TbGoods;
import com.xh.goods.dao.TbGoodsImpl;
import com.xh.goods.dao.TbGoodsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/18 10:55*/
@CrossOrigin
@RestController
@RequestMapping(value = "/xh/v1/goods")
public class GoodsInfoController {@AutowiredTbGoodsMapper tbGoodsMapper;@PostMapping(value = "/addGoodsInfo")public JSONObject addGoodsInfo(@RequestBody JSONObject requestBody){String gName = requestBody.getString("gName");TbGoodsImpl tbGoodsImpl = new TbGoodsImpl();TbGoodsImpl.Criteria criteria = tbGoodsImpl.createCriteria();criteria.andGNameEqualTo(gName);List<TbGoods> tbGoodsList = tbGoodsMapper.selectByExample(tbGoodsImpl);JSONObject result = new JSONObject();if (tbGoodsList.isEmpty()){tbGoodsMapper.insert(JSONObject.parseObject(requestBody.toJSONString(),TbGoods.class));result.put("code", 200);result.put("data", requestBody);result.put("msg", "新增商品信息");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "新增商品信息失败,此商品数据已存在");}return result;}@GetMapping(value = "/readGoodsInfo")public JSONObject readGoodsInfo(){TbGoodsImpl tbGoodsImpl = new TbGoodsImpl();List<TbGoods> tbGoodsList = tbGoodsMapper.selectByExample(tbGoodsImpl);JSONObject result = new JSONObject();if (!tbGoodsList.isEmpty()){result.put("code", 200);result.put("data", tbGoodsList);result.put("msg", "查询商品信息");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "查询商品信息失败,无商品数据");}return result;}@PutMapping(value = "/changeGoodsInfo")public JSONObject changeGoodsInfo(@RequestBody JSONObject requestBody){int gId = requestBody.getInteger("gId");TbGoodsImpl tbGoodsImpl = new TbGoodsImpl();TbGoodsImpl.Criteria criteria = tbGoodsImpl.createCriteria();criteria.andGIdEqualTo(gId);List<TbGoods> tbGoodsList = tbGoodsMapper.selectByExample(tbGoodsImpl);JSONObject result = new JSONObject();if (!tbGoodsList.isEmpty()){tbGoodsMapper.updateByExampleSelective(JSONObject.parseObject(requestBody.toJSONString(), TbGoods.class),tbGoodsImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "更新商品数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "更新商品数据失败,无此商品数据");}return result;}@DeleteMapping(value = "/removeGoodsInfo")public JSONObject removeGoodsInfo(@RequestBody JSONObject requestBody){int gId = requestBody.getInteger("gId");TbGoodsImpl tbGoodsImpl = new TbGoodsImpl();TbGoodsImpl.Criteria criteria = tbGoodsImpl.createCriteria();criteria.andGIdEqualTo(gId);List<TbGoods> tbGoodsList = tbGoodsMapper.selectByExample(tbGoodsImpl);JSONObject result = new JSONObject();if (!tbGoodsList.isEmpty()){tbGoodsMapper.deleteByExample(tbGoodsImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "删除商品数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "删除商品数据失败,无此商品数据");}return result;}
}
7.3.3 接口测试
新增商品数据
url
127.0.0.1:8088/xh/v1/goods/addGoodsInfo
请求类型
POST
请求参数
{"gId": 100001,"gName": "海洋至尊洗面奶","gCategory": "护肤品","gPrice": 46.90,"gInventory": 98,"gStatus": "上架"}
postman截图
查询商品数据
url
127.0.0.1:8088/xh/v1/goods/readGoodsInfo
请求类型
GET
请求参数 空
postman截图
更新商品数据
url
127.0.0.1:8088/xh/v1/goods/updateGoodsInfo
请求类型
PUT
请求参数
{"gId": 100002,"gName": "韩束男士补水保湿乳","gCategory": "护肤品","gPrice": 90.98,"gInventory": 58,"gStatus": "上架"}
postman截图
移除商品数据
url
127.0.0.1:8088/xh/v1/goods/removeGoodsInfo
请求类型
DELETE
请求参数
{"gId":"100001"
}
postman截图
7.4 订单管理接口
7.4.1 建表
创建商品表tb_order
CREATE TABLE tb_order(id INT AUTO_INCREMENT PRIMARY KEY,o_id INT NOT NULL COMMENT "订单号(订单id)",username VARCHAR(255) NOT NULL COMMENT "客户名称",o_price DOUBLE NOT NULL COMMENT "订单价格",o_time VARCHAR(255) NOT NULL COMMENT "下单时间",o_status VARCHAR(255) NOT NULL COMMENT "订单状态"
);
7.4.2 接口创建(OrderInfoController.java)
在com.xh.order.dao包下根据表tb_order生成代码,配置好注解后
在com.xh.order.controller包下创建商品管理类OrderInfoController.java
代码如下
package com.xh.order.controller;import com.alibaba.fastjson.JSONObject;
import com.xh.order.dao.TbOrder;
import com.xh.order.dao.TbOrderImpl;
import com.xh.order.dao.TbOrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** @func:* @author: LiBai* @version: v1.0* @createTime: 2025/4/18 14:10*/
@CrossOrigin
@RestController
@RequestMapping(value = "/xh/v1/order")
public class OrderInfoController {@AutowiredTbOrderMapper tbOrderMapper;@PostMapping(value = "/addOrderInfo")public JSONObject addOrderInfo(@RequestBody JSONObject requestBody){TbOrderImpl tbOrderImpl = new TbOrderImpl();TbOrderImpl.Criteria criteria = tbOrderImpl.createCriteria();criteria.andOIdEqualTo(requestBody.getString("oId"));List<TbOrder> tbOrders = tbOrderMapper.selectByExample(tbOrderImpl);JSONObject result = new JSONObject();if (tbOrders.isEmpty()){tbOrderMapper.insert(JSONObject.parseObject(requestBody.toJSONString(), TbOrder.class));result.put("code", 200);result.put("data", requestBody);result.put("msg", "新增订单数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "新增订单数据失败,此订单数据已存在");}return result;}@GetMapping(value = "/readOrderInfo")public JSONObject readOrderInfo(){TbOrderImpl tbOrderImpl = new TbOrderImpl();List<TbOrder> tbOrders = tbOrderMapper.selectByExample(tbOrderImpl);JSONObject result = new JSONObject();if (!tbOrders.isEmpty()){result.put("code", 200);result.put("data", tbOrders);result.put("msg", "查询订单数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "查询订单数据失败,未查询到订单数据");}return result;}@PutMapping(value = "/changeOrderInfo")public JSONObject changeOrderInfo(@RequestBody JSONObject requestBody){TbOrderImpl tbOrderImpl = new TbOrderImpl();TbOrderImpl.Criteria criteria = tbOrderImpl.createCriteria();criteria.andOIdEqualTo(requestBody.getString("oId"));List<TbOrder> tbOrders = tbOrderMapper.selectByExample(tbOrderImpl);JSONObject result = new JSONObject();if (!tbOrders.isEmpty()){tbOrderMapper.updateByExampleSelective(JSONObject.parseObject(requestBody.toJSONString(), TbOrder.class),tbOrderImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "更新订单数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "更新订单数据失败,未查询到此订单数据");}return result;}@DeleteMapping(value = "/removeOrderInfo")public JSONObject removeOrderInfo(@RequestBody JSONObject requestBody){TbOrderImpl tbOrderImpl = new TbOrderImpl();TbOrderImpl.Criteria criteria = tbOrderImpl.createCriteria();criteria.andOIdEqualTo(requestBody.getString("oId"));List<TbOrder> tbOrders = tbOrderMapper.selectByExample(tbOrderImpl);JSONObject result = new JSONObject();if (!tbOrders.isEmpty()){tbOrderMapper.deleteByExample(tbOrderImpl);result.put("code", 200);result.put("data", requestBody);result.put("msg", "移除订单数据");}else{result.put("code", 4000);result.put("data", "");result.put("msg", "移除订单数据失败,此订单数据不存在");}return result;}}
7.4.3 接口测试
新增商品数据
url
127.0.0.1:8088/xh/v1/order/addOrderInfo
请求类型
POST
请求参数
{"oId": "20250418152634000001","username": "libai","oPrice": 121.20,"oTime": "2025-04-18,15:26:34","oStatus": "配送中"}
postman截图
查询商品数据
url
127.0.0.1:8088/xh/v1/order/readOrderInfo
请求类型
GET
请求参数 空
postman截图
更新商品数据
url
127.0.0.1:8088/xh/v1/order/updateOrderInfo
请求类型
PUT
请求参数
{"oId": "20250418154624000002","username": "liqingzhao","oPrice": 166.89,"oTime": "2025-04-18,15:46:24","oStatus": "未配送"}
postman截图
移除商品数据
url
127.0.0.1:8088/xh/v1/order/removeOrderInfo
请求类型
DELETE
请求参数
{"oId": "20250418154624000002"}
postman截图
以上就是入门实战全部内容
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇