当前位置:

首页 > 编程开发 > springboot用户数据怎么修改

springboot用户数据怎么修改

修改密码1用户-修改密码-持久层1.1规划需要执行的SQL语句用户修改密码时需要执行的SQL语句大致是:UPDATEt_userSETpassword=?,modified_user=?,modified_time=?WHEREuid=?在执行修改密码之前,还应检查用户数据是否存在、并检查用户数据是否被标记为“已删除”、并检查原密码是否正确,这些检查都可以通过查询用户数据来辅助完成:SELECT*FROMt_userWHEREuid=?1.2接口与抽象方法在UserMapper接口添加updatePass

本文目录

      修改密码

      1 用户-修改密码-持久层

      1.1 规划需要执行的SQL语句

      用户修改密码时需要执行的SQL语句大致是:

      UPDATE t_user SET password=?, modified_user=?, modified_time=? WHERE uid=?

      在执行修改密码之前,还应检查用户数据是否存在、并检查用户数据是否被标记为“已删除”、并检查原密码是否正确,这些检查都可以通过查询用户数据来辅助完成:

      SELECT * FROM t_user WHERE uid=?
      1.2 接口与抽象方法

      在UserMapper接口添加updatePasswordByUid(Integer uid,String password,String modifiedUser,Date modifiedTime)抽象方法。

      用注解来简化xml配置时,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中。@Param("参数名")注解中的参数名需要和sql语句中的#{参数名}的参数名保持一致。

      /**
       * 根据uid更新用户的密码
       * @param uid 用户的id
       * @param password 新密码
       * @param modifiedUser 最后修改执行人
       * @param modifiedTime 最后修改时间
       * @return 受影响的行数
       */
      Integer updatePasswordByUid(
      		@Param("uid") Integer uid, 
      		@Param("password") String password, 
      		@Param("modifiedUser") String modifiedUser, 
      		@Param("modifiedTime") Date modifiedTime);
      
      /**
       * 根据用户id查询用户数据
       * @param uid 用户id
       * @return 匹配的用户数据,如果没有匹配的用户数据,则返回null
       */
      User findByUid(Integer uid);
      1.3 配置SQL映射

      1.在UserMapper.xml中配置updatePasswordByUid()、findByUid()抽象方法的映射。

      
      
      	UPDATE
      		t_user 
      	SET
      		password = #{password},
      		modified_user = #{modifiedUser},
      		modified_time = #{modifiedTime} 
      	WHERE
      		uid = #{uid}
      
      
      
      
      	SELECT
      		*
      	FROM
      		t_user
      	WHERE
      		uid = #{uid}
      

      2.在UserMapperTests中编写并执行单元测试。

      @Test
      public void updatePasswordByUid() {
      	Integer uid = 7;
      	String password = "123456";
      	String modifiedUser = "超级管理员";
      	Date modifiedTime = new Date();
      	Integer rows = userMapper.updatePasswordByUid(uid, password, modifiedUser, modifiedTime);
      	System.out.println("rows=" + rows);
      }
      
      @Test
      public void findByUid() {
      	Integer uid = 7;
      	User result = userMapper.findByUid(uid);
      	System.out.println(result);
      }

      2 用户-修改密码-业务层

      2.1 规划异常

      1.用户在修改密码前,需要检查用户数据是否存在及是否被标记为“已删除”。如果检查不通过则应抛出UserNotFoundException异常。

      2.用户修改密码时,可能会因为输入的原密码错误导致修改失败,则应抛出PasswordNotMatchException异常。

      3.在执行修改密码时,如果返回的受影响行数与预期值不同,则应抛出UpdateException异常。

      4.创建com.cy.store.service.ex.UpdateException异常类,继承自ServiceException类。

      /** 更新数据的异常 */
      public class UpdateException extends ServiceException {
      	// Override Methods...
      }
      2.2 接口与抽象方法

      在IUserService中添加changePassword(Integer uid, String username, String oldPassword, String newPassword)抽象方法。

      /**
       * 修改密码
       * @param uid 当前登录的用户id
       * @param username 用户名
       * @param oldPassword 原密码
       * @param newPassword 新密码
       */
      public void changePassword(Integer uid, String username, String oldPassword, String newPassword);
      2.3 实现抽象方法

      1.在UserServiceImpl类中实现changePassword()抽象方法。

      public void changePassword(Integer uid, String username, String oldPassword, String newPassword) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	// 检查查询结果是否为null
      	// 是:抛出UserNotFoundException异常
      
      	// 检查查询结果中的isDelete是否为1
      	// 是:抛出UserNotFoundException异常
      
      	// 从查询结果中取出盐值
      	// 将参数oldPassword结合盐值加密,得到oldMd5Password
      	// 判断查询结果中的password与oldMd5Password是否不一致
      	// 是:抛出PasswordNotMatchException异常
      
      	// 将参数newPassword结合盐值加密,得到newMd5Password
      	// 创建当前时间对象
      	// 调用userMapper的updatePasswordByUid()更新密码,并获取返回值
      	// 判断以上返回的受影响行数是否不为1
      	// 是:抛了UpdateException异常
      }

      2.changePassword()方法的具体代码。

      String中的equals与contentEquals方法,都可以用来比较String对象内容是否相同。

      @Override
      public void changePassword(Integer uid, String username, String oldPassword, String newPassword) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	User result = userMapper.findByUid(uid);
      	// 检查查询结果是否为null
      	if (result == null) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
      	
      	// 检查查询结果中的isDelete是否为1
      	if (result.getIsDelete().equals(1)) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
      	
      	// 从查询结果中取出盐值
      	String salt = result.getSalt();
      	// 将参数oldPassword结合盐值加密,得到oldMd5Password
      	String oldMd5Password = getMd5Password(oldPassword, salt);
      	// 判断查询结果中的password与oldMd5Password是否不一致
      	if (!result.getPassword().contentEquals(oldMd5Password)) {
      		// 是:抛出PasswordNotMatchException异常
      		throw new PasswordNotMatchException("原密码错误");
      	}
      	
      	// 将参数newPassword结合盐值加密,得到newMd5Password
      	String newMd5Password = getMd5Password(newPassword, salt);
      	// 创建当前时间对象
      	Date now = new Date();
      	// 调用userMapper的updatePasswordByUid()更新密码,并获取返回值
      	Integer rows = userMapper.updatePasswordByUid(uid, newMd5Password, username, now);
      	// 判断以上返回的受影响行数是否不为1
      	if (rows != 1) {
      		// 是:抛出UpdateException异常
      		throw new UpdateException("更新用户数据时出现未知错误,请联系系统管理员");
      	}
      }

      3.在UserServiceTests中编写并执行单元测试。

      @Test
      public void changePassword() {
          try {
              Integer uid = 5;
              String username = "lower";
              String oldPassword = "123456";
              String newPassword = "888888";
              userService.changePassword(uid, username, oldPassword, newPassword);
              System.out.println("密码修改成功!");
          } catch (ServiceException e) {
              System.out.println("密码修改失败!" + e.getClass().getSimpleName());
              System.out.println(e.getMessage());
          }
      }

      3 用户-修改密码-控制器

      3.1 处理异常

      在用户修改密码的业务中抛出了新的UpdateException异常,需要在BaseController类中进行处理。

      @ExceptionHandler(ServiceException.class)
      public JsonResult handleException(Throwable e) {
      	JsonResult result = new JsonResult(e);
      	if (e instanceof UsernameDuplicateException) {
      		result.setState(4000);
      	} else if (e instanceof UserNotFoundException) {
      		result.setState(4001);
      	} else if (e instanceof PasswordNotMatchException) {
      		result.setState(4002);
      	} else if (e instanceof InsertException) {
      		result.setState(5000);
      	} else if (e instanceof UpdateException) {
      		result.setState(5001);
      	}
      	return result;
      }
      3.2 设计请求

      设计用户提交的请求,并设计响应的方式。

      请求路径:/users/change_password
      请求参数:String oldPassword, String newPassword, HttpSession session
      请求类型:POST
      响应结果:JsonResult

      3.3 处理请求

      1.在UserController类中添加处理请求的changePassword(String oldPassword, String newPassword, HttpSession session)方法。

      @RequestMapping("change_password")
      public JsonResult changePassword(String oldPassword, String newPassword, HttpSession session) {
      	// 调用session.getAttribute("")获取uid和username
      	// 调用业务对象执行修改密码
      	// 返回成功
      	
      	return null;
      }

      2.实现UserController控制器中的修改密码方法的代码。

      @RequestMapping("change_password")
      public JsonResult changePassword(String oldPassword, String newPassword, HttpSession session) {
      	// 调用session.getAttribute("")获取uid和username
      	Integer uid = getUidFromSession(session);
      	String username = getUsernameFromSession(session);
      	// 调用业务对象执行修改密码
      	iUserService.changePassword(uid, username, oldPassword, newPassword);
      	// 返回成功
      	return new JsonResult(OK);
      }

      3.启动项目先登录,再访问http://localhost:8080/users/change_password?oldPassword=xx&newPassword=xx进行测试。

      4 用户-修改密码-前端页面

      1.在password.html页面中body标签内部的最后,添加script标签用于编写JavaScript程序。

      
          $("#btn-change-password").click(function() {
              $.ajax({
                  url: "/users/change_password",
                  type: "POST",
                  data: $("#form-change-password").serialize(),
                  dataType: "json",
                  success: function(json) {
                      if (json.state == 200) {
                          alert("修改成功!");
                      } else {
                          alert("修改失败!" + json.message);
                      }
                  }
              });
      	});
      

      2.启动项目先登录,再访问http://localhost:8080/web/password.html页面并进行修改密码。

      问题:如果无法正常将数据传递给后台,重启动系统和IDEA开发工具,登陆后便可修改密码。

      3.问题:在操作前端页面时用户进入修改密码页面,长时间停留在当前页面未进行任何操作,将导致登录信息过期。此时点击修改按钮时,仍会向/users/change_password发送请求,会被拦截器重定向到登录页面。由于整个过程是由$.ajax()函数采用异步的方式处理的,所以重定向也是由异步任务完成的,在页面中没有任何表现就会出现“用户登录信息超时后点击按钮没有任何反应”的问题。

      解决方案:可以在password.html页面的$.ajax()中补充error属性的配置,该属性的值是一个回调函数。当服务器未正常响应状态码时,例如出现302、400、404、405、500等状态码时,将会调用该函数。

      error: function (xhr) {
          alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
          location.href = "login.html";
      }

      个人资料

      1 用户-个人资料-持久层

      1.1 规划需要执行的SQL语句

      1.执行修改用户个人资料的SQL语句大致是:

      UPDATE t_user SET phone=?, email=?, gender=?, modified_user=?, modified_time=? WHERE uid=?

      2.在执行修改用户资料之前,当用户刚打开修改资料的页面时,就应把当前登录的用户信息显示到页面中。显示用户资料可以通过:

      SELECT * FROM t_user WHERE uid=?

      说明:

      1.该查询功能已经实现,无需再次开发;

      2.在执行修改用户资料之前,还应检查用户数据是否存在、是否标记为“已删除”,也可以通过以上查询来实现。

      1.2 接口与抽象方法

      在UserMapper接口中添加updateInfoByUid(User user)方法。

      /**
       * 根据uid更新用户资料
       * @param user 封装了用户id和新个人资料的对象
       * @return 受影响的行数
       */
      Integer updateInfoByUid(User user);
      1.3 配置SQL映射

      1.在UserMapper.xml中配置Integer updateInfoByUid(User user)抽象方法的映射。

      
      
      	UPDATE
      		t_user 
      	SET
      		phone = #{phone},
      		email = #{email},
      		gender = #{gender},
      		modified_user = #{modifiedUser},
      		modified_time = #{modifiedTime}
      	WHERE
      		uid = #{uid}
      

      2.在UserMapperTests中编写并执行单元测试。

      @Test
      public void updateInfoByUid() {
          User user = new User();
          user.setUid(20);
          user.setPhone("17858802222");
          user.setEmail("admin@cy.com");
          user.setGender(1);
          user.setModifiedUser("系统管理员");
          user.setModifiedTime(new Date());
          Integer rows = userMapper.updateInfoByUid(user);
          System.out.println("rows=" + rows);
      }

      2 用户-个人资料-业务层

      2.1 规划异常

      1.关于用户修改个人资料是由两个功能组成的。

      • 打开页面时显示当前登录的用户的信息;

      • 点击修改按钮时更新用户的信息。

      2.关于打开页面时显示当前登录的用户的信息,可能会因为用户数据不存在、用户被标记为“已删除”而无法正确的显示页面,则抛出UserNotFoundException异常。

      3.关于点击修改按钮时更新用户的信息,在执行修改资料之前仍需再次检查用户数据是否存在、用户是否被标记为“已删除”,则可能抛出UserNotFoundException异常。并且在执行修改资料过程中,还可能抛出UpdateException异常。

      2.2 接口与抽象方法

      在IUserService接口中添加两个抽象方法,分别对应以上两个功能。

      /**
       * 获取当前登录的用户的信息
       * @param uid 当前登录的用户的id
       * @return 当前登录的用户的信息
       */
      User getByUid(Integer uid);
      
      /**
       * 修改用户资料
       * @param uid 当前登录的用户的id
       * @param username 当前登录的用户名
       * @param user 用户的新的数据
       */
      void changeInfo(Integer uid, String username, User user);
      2.3 实现抽象方法

      1.在UserServiceImpl实现类中实现getByUid(Integer uid)和changeInfo(Integer uid, String username, User user)以上两个抽象方法。

      @Override
      public User getByUid(Integer uid) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	// 判断查询结果是否为null
      	// 是:抛出UserNotFoundException异常
      
      	// 判断查询结果中的isDelete是否为1
      	// 是:抛出UserNotFoundException异常
      
      	// 创建新的User对象
      	// 将以上查询结果中的username/phone/email/gender封装到新User对象中
      
      	// 返回新的User对象
      	return null;
      }
      
      @Override
      public void changeInfo(Integer uid, String username, User user) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	// 判断查询结果是否为null
      	// 是:抛出UserNotFoundException异常
      
      	// 判断查询结果中的isDelete是否为1
      	// 是:抛出UserNotFoundException异常
      
      	// 向参数user中补全数据:uid
      	// 向参数user中补全数据:modifiedUser(username)
      	// 向参数user中补全数据:modifiedTime(new Date())
      	// 调用userMapper的updateInfoByUid(User user)方法执行修改,并获取返回值
      	// 判断以上返回的受影响行数是否不为1
      	// 是:抛出UpdateException异常
      	
      }

      2.getByUid(Integer uid)和changeInfo(Integer uid, String username, User user)方法的具体代码实现。

      @Override
      public User getByUid(Integer uid) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	User result = userMapper.findByUid(uid);
      	// 判断查询结果是否为null
      	if (result == null) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
       
      	// 判断查询结果中的isDelete是否为1
      	if (result.getIsDelete().equals(1)) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
      
      	// 创建新的User对象
      	User user = new User();
      	// 将以上查询结果中的username/phone/email/gender封装到新User对象中
      	user.setUsername(result.getUsername());
      	user.setPhone(result.getPhone());
      	user.setEmail(result.getEmail());
      	user.setGender(result.getGender());
      	
      	// 返回新的User对象
      	return user;
      }
      
      @Override
      public void changeInfo(Integer uid, String username, User user) {
      	// 调用userMapper的findByUid()方法,根据参数uid查询用户数据
      	User result = userMapper.findByUid(uid);
      	// 判断查询结果是否为null
      	if (result == null) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
      
      	// 判断查询结果中的isDelete是否为1
      	if (result.getIsDelete().equals(1)) {
      		// 是:抛出UserNotFoundException异常
      		throw new UserNotFoundException("用户数据不存在");
      	}
      
      	// 向参数user中补全数据:uid
      	user.setUid(uid);
      	// 向参数user中补全数据:modifiedUser(username)
      	user.setModifiedUser(username);
      	// 向参数user中补全数据:modifiedTime(new Date())
      	user.setModifiedTime(new Date());
      	// 调用userMapper的updateInfoByUid(User user)方法执行修改,并获取返回值
      	Integer rows = userMapper.updateInfoByUid(user);
      	// 判断以上返回的受影响行数是否不为1
      	if (rows != 1) {
      		// 是:抛出UpdateException异常
      		throw new UpdateException("更新用户数据时出现未知错误,请联系系统管理员");
      	}
      }

      3.在UserServiceTests类中进行单元测试。

      @Test
      public void getByUid() {
          try {
              Integer uid = 20;
              User user = iUserService.getByUid(uid);
              System.out.println(user);
          } catch (ServiceException e) {
              System.out.println(e.getClass().getSimpleName());
              System.out.println(e.getMessage());
          }
      }
      
      @Test
      public void changeInfo() {
          try {
              Integer uid = 20;
              String username = "数据管理员";
              User user = new User();
              user.setPhone("15512328888");
              user.setEmail("admin03@cy.cn");
              user.setGender(2);
              iUserService.changeInfo(uid, username, user);
              System.out.println("OK.");
          } catch (ServiceException e) {
              System.out.println(e.getClass().getSimpleName());
              System.out.println(e.getMessage());
          }
      }

      3 用户-个人资料-控制器

      3.1 处理异常

      说明:无需再次开发。

      3.2 设计请求

      1.设计用户提交显示当前登录的用户信息的请求,并设计响应的方式。

      请求路径:/users/get_by_uid
      请求参数:HttpSession session
      请求类型:GET
      响应结果:JsonResult

      2.设计用户提交执行修改用户信息的请求,并设计响应的方式。

      请求路径:/users/change_info
      请求参数:User user, HttpSession session
      请求类型:POST
      响应结果:JsonResult

      3.3 处理请求

      1.处理获取用户信息请求

      1.在UserController类中添加处理请求的getByUid()方法,并导入org.springframework.web.bind.annotation.GetMapping包。

      @GetMapping("get_by_uid")
      public JsonResult getByUid(HttpSession session) {
      	// 从HttpSession对象中获取uid
      	// 调用业务对象执行获取数据
      	// 响应成功和数据
      	return null;
      }

      2.getByUid(HttpSession session)方法中具体代码实现为。

      @GetMapping("get_by_uid")
      public JsonResult getByUid(HttpSession session) {
          // 从HttpSession对象中获取uid
          Integer uid = getUidFromSession(session);
          // 调用业务对象执行获取数据
          User data = userService.getByUid(uid);
          // 响应成功和数据
          return new JsonResult(OK, data);
      }

      3.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/users/get_by_uid请求进行测试。

      2.处理修改用户个人信息请求

      1.在UserController类中添加处理请求的changeInfo(User user, HttpSession session)方法。

      @RequestMapping("change_info")
      public JsonResult changeInfo(User user, HttpSession session) {
      	// 从HttpSession对象中获取uid和username
      	// 调用业务对象执行修改用户资料
      	// 响应成功
      	return null;
      }

      2.changeInfo(User user, HttpSession session)方法中具体代码实现为。

      @RequestMapping("change_info")
      public JsonResult changeInfo(User user, HttpSession session) {
      	// 从HttpSession对象中获取uid和username
      	Integer uid = getUidFromSession(session);
      	String username = getUsernameFromSession(session);
      	// 调用业务对象执行修改用户资料
      	userService.changeInfo(uid, username, user);
      	// 响应成功
      	return new JsonResult(OK);
      }

      3.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/users/change_info?phone=17858800000&email=admin07@cy.com&gender=1进行测试。

      4 用户-个人资料-前端页面

      1.在userdata.html页面中body标签内部的最后,添加script标签用于编写JavaScript程序。

      
          $(document).ready(function() {
              $.ajax({
                  url: "/users/get_by_uid",
                  type: "GET",
                  dataType: "json",
                  success: function(json) {
                      if (json.state == 200) {
                          console.log("username=" + json.data.username);
                          console.log("phone=" + json.data.phone);
                          console.log("email=" + json.data.email);
                          console.log("gender=" + json.data.gender);
      
                          $("#username").val(json.data.username);
                          $("#phone").val(json.data.phone);
                          $("#email").val(json.data.email);
      
                          let radio = json.data.gender == 0 ? $("#gender-female") : $("#gender-male");
                          radio.prop("checked", "checked");
                      } else {
                          alert("获取用户信息失败!" + json.message);
                      }
                  }
              });
      	});
      
          $("#btn-change-info").click(function() {
              $.ajax({
                  url: "/users/change_info",
                  type: "POST",
                  data: $("#form-change-info").serialize(),
                  dataType: "json",
                  success: function(json) {
                      if (json.state == 200) {
                          alert("修改成功!");
                          location.href = "login.html";
                      } else {
                          alert("修改失败!" + json.message);
                      }
                  },
                  error: function(xhr) {
                      alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
                      location.href = "login.html";
                  }
              });
          });
      

      2.完成后启动项目,打开浏览器先登录,再访问http://localhost:8080/web/userdata.html页面并进行用户个人资料的修改测试。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      解析SpringBoot和SpringMVC之间的异同
      解析SpringBoot和SpringMVC之间的异同

      解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

      探索SpringCloud和SpringBoot在微服务领域的不同应用方式
      探索SpringCloud和SpringBoot在微服务领域的不同应用方式

      近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

      SpringBoot和SpringMVC有何区别?
      SpringBoot和SpringMVC有何区别?

      SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

      比较SpringBoot和SpringMVC的异同
      比较SpringBoot和SpringMVC的异同

      SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

      SpringBoot与SpringMVC的不同点是什么?
      SpringBoot与SpringMVC的不同点是什么?

      SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。一、SpringBoot的特点:简化配置:SpringBoot通过约定优于配置的原则,大大简化了项目的配置过程。它可以自动配置项目所需要的参数,开发人

      比较和选择指南:SpringCloud与SpringBoot的功能比较
      比较和选择指南:SpringCloud与SpringBoot的功能比较

      SpringCloud和SpringBoot是目前Java领域中最热门的开源框架,它们分别提供了一套完善的微服务架构和快速构建应用程序的解决方案。本文将对它们的功能进行比较,并给出选择指南,以帮助读者了解它们的优势和适用场景。SpringBoot是一个用于开发Java应用程序的框架,它提供了一个简化的开发流程,集成了大量常用的功能和组件,减少了开发者的工作量

      SpringCloud与SpringBoot:分析它们之间的相似与不同
      SpringCloud与SpringBoot:分析它们之间的相似与不同

      深入剖析SpringCloud和SpringBoot的异同引言:在构建企业级应用程序时,Spring框架已经成为开发者们的首选。它提供了一种简单而强大的方式来构建独立于平台的应用程序。Spring框架由两个核心模块组成:SpringBoot和SpringCloud。虽然它们都可以帮助开发者快速搭建应用程序,但它们的目标和用途存在一些差异。本文将深入剖析Spr

      从架构角度看SpringCloud与SpringBoot的差异
      从架构角度看SpringCloud与SpringBoot的差异

      从架构角度看SpringCloud与SpringBoot的差异引言:在当今的互联网时代,构建分布式系统已经成为了一种必要的需求。而SpringBoot和SpringCloud正是为了满足这个需求而诞生的。尽管它们都是由Spring框架所提供的解决方案,但从架构角度来看,它们存在着一些重要的差异。本文将从架构的角度出发,对SpringBoot和SpringCl

      Java API 开发中使用 SpringBoot 的利弊分析
      Java API 开发中使用 SpringBoot 的利弊分析

      JavaAPI开发中使用SpringBoot的利弊分析随着互联网的快速发展和技术的不断更新迭代,Java技术在开发中的广泛应用引起了人们的重视。而SpringBoot作为一种微服务架构的解决方案,已经逐渐成为Java开发中的热门选择。那么,在JavaAPI开发中使用SpringBoot,到底有哪些利弊呢?下面来分析一下。利:简化开发

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。