Java程序设计:spring boot(7)——数据访问操作

news2025/1/19 23:17:01

目录

1 查询操作

1.1 接口方法定义

1.2 映射文件配置

1.3 UserService

1.4 UserController

2 添加操作

2.1 接口方式定义

2.2 映射文件配置

2.3 添加 commons-lang3 依赖

2.4 AssertUtil ⼯具类

2.5 ParamsException ⾃定义异常

2.6 UserService

2.7 ResultInfo

2.8 UserController

3 修改操作

3.1 接口方法定义

3.2 映射文件配置

3.3 UserService

3.4 UserController

4 删除操作

4.1 接口方法定义

4.2 映射文件配置

4.3 UserService

4.4 UserController

5 分页条件查询操作

5.1 UserQuery

5.2 接口方法定义

5.3 映射文件配置

5.4 UserService

5.5 UserController

6 PostMan 工具下载与使用


完成 SpringBoot 与 Mybatis 集成后,以⽤户表为例实现⼀套⽤户模块基本数据维护。

1 查询操作

1.1 接口方法定义

UserMapper 接⼝添加查询的⽅法:

public interface UserMapper {
 // 通过⽤户ID查询⽤户
 public User queryById(Integer id);
}

1.2 映射文件配置

<?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.xxxx.springboot.dao.UserMapper">
 <select id="queryById" parameterType="int"
 resultType="com.xxxx.springboot.po.User">
 select
 *
 from
 tb_user
 where
 id = #{id,jdbcType=INTEGER}
 </select>
</mapper>

1.3 UserService

@Service
public class UserService {
 @Resource
 private UserMapper userMapper;
 /**
 * 通过⽤户ID查询⽤户
 * @param id
 * @return
 */
 public User queryById(Integer id){
 return userMapper.queryById(id);
 }
}

1.4 UserController

@RestController
public class UserController {
 @Resource
 private UserService userService;
 /**
 * 根据⽤户ID查询⽤户对象
 * @param userId
 * @return
 */
 @GetMapping("user/{userId}")
 public User queryUserByUserId(@PathVariable Integer userId){
 return userService.queryById(userId);
 }
}

2 添加操作

2.1 接口方式定义

public interface UserMapper {
 // 添加⽤户
 public int save(User user);
}

2.2 映射文件配置

