SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)

news/2024/10/2 18:23:13

目录

前期准备

构建项目(IDEA2023.1.2,JDK21,SpringBoot3.3.3)

添加启动器

Model准备

这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层

注意选择MyBatis-Plus3以及Lombok

然后再在service接口中定义我们所需要的方法

以及实现类(利用MyBatis-Plus省去我们编写sql语句)

控制器开发

测试

热部署


前期准备

构建项目(IDEA2023.1.2,JDK21,SpringBoot3.3.3)

添加启动器

        <!--MyBatis-Plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.6</version></dependency><!-- Druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>

Model准备

这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层

注意选择MyBatis-Plus3以及Lombok

然后再在service接口中定义我们所需要的方法
package com.ktjiaoyu.crm.service;import com.ktjiaoyu.crm.entity.User;import java.util.List;/*** @author cuishujian* @date 2024/9/2*/
public interface UserService {User login(String usrName, String usrPassword);int addUser(User user);int deleteUser(Long usrId);int updateUser(User user);User getUser(Long usrId);List<User> findAllUsers();
}
以及实现类(利用MyBatis-Plus省去我们编写sql语句)
package com.ktjiaoyu.crm.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ktjiaoyu.crm.entity.User;
import com.ktjiaoyu.crm.mapper.UserMapper;
import com.ktjiaoyu.crm.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;import java.util.List;/*** @author cuishujian* @date 2024/9/2*/
@Service("userService")
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic User login(String usrName, String usrPassword) {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("usr_name",usrName);wrapper.eq("usr_password",usrPassword);List<User> list = userMapper.selectList(wrapper);return list.get(0);}@Overridepublic int addUser(User user) {return userMapper.insert(user);}@Overridepublic int deleteUser(Long usrId) {return userMapper.deleteById(usrId);}@Overridepublic int updateUser(User user) {return userMapper.updateById(user);}@Overridepublic User getUser(Long usrId) {return userMapper.selectById(usrId);}@Overridepublic List<User> findAllUsers() {return userMapper.selectList(null);}
}

控制器开发

package com.ktjiaoyu.crm.controller;import com.ktjiaoyu.crm.entity.User;
import com.ktjiaoyu.crm.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** @author cuishujian* @date 2024/9/3*/
@RestController
public class UserController {@Resourceprivate UserService userService;@GetMapping("/user")public List<User> findAllUsers(){List<User> list = userService.findAllUsers();return list;}@GetMapping("/user/{id}")public User getUser(@PathVariable("id") Long usrId){User user = userService.getUser(usrId);return user;}@PostMapping("/user")public void addUser(User user){userService.addUser(user);}@PutMapping("/user")public void updateUser(User user){userService.updateUser(user);}@DeleteMapping("/user/{id}")public void deleteUser(@PathVariable("id") Long usrId){userService.deleteUser(usrId);}}

到这里我们就基本完成了Web项目的后端代码的开发,下面就进入我们的测试环节

测试

这里我们使用SpringBoot中对Web测试的一种方案:MockMvc。MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度更快、不依赖网络环境,而且提供了一套验证的工具,可以使得请求的验证统一而且更方便。

下面是MockMvc测试类的基本结构

