鱼C论坛

 找回密码
 立即注册
查看: 1098|回复: 7

[已解决]请问在spring boot 工程里 下列代码是如何实现其更新用户信息功能的?

[复制链接]
发表于 2024-3-5 00:31:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是一个spring boot 工程代码 其目的是修改某用户的的一些信息


controller类有如下代码
        @PutMapping("/update")
        public Result update(@RequestBody User user) {
                userService.update(user);
                return Result.success();

service实现类有如下代码
        @Override
        public void update(User user) {
                userMapper.update(user);

mapper接口有如下代码?
        @Update("update user set nickname=#{nickname}, email=#{email}, update_time=now() where id=#{id}")
        void update(User user);

pojo层的User类里有如下代码

@Data
public class User {
    private Integer id;//主键ID
    private String username;//用户名
    private String password;//密码
    private String nickname;//昵称
    private String email;//邮箱
    private String userPic;//用户头像地址
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}


上述代码成功的实现了更改用户信息的功能  我的问题是写代码是如何实现这些功能的

首先在controller类里 是如何把传入的json数据转换成User对象的 是@RequestBody这个注解的了作用吗?
然后 在mapper接口里又是如何把这个User对象分拆成数据库里的各个字段 然后对应id 更新字段数据的
最佳答案
2024-3-5 00:32:09
首先,@PutMapping("/update")注解表示这个方法处理PUT请求,并使用"/update"路径。它接收一个User对象作为参数,并返回一个Result对象。

在controller中,@RequestBody注解用于将请求体中的json数据转换为User对象。Spring Boot会根据请求体中的json数据,自动将其转换为对应的Java对象。

然后,UserController调用userService的update方法来更新用户信息。在service中,update方法接收一个User对象,并调用userMapper的update方法来更新数据库中对应用户的信息。

在mapper接口中,@Update注解表示这是一个更新操作的SQL语句。其中,使用了占位符#{nickname}、#{email}和#{id}来映射User对象的属性值。这样,在执行SQL语句时,MyBatis会根据User对象的属性值替换相应的占位符,从而实现更新操作。

所以,整个流程是这样的:Controller接收到请求并将请求体中的json数据转换为User对象,然后调用Service的update方法。在Service的update方法中,调用Mapper的update方法,该方法执行SQL语句将User对象的属性值更新到数据库中。

通过这种方式,我们可以实现更新用户信息的功能。当然,在实际应用中还需要进行参数验证、异常处理等一系列操作,上述代码只是简单演示了基本的实现方式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-3-5 15:25:44 | 显示全部楼层
FishC 发表于 2024-3-5 00:32
首先,@PutMapping("/update")注解表示这个方法处理PUT请求,并使用"/update"路径。它接收一个User对象作为 ...

请问用Md5Util对用户密码加密 代码写咋Service层和Controller层 有什么不一样吗? 写那里更好呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-5 16:38:07 | 显示全部楼层
FishC 发表于 2024-3-5 15:26
在对用户密码进行加密的过程中,通常建议将加密逻辑放在Service层而不是Controller层。这是因为Service ...

下面一段全局异常处理器的代码  请给我详细解释一下这段代码  并且解释他的作用机制 是否也是因为添加了@RestControllerAdvice,@ExceptionHandler(Exception.class)这些注解 在mybatis或者是spring的作用下 当程序出现异常时 这个异常处理器会被自动调用?
@RestControllerAdvice
public class GlobalExceptionHandler {
       
        @ExceptionHandler(Exception.class)
        public Result handleException(Exception e) {
                e.printStackTrace();
                return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage(): "操作失败");
               
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-5 16:47:29 | 显示全部楼层
FishC 发表于 2024-3-5 16:38
这段代码是一个全局异常处理器,用于处理在运行过程中发生的异常。整个类被注解@RestControllerAdvice ...

public Result handlerException(Exception e)
在上述方法的参数了 有个 Exception 类型的 e 是不是在spring的作用下  这个参数是程序可以自动捕获并传入方法的?

另外在方法的上面 有“@ExceptionHandler(Exception.class)”注解 请问 这个括号里的Exception.class是什么意思

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 05:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表