后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用

目录

  • 后端数据增删改查
    • Springboot 实体(entity)类引进
      • 添加UserMapper接口
    • 创建对用的UserController
    • 注意
    • 数据库查询不一致
    • 新增
    • 数据更新
    • 删除
    • postman测试

后端数据增删改查

基于之前构建系统,实现用户数据的CRUD。

  1. 打开navicat16,新建表sys_user·,表内字段如下图所示,注意创建之后应设置为主键自增
    在这里插入图片描述
  2. 设置create_time为当前时间自动填充。
    在这里插入图片描述
  3. 添加信息
    在这里插入图片描述

Springboot 实体(entity)类引进

在IDEA中创建一个包entity,并新建一个实体类UserEntity。

代码如下

public class UserEntity {
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String phone;
    private String nickname;
    private String address;
    private String create_time;
    private String avatar;
    private String role;

    public UserEntity() {
    }

    public UserEntity(Integer id, String username, String password, String email, String phone, String nickname, String address, String create_time, String avatar, String role) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.phone = phone;
        this.nickname = nickname;
        this.address = address;
        this.create_time = create_time;
        this.avatar = avatar;
        this.role = role;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCreate_time() {
        return create_time;
    }

    public void setCreate_time(String create_time) {
        this.create_time = create_time;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

在这里插入图片描述
也可使用lombok提供的插件,使用@Date
实现上述功能,代码如下:

import lombok.Data;

@Data
public class UserEntity {
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String phone;
    private String nickname;
    private String address;
    private String create_time;
    private String avatar;
    private String role;
    
}

在这里插入图片描述

添加UserMapper接口

在项目目录下建一个mapper包,在此包下建立UserMapper接口,UserMapper接口中代码如下:

@Mapper
public interface UserMapper {
   @Select("select * from sys_user")
   List<UserEntity> findAll();
}

在这里插入图片描述
@Mapper:为注入接口注解。
@Select:查询语句注解。

创建对用的UserController

在这里插入图片描述


  @Autowired
    private UserMapper userMapper;
        @GetMapping("/")
        public List<UserEntity> index(){
            return userMapper.findAll();
        }

注意

这里我们已经开始不使用html文件了,也就不需要插件了,请大家务必记得将这个依赖删除,否则运行的时候就会报错。
在pom文件中删除这个thymeleaf依赖。

在这里插入图片描述
运行前检查连接数据库
在这里插入图片描述
在这里插入图片描述

数据库查询不一致

在这里插入图片描述
在这里插入图片描述
与表内数据不一致,分析原因:
数据库未引入:
在这里插入图片描述
在注解@selectalt+enter弹出如下界面:
在这里插入图片描述
第一次使用这个会自动下载包等待片刻后出现:
在这里插入图片描述

连接成功!
点击Idea右侧与navicat 16 一致说明连接成功
在这里插入图片描述
在这里插入图片描述
这个地方全局与全项目都设置为Mysql
在这里插入图片描述
但是修改后还是有问题,冥思苦想Controller更改代码为:

@Controller

public class UserController {



    @Autowired
    private UserMapper userMapper;
        @GetMapping("/user")
        @ResponseBody
        public List<UserEntity> index(){
            return userMapper.findAll();
        }

成功:
在这里插入图片描述
其实也可修改为:

@RestController

public class UserController {
    @Autowired
    private UserMapper userMapper;
        @GetMapping("/")
        public List<UserEntity> index(){
            return userMapper.findAll();
        }

}

效果与上诉一致,注意 @RestController相当于@Controller + @ResponseBody但前者无法返回界面只能返回数据

仔细搜索资料@RequestMapping("/user")不好用原因找到,既应改成@RequestMapping("user")输入连接为:http://localhost:8080/user/
修改后代码为:

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserMapper userMapper;
        @GetMapping("/")
        public List<UserEntity> index(){
            return userMapper.findAll();
        }

}

新增

  1. 在mapper中新增方法代码如下:
    @Insert("insert into sys_user(username,password,email,phone,nickname,address,avatar,role) " +
            "VALUES(#{username},#{password},#{email},#{phone},#{nickname},#{address},#{avatar},#{role});")
        //这里只是做测试使用
    int insert(UserEntity userEntity);

在这里插入图片描述
特别说明: 不管是新增还是更新,这样写是最简单的方式,没有表关联,也还不能实现对个别字段的新增。这时候就需要动态SQL语句,后面会讲xml文件。

  1. 新建UserService类
    新建一个service包,并新建一个UserService类,进行数据业务逻辑。
    在这里插入图片描述
    注意注解位置。
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public int save(UserEntity userEntity){
        return userMapper.insert(userEntity);
    }
}
  1. UserController类添加save接口
    注意添加或者修改使用post,查询一般为get,代码如下:
    @Autowired
    public UserService userService;
  @PostMapping
        //这里做了一个单纯的添加的示例,使用的是mapper中的insert方法,修改也用这个方法
              public Integer save(@RequestBody UserEntity userEntity){
                return userService.save(userEntity);
        }

在这里插入图片描述

数据更新

在这里插入图片描述