package com.ktjiaoyu.crm;import jakarta.annotation.Resource;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.WebApplicationContext;/*** @author cuishujian* @date 2024/9/3*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserControllerTester {@Resourceprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void setup(){this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}@Testpublic void testGetUser() throws Exception{String mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/user/2")).andReturn().getResponse().getContentAsString();System.out.println("Result===" + mvcResult);}@Testpublic  void testAddUser() throws Exception{final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();params.add("usrName","RESTful");params.add("usrPassword","123456");params.add("usrRoleId","2");params.add("usrFlag","1");mockMvc.perform(MockMvcRequestBuilders.post("/user").params(params)).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print());}
}

testGetUser测试结果

testAddUser测试结果

最后再告诉大家一个Web开发中非常实用的东西,热部署,而热部署的实现再IDEA2023.2.1中的实现也非常简单只需要添加maven依赖以及设置一下就可以实现了

热部署

maven依赖

        <!-- 热加载 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

修改设置


https://dhexx.cn/news/show-5426488.html

相关文章

解决VSCode文件的中文GBK和UTF-8编码之间乱码问题

NOTE&#xff1a;近日笔者在使用VSCode编码环境的时候&#xff0c;出现了中文和UTF-8两者之间乱码的问题&#xff0c;特编写本片文章&#xff0c;以作学习记录。 1.需求 用VSCode打开外部的GBK2312编码文件&#xff0c;想在VSCode中统一以UTF-8编码查看&#xff08;笔者推荐U…

Java 线程相关 总结

1. 简介 本文总结一下Java中线程相关的知识。 2.线程的状态 ‌Java线程有六种状态‌&#xff1a; ‌NEW状态‌&#xff1a;线程对象已被创建&#xff0c;但尚未启动。 ‌RUNNABLE状态‌&#xff1a;1.线程已经准备好&#xff0c;随时可以被CPU执行。2.线程正在执行。TERMI…

Oracle从入门到放弃

Oracle从入门到放弃 左连接和右连接Where子查询单行子查询多行子查询 from子句的子查询select子句的子查询oracle分页序列序列的应用 索引PL/SQL变量声明与赋值select into 赋值变量属性类型 异常循环游标存储函数存储过程不带传出参数的存储过程带传出参数的存储过程 左连接和…

利用pandas为海量数据添加UUID并实现精准筛选

文章目录 摘要引言环境准备构建示例数据添加UUID列精准筛选数据成果展示 摘要 在数据处理中&#xff0c;为每条数据记录赋予独特身份标识至关重要。本文通过引入UUID 作为全局唯一标识符&#xff0c;结合强大的pandas库&#xff0c;详细介绍了如何为数据表轻松添加UUID&#x…

Deep Learning-Based Object Pose Estimation:A Comprehensive Survey

论文&#xff1a;https://arxiv.org/pdf/2405.07801v3 项目&#xff1a;https://github.com/CNJianLiu/Awesome-Object-Pose-Estimation 年份&#xff1a;2024 方向&#xff1a;姿态估计 1. 目标姿态估计定义 估计图像中目标相对于相机的姿态&#xff0c; 目标姿态估计是增…

TDengine 与 SCADA 强强联合:提升工业数据管理的效率与精准

随着时序数据库&#xff08;Time Series Database&#xff09;的日益普及&#xff0c;越来越多的工业自动化控制&#xff08;工控&#xff09;人员开始认识到其强大能力。然而&#xff0c;时序数据库在传统实时数据库应用领域&#xff0c;特别是在过程监控层的推广仍面临挑战&a…

Java标识符、关键字和保留字

Java中的标识符、关键字和保留字 标识符概念标识符命名规则&#xff08;必须遵守&#xff09;标识符命名规范&#xff08;更加专业&#xff09;关键字保留字 标识符概念 1.Java对各种变量、方法和类等命名时使用的字符序列称为标识符。 2.凡是自己可以起名字的地方都叫标识符 …

“华为杯”第二十一届中国研究生数学建模竞赛开赛须知

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 1.加密赛题开始下载时间&#xff1a;2024年9月20日8:00&am…

不断挑战才有不断机遇!Eagle Trader等你来加入!

2024“Eagle Trader杯”全国职业交易联赛S1赛季已火热进行一个多月&#xff0c;吸引了超过355名交易员的积极参与&#xff01;目前&#xff0c;每天都有新的交易员踊跃报名参加&#xff01; 经过严格地交易考核&#xff0c;13名选手成功通过初试&#xff0c;正进入下一阶段的挑…

波导阵列天线学习笔记 馈电网络1 使用X型全公共波导馈网的毫米波大规模天线阵列的带宽提升

摘要&#xff1a; 全公共波导馈网的一次反射等效模型被研究用于提出一种毫米波大规模天线阵列带宽提升的新方法。理论分析显示由馈电网络拓扑造成的指定频率的多级小反射的同相叠加现象是影响大规模阵列的可实现带宽的重要因素&#xff0c;除了包含阵列的独立功分器和反射器的带…