<?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.xxxx.springboot.dao.UserMapper">
 
 <insert id="save" parameterType="com.xxxx.springboot.po.User">
 insert into
 tb_user
 (user_name,user_pwd)
 values
 (#{userName},#{userPwd})
 </insert>
 
</mapper>

2.3 添加 commons-lang3 依赖

       如果需要使⽤ StringUtils ⼯具类,需要引⼊ commons-lang3 依赖。

<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-lang3</artifactId>
</dependency>

2.4 AssertUtil ⼯具类

package com.xxxx.springboot.utils;
import com.xxxx.springboot.exceptions.ParamsException;
public class AssertUtil {
 /**
 * 判断结果是否为true
 * 如果结果为true,抛出异常
 * @param userName
 * @return
 */
 public static void isTrue(Boolean flag, String msg){
 if(flag){
 throw new ParamsException(msg);
 }
 }
}

2.5 ParamsException ⾃定义异常

package com.xxxx.springboot.exceptions;
/**
* ⾃定义参数异常
*/
public class ParamsException extends RuntimeException {
 private Integer code = 300;
 private String msg = "参数异常!";
 public ParamsException() {
 super("参数异常!");
 }
 public ParamsException(String msg) {
 super(msg);
 this.msg = msg;
 }
 public ParamsException(Integer code) {
 super("参数异常!");
 this.code = code;
 }
 public ParamsException(Integer code, String msg) {
 super(msg);
 this.code = code;
 this.msg = msg;
 }
 public Integer getCode() {
 return code;
 }
 public void setCode(Integer code) {
 this.code = code;
 }
 public String getMsg() {
 return msg;
 }
 public void setMsg(String msg) {
 this.msg = msg;
 }
}

2.6 UserService

@Service
public class UserService {
 @Resource
 private UserMapper userMapper;
 /**
 * 添加⽤户
 * @param user
 */
 public void saveUser(User user) {
 AssertUtil.isTrue(StringUtils.isBlank(user.getUserName()), "⽤户名不能为
空!");
 AssertUtil.isTrue(StringUtils.isBlank(user.getUserPwd()),"⽤户密码不能为
空!");
 User temp = userMapper.queryUserByUserName(user.getUserName());
 AssertUtil.isTrue(null != temp, "该⽤户已存在!");
 AssertUtil.isTrue(userMapper.save(user) < 1,"⽤户记录添加失败!");
 }
}

2.7 ResultInfo

package com.xxxx.springboot.po.vo;
public class ResultInfo {
 
 private Integer code = 200;
 private String msg = "操作成功";
 private Object result;
 
 public Integer getCode() {
 return code;
 }
 public void setCode(Integer code) {
 this.code = code;
 }
 public String getMsg() {
 return msg;
 }
 public void setMsg(String msg) {
 this.msg = msg;
 }
 public Object getResult() {
 return result;
 }
 public void setResult(Object result) {
 this.result = result;
 }
}

2.8 UserController

@RestController
public class UserController {
 @Resource
 private UserService userService;
 /**
 * 添加⽤户
 * @param user
 * @return
 */
 @PutMapping("user")
 public ResultInfo saveUser(@RequestBody User user){
 ResultInfo resultInfo = new ResultInfo();
 try {
 userService.saveUser(user);
 } catch (ParamsException e) {
 e.printStackTrace();
 resultInfo.setCode(e.getCode());
 resultInfo.setMsg(e.getMsg());
 }catch (Exception e) {
 e.printStackTrace();
 resultInfo.setCode(300);
 resultInfo.setMsg("记录添加失败!");
 }
 return resultInfo;
 }
}

3 修改操作

3.1 接口方法定义

public interface UserMapper {
 // 修改⽤户
 public int update(User user);
}

3.2 映射文件配置

<?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.xxxx.springboot.dao.UserMapper">
 <update id="update" parameterType="com.xxxx.springboot.po.User">
 update
 tb_user
 set
 user_name =#{userName},user_pwd=#{userPwd}
 where
 id = #{id}
 </update>
</mapper>

3.3 UserService

@Service
public class UserService {
 @Resource
 private UserMapper userMapper;
 /**
 * 修改⽤户
 * @param user
 */
 public void updateUser(User user) {
 AssertUtil.isTrue(StringUtils.isBlank(user.getUserName()), "⽤户名不能为
空!");
 AssertUtil.isTrue(StringUtils.isBlank(user.getUserPwd()),"⽤户密码不能为
空!");
 User temp = userMapper.queryUserByUserName(user.getUserName());
 AssertUtil.isTrue(null != temp && !
(temp.getId().equals(user.getId())), "该⽤户已存在!");
 AssertUtil.isTrue(userMapper.update(user) < 1,"⽤户记录添加失败!");
 }
}

3.4 UserController

@RestController
public class UserController {
 @Resource
 private UserService userService;
 /**
 * 修改⽤户
 * @param user
 * @return
 */
 @PostMapping("user")
 public ResultInfo updateUser(@RequestBody User user){
 ResultInfo resultInfo = new ResultInfo();
 try {
 userService.updateUser(user);
 } catch (ParamsException e) {
 e.printStackTrace();
 resultInfo.setCode(e.getCode());
 resultInfo.setMsg(e.getMsg());
 }catch (Exception e) {
 e.printStackTrace();
 resultInfo.setCode(300);
 resultInfo.setMsg("记录更新失败!");
 }
 return resultInfo;
 }
}

4 删除操作

4.1 接口方法定义

public interface UserMapper {
 // 删除⽤户
 public int deleteUserById(Integer id);
}

4.2 映射文件配置

<?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.xxxx.springboot.dao.UserMapper">
 <delete id="deleteUserById" parameterType="int">
 delete from
 tb_user
 where
 id=#{id}
 </delete>
</mapper>

4.3 UserService

@Service
public class UserService {
 @Resource
 private UserMapper userMapper;
 /**
 * 删除⽤户
 * @param id
 */
 public void deleteUser(Integer id){
 
 AssertUtil.isTrue(null == id || null == userMapper.queryById(id),"待删
除记录不存在!");
 AssertUtil.isTrue(userMapper.deleteUserById(id)<1,"⽤户删除失败!");
 }
}

4.4 UserController

@RestController
public class UserController {
 @Resource
 private UserService userService;
 /**
 * 删除⽤户
 * @param userId
 * @return
 */
 @DeleteMapping("user/{userId}")
 public ResultInfo deleteUser(@PathVariable Integer userId){
 ResultInfo resultInfo = new ResultInfo();
 try {
 userService.deleteUser(userId);
 } catch (ParamsException e) {
 e.printStackTrace();
 resultInfo.setCode(e.getCode());
 resultInfo.setMsg(e.getMsg());
 }catch (Exception e) {
 e.printStackTrace();
 resultInfo.setCode(300);
 resultInfo.setMsg("记录删除失败!");
 }
 return resultInfo;
 }
}

5 分页条件查询操作

5.1 UserQuery

package com.xxxx.springboot.query;
public class UserQuery {
 
 private Integer pageNum = 1; // 当前⻚
 private Integer pageSize = 10; // 每⻚显示的数量
 private String userName; // 查询条件:⽤户名
 public Integer getPageNum() {
 return pageNum;
 }
 public void setPageNum(Integer pageNum) {
 this.pageNum = pageNum;
 }
 public Integer getPageSize() {
 return pageSize;
 }
 public void setPageSize(Integer pageSize) {
 this.pageSize = pageSize;
 }
 public String getUserName() {
 return userName;
 }
 public void setUserName(String userName) {
 this.userName = userName;
 }
}

5.2 接口方法定义

public interface UserMapper {
 // 通过条件,分⻚查询⽤户列表
 public List<User> selectByParams(UserQuery userQuery);
}

5.3 映射文件配置

<?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.xxxx.springboot.dao.UserMapper">
 <select id="selectByParams"
parameterType="com.xxxx.springboot.query.UserQuery"
 resultType="com.xxxx.springboot.po.User">
 select
 *
 from
 tb_user
 <where>
 <if test="null != userName and userName !=''">
 and user_name like concat('%',#{userName},'%')
 </if>
 </where>
 </select>
</mapper>

5.4 UserService

@Service
public class UserService {
 @Resource
 private UserMapper userMapper;
 /**
 * 通过指定参数,分⻚查询⽤户列表
 * @param userQuery
 * @return
 */
 public PageInfo<User> queryUserByParams(UserQuery userQuery){
 PageHelper.startPage(userQuery.getPageNum(),userQuery.getPageSize());
 return new PageInfo<User>(userMapper.selectByParams(userQuery));
 }
}

5.5 UserController

@RestController
public class UserController {
 @Resource
 private UserService userService;
 /**
 * 通过指定参数,分⻚查询⽤户列表
 * @param userQuery
 * @return
 */
 @GetMapping("user/list")
 public PageInfo<User> list(UserQuery userQuery){
 return userService.queryUserByParams(userQuery);
 }
}

6 PostMan 工具下载与使用

       在企业 web 应⽤开发中,对服务器端接⼝进⾏测试,通常借助接⼝测试⼯具,这⾥使⽤ Postman 接⼝测试⼯具来对后台 restful 接⼝进⾏测试。

       Postman ⼯具下载地址 :http:// https://www.getpostman.com/apps,选中对应平台下载即可。

       下载安装后,启动 Postman 根据后台接⼝地址发送响应请求即可对接⼝进⾏测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDP传输协议Linux C语言实战

文章目录 1.UDP简介1.1特点1.2 UDP协议头部格式1.2.1 **UDP头部**&#xff1a;1.2.2 **头部意义**&#xff1a;1.2.3 **头部参数**&#xff1a; 1.3 UDP数据长度控制1.4 UDP协议建立框架 2. 函数介绍2.1 sendto函数2.2 recvform函数2.3 其他函数 3.实例3.1 通用结构体、IPV4结构…

算法的学习笔记—(牛客JZ50)

&#x1f600;前言 在处理字符串时&#xff0c;寻找第一个只出现一次的字符是一项常见的任务。本文将探讨几种有效的解法&#xff0c;包括使用 HashMap 和位集&#xff08;BitSet&#xff09;。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;第一个只出现…

软件分享丨豆包电脑端 AI 助手

豆包电脑端 AI 助手是由字节跳动推出&#xff0c;旨在为用户提供高效便捷的工作和学习体验。它能在工作、学习等场景中发挥重要作用&#xff0c;为用户提供智能辅助&#xff0c;下面简单介绍它的特点&#xff1a; 高效搜索&#xff1a;像优化后的百度&#xff0c;直接提问就能…

【本科毕业设计】基于单片机的智能家居防火防盗报警系统

基于单片机的智能家居防火防盗报警系统 相关资料链接下载摘要Abstract第1章 绪论1.1课题的背景1.2 研究的目的和意义 第2章 系统总体方案设计2.1 设计要求2.2 方案选择和论证2.2.1 单片机的选择2.2.2 显示方案的选择 第3章 系统硬件设计3.1 整体方案设计3.1.1 系统概述3.1.2 系…

C#通过异或(^)运算符制作二进制加密(C#实现加密)

快速了解异或运算符&#xff1a; 异或运算符在C#中用 “^” 来表示 口诀&#xff1a;相同取0&#xff0c;相异取1 简单加密解密winform示例&#xff1a; /// <summary>/// 异或运算符加密实现/// </summary>/// <param name"p_int_Num">初始值<…

生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘

在竞争日益激烈的零售领域&#xff0c;行业领导者始终在探索革新客户体验和优化运营的新途径&#xff0c;而生成式 AI 和向量搜索在这方面将大有可为。从个性化营销到高效库存管理&#xff0c;二者在零售领域的诸多应用场景中都展现出变革性潜力&#xff0c;已成为保持行业领先…

云电脑的真实使用体验

最近这几年&#xff0c;关于云电脑的宣传越来越多。 小枣君之前曾经给大家介绍过云电脑&#xff08;链接&#xff09;。简单来说&#xff0c;它属于云计算的一个应用。通过在云端虚拟出一些虚拟电脑&#xff0c;然后让用户可以远程使用&#xff08;仍然需要借助本地电脑&#x…

使用爬虫爬取Python中文开发者社区基础教程的数据

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

CANoe_C#调用CDD和CAPL调用CDD方法对比

引言 在汽车电子系统的开发和测试中,CANoe作为一款强大的网络仿真工具,广泛应用于各种通信协议的模拟和验证。为了实现复杂的测试场景,开发者可以使用不同的编程语言和方法来调用CANoe的功能。其中,C#和CAPL(CANoe Programming Language)是两种常用的编程方式。本文将对…

Golang | Leetcode Golang题解之第498题对角线遍历

题目&#xff1a; 题解&#xff1a; func findDiagonalOrder(mat [][]int) []int {m, n : len(mat), len(mat[0])ans : make([]int, 0, m*n)for i : 0; i < mn-1; i {if i%2 1 {x : max(i-n1, 0)y : min(i, n-1)for x < m && y > 0 {ans append(ans, mat[x…

学习笔记——交换——STP(生成树)工作原理

三、工作原理 STP的基本原理是在一个有二层环路的网络中&#xff0c;交换机通过运行STP&#xff0c;自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree)&#xff0c;树节点为某些交换机&#xff0c;树枝为某些链路。当网络拓扑发生变化时&#xff0c;STP…

《汇编语言》第15章——实验15安装新的 int 9 中断例程

安装新的 int9 中断例程 安装一个新的 int 9 中断例程&#xff0c;功能:在 DOS 下&#xff0c;按下A键后&#xff0c;除非不再松开如果松开&#xff0c;就显示满屏幕的A&#xff0c;其他的键照常处理。 提示&#xff0c;按下一个键时产生的扫描码称为通码&#xff0c;松开一个…

云计算作业一hadoop:问题解决备忘

教程地址&#xff1a;https://blog.csdn.net/qq_53877854/article/details/142412784 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33在root用户下编辑 静态ip地址配置后查看ip与配置不符 注意&#xff1a;确保在这之前已经在VMware的编辑>虚拟网络编…

OpenCV中的图像通道合并

在计算机视觉和图像处理领域&#xff0c;OpenCV是一个强大的工具库&#xff0c;它提供了从基本操作到复杂算法的广泛功能。今天&#xff0c;我们将通过一个简单的示例来探索OpenCV中的图像通道处理&#xff0c;特别是如何操作和理解BGR与RGB颜色空间的差异。 Lena图像&#xf…

WSL迁移到D盘

迁移WSL 下的 ubuntu 到D盘 使用工具LxRunOffline 如果出现下面的错误 使用其他版本 [ERROR] Couldnt set the case sensitive attribute of the directory "\\?\C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState…

TwinCAT3运动路径生成与执行

右键MAIN&#xff0c;点击Add添加Action&#xff0c;添加如下俩个名称的Action 在MAIN中添加如下代码&#xff1a; 在俩个Action中分别添加如下代码&#xff1a; 在MAIN程序中输入如下代码&#xff1a; 选择激活配置 弹出的对话框选择OK 弹出的对话框选择确定&…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(3)

11、HTTP 协议 11-1、协议的定义 HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础&#xff0c;是一种 client-server 协议&#xff0c;也就是说&#xff0c;请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通…

【解决】使用Hypermark将Markdown文件转化为HTML文件

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 文章目录 一、文件准备&#xff08;一&#xff09;HTML模板文件&#xff08;二&#xff09;MD文件夹和储存文件夹 二、文件转…

【C++贪心】1536. 排布二进制网格的最少交换次数|1880

本文涉及知识点 C贪心 决策包容性 LeetCode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid&#xff0c;每一次操作中&#xff0c;你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满…

QUIC 启动!

掘金地址&#xff1a;https://juejin.cn/post/7428200842229006377 引言 QUIC是什么&#xff1f;明明你每天都在用&#xff0c;明明每天都在timing&#xff0c;难道你不知道吗&#xff1f;啊&#xff1f;不会吧&#xff0c;不会吧。 那就让本文来让你全方位的了解这个协议。 …