    @Update("update sys_user set username=#{username},password=#{password}," +
            "nickname=#{nickname},email=#{email},phone=#{phone},address=#{address} where id=#{id}")
    int update(UserEntity userEntity);

在这里插入图片描述

 private UserMapper userMapper;
    public int save(UserEntity userEntity){
        //如果user没有id则表明是新增
        if(userEntity.getId()==null){
            return userMapper.insert(userEntity);
        }
        //否则就是更新
        else {
            return userMapper.update(userEntity);
        }
    }

使用postman作为测试接口,进行更新测试。这时候就会发现,更新的时候虽然可以实现对ID的判断,但是如果只是更新某一个字段,就会发现,其他的字段值变为空了,这时候就需要动态SQL了,后面XML需要登场了。

删除

在这里插入图片描述

 @Delete("delete from sys_user where id=#{id}")
    int deleteById(@Param("id") Integer id);

在这里插入图片描述

 public Integer deleteById(Integer id) {
        return userMapper.deleteById(id);
    }

在这里插入图片描述

 @DeleteMapping("/{id}")
        public Integer deleteById(@PathVariable Integer id){

                return  userService.deleteById(id);
        }

postman测试


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
id 为1的数据发生了改变。

在这里插入图片描述
在这里插入图片描述
id 为一数据被删除。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

堆外内存泄露排查经历

优质博文&#xff1a;IT-BLOG-CN 一、问题描述 淘宝后台应用从今年某个时间开始docker oom的量突然变多&#xff0c;确定为堆外内存泄露。 后面继续按照上一篇对外内存分析方法的进行排查(jemalloc、pmap、mallocpmap/mapsNMTjstackgdb)&#xff0c;但都没有定位到问题。至于…

WebSocket详解、WebSocket入门案例

目录 1.1 WebSocket介绍 http协议&#xff1a; webSocket协议&#xff1a; 1.2WebSocket协议&#xff1a; 1.3客户端&#xff08;浏览器&#xff09;实现 1.3.2 WebSocket对象的相关事宜&#xff1a; 1.3.3 WebSOcket方法 1.4 服务端实现 服务端如何接收客户端发送的请…

Vue3 源码解析(三):静态提升

什么是静态提升 Vue3 尚未发布正式版本前&#xff0c;尤大在一次关于 Vue3 的分享中提及了静态提升&#xff0c;当时笔者就对这个亮点产生了好奇&#xff0c;所以在源码阅读时&#xff0c;静态提升也是笔者的一个重点阅读点。 那么什么是静态提升呢&#xff1f;当 Vue 的编译器…

C++优选算法十四 优先级队列(堆)

C 中的优先级队列&#xff08;Priority Queue&#xff09;是一种容器适配器&#xff0c;它提供队列的功能&#xff0c;但元素不是按照插入的顺序被访问&#xff0c;而是根据它们的优先级被访问。默认情况下&#xff0c;优先级队列是一个最大堆&#xff08;Max-Heap&#xff09;…

综合练习--轮播图

本篇博客将教大家实现一个基础的轮播图。 源代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

“AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体

作者&#xff5c;郭源 前言 在后LLM时代&#xff0c;随着大语言模型和多模态大模型技术的日益成熟&#xff0c;AI技术的实际应用及其社会价值愈发受到重视。AI智能体&#xff08;AI Agent&#xff09;技术通过集成行为规划、记忆存储、工具调用等机制&#xff0c;为大模型装上…

光伏电站的智慧施工详解

光伏电站的智慧施工是利用先进的技术和管理方法&#xff0c;提高施工效率、质量和安全性&#xff0c;降低成本&#xff0c;实现光伏电站建设的智能化、数字化和绿色化。 下面从鹧鸪云智慧施工软件详细施工管理的步骤说起。 项目总览 包含我负责的项目、我参与的项目、我创建…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

李春葆《数据结构》-课后习题代码题

一&#xff1a;假设不带权有向图采用邻接矩阵 g 存储&#xff0c;设计实现以下功能的算法&#xff1a; &#xff08;1&#xff09;求出图中每个顶点的入度。 代码&#xff1a; void indegree(MatGraph g){int i,j,n;printf("各个顶点的入度&#xff1a;\n");for(i…

wsl安装

一. wsl简介 1. wsl和wsl2的区别 wsl需要把linux命令翻译为windows命令&#xff0c;性能差一些。 wsl2直接使用linux内核&#xff0c;不需要翻译&#xff0c;性能好&#xff0c;但开销相对大一点&#xff0c;因为需要多运行一个hyper-v虚拟机 (并非完整的虚拟机&#xff0c;是…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

GPT中转站技术架构

本文介绍阿波罗AI中转站&#xff08;https://api.ablai.top/&#xff09;的技术架构&#xff0c;该中转API的技术架构采用了分布式架构、智能调度和API中转等技术&#xff0c;确保了全球范围内的高效访问和稳定运行。以下是对该技术架构的详细分析&#xff1a; 分布式架构 分…

远程服务器Docker使用本地代理加速访问外部资源

Docker在pull镜像的时候非常缓慢&#xff0c;但是远程主机没有安装代理&#xff0c;就很为难&#xff0c;现在分享一个可以让远程服务器使用本地代理加速的方法 配置Docker代理 新建文件夹 mkdir -p /etc/systemd/system/docker.service.d 切换到这个文件夹里 cd /etc/system…

【详解】树链剖分之重链剖分

终于搞懂了树链剖分的一些皮毛了…… 树链剖分 “树链剖分”&#xff0c;顾名思义&#xff0c;就是把一棵树剖分成一条条的链…… 重链剖分 重链剖分的基本概念 重链剖分是树链剖分的一种&#xff0c;它会把树剖分成一条条重链…… 什么是重链呢&#xff1f; 重链就是连接…

RocketMQ: 部署结构与存储特点

RocketMQ 是什么 它是一个队列模型的消息中间件&#xff0c;具有高性能、高可靠、高实时、分布式特点 Producer、Consumer、队列都可以分布式Producer 向一些队列轮流发送消息 队列集合称为 TopicConsumer 如果做广播消费则一个 consumer 实例消费这个 Topic 对应的所有队列如果…

帮助中心FAQ系统:打造卓越客户服务体验的关键驱动力

在当今这个信息爆炸的时代&#xff0c;企业为了保持市场竞争力&#xff0c;必须不断提升客户服务体验。FAQ&#xff08;常见问题解答&#xff09;系统&#xff0c;作为一种高效且便捷的用户服务工具&#xff0c;正日益受到企业的青睐。本文将阐述FAQ系统的核心价值、功能特性以…

如何使用 Python 开发一个简单的文本数据转换为 Excel 工具

目录 一、准备工作 二、理解文本数据格式 三、开发文本数据转换为Excel工具 读取CSV文件 将DataFrame写入Excel文件 处理其他格式的文本数据 读取纯文本文件&#xff1a; 读取TSV文件&#xff1a; 四、完整代码与工具封装 五、使用工具 六、总结 在数据分析和处理的…

Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥

续 上集说到语义搜索&#xff0c;这集接着玩一下图搜图&#xff0c;这种场景在电商中很常见——拍照搜商品。图搜图实现非常类似语义搜索&#xff0c;代码逻辑结构都很类似… 开搞 还是老地方modelscope找个Vision Transformer模型&#xff0c;这里选用vit-base-patch16-224…

Flink【基于时间的双流联结 Demo】

前言 1、基于时间的双流联结&#xff08;Join&#xff09; 对于两条流的合并&#xff0c;很多情况我们并不是简单地将所有数据放在一起&#xff0c;而是希望根据某个字段的值将它们联结起来&#xff0c;“配对”去做处理。例如用传感器监控火情时&#xff0c;我们需要将大量温度…

大数据入门-什么是Flink

这里简单介绍Flink的概念、架构、特性等。至于比较详细的介绍&#xff0c;会单独针对这个组件进行详细介绍&#xff0c;可以关注博客后续阅读。 一、概念 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算。 Flink的四大基…