本文共 8786 字,大约阅读时间需要 29 分钟。
在开发一个项目时,首先需要明确需要处理的数据类型。以用户管理系统为例,常见的数据类型包括:
数据处理的顺序应遵循基础数据优先的原则。通常情况下,数据处理顺序如下:用户 > 收货地址 > 商品类别 > 商品 > 收藏 > 购物车 > 订单
以“用户”数据为例,常见的用户功能包括:
功能开发顺序通常遵循“增 > 查 > 删 > 改”的逻辑:注册 > 登录 > 修改密码 > 修改资料 > 上传头像
每个功能的开发流程包括:创建数据表 > 创建实体类 > 持久层开发 > 业务层开发 > 控制器层开发 > 前端页面开发
创建用户表:
CREATE TABLE t_user ( uid NUMBER PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, salt VARCHAR(255) NOT NULL, is_delete NUMBER DEFAULT 0)
@Entity@Table(name = "t_user")public class User extends BaseEntity { private String username; private String password; private String salt; private Integer isDelete; // setter和getter方法} 插入用户信息的SQL语句:
INSERT INTO t_user (username, password, salt) VALUES (?, ?, ?)
public interface UserMapper { void insertUser(User user);} INSERT INTO t_user (username, password, salt) VALUES (?, ?, ?)
public interface UserService { void register(User user) throws UsernameDuplicateException, UserNotFoundException;} public class UserServiceImpl implements UserService { @Override public void register(User user) throws UsernameDuplicateException, UserNotFoundException { // 按照业务规则进行用户注册 }} public abstract class BaseController { @ExceptionHandler(ServiceException.class) public JsonResult handleException(Throwable e) { // 处理不同类型的异常并返回相应的状态码 }} 请求路径:/users/register请求参数:username, password, email, phone请求方式:POST响应数据:JsonResult
@RequestMapping("register")public JsonResult register( @RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("email") String email, @RequestParam("phone") String phone, HttpSession session) { UserService service = new UserServiceImpl(); User user = new User(); user.setUsername(username); user.setPassword(password); service.register(user); session.setAttribute("uid", user.getUid()); session.setAttribute("username", user.getUsername()); return new JsonResult(SUCCESS);} $(document).ready(function() { $("#btn-register").click(function() { $.ajax({ url: "/users/register", data: $("#form-register").serialize(), type: "POST", dataType: "json", success: function(json) { if (json.state == 2000) { alert("注册成功!"); } else { alert(json.message); } } }); });}); SELECT uid, username, password, salt, is_delete FROM t_user WHERE username=?
public class User extends BaseEntity { private String username; private String password; private String salt; private Integer isDelete; // setter和getter方法} SELECT uid, username, password, salt, is_delete AS isDelete FROM t_user WHERE username=?
public interface UserMapper { User findByUsername(String username);} public interface UserService { User login(String username, String password) throws UserNotFoundException, PasswordNotMatchException;} public class UserServiceImpl implements UserService { @Override public User login(String username, String password) throws UserNotFoundException, PasswordNotMatchException { User user = userMapper.findByUsername(username); if (user == null) { throw new UserNotFoundException("登录失败!用户名不存在!"); } if (user.getIsDelete() == 1) { throw new UserNotFoundException("登录失败!用户名不存在!"); } String salt = user.getSalt(); String md5Password = getMd5Password(password, salt); if (!user.getPassword().equals(md5Password)) { throw new PasswordNotMatchException("登录失败!密码错误!"); } user.setPassword(null); user.setSalt(null); user.setIsDelete(null); return user; }} public abstract class BaseController { @ExceptionHandler(ServiceException.class) public JsonResult handleException(Throwable e) { // 处理不同类型的异常并返回相应的状态码 }} 请求路径:/users/login请求参数:username, password请求方式:POST响应数据:JsonResult
@RequestMapping("login")public JsonResult login( @RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) { UserService service = new UserServiceImpl(); User user = service.login(username, password); session.setAttribute("uid", user.getUid()); session.setAttribute("username", user.getUsername()); return new JsonResult(SUCCESS, user);} $(document).ready(function() { $("#btn-login").click(function() { $.ajax({ url: "/users/login", data: $("#form-login").serialize(), type: "POST", dataType: "json", success: function(json) { if (json.state == 2000) { alert("登录成功!"); } else { alert(json.message); } } }); });}); UPDATE t_user SET password=?, modified_user=?, modified_time=? WHERE uid=?
public class User extends BaseEntity { private String username; private String password; private String salt; private Integer isDelete; // setter和getter方法} SELECT is_delete, password, salt FROM t_user WHERE uid=?
public interface UserMapper { Integer updatePassword(Integer uid, String password, String modifiedUser, Date modifiedTime); User findByUid(Integer uid);} UPDATE t_user SET password=?, modified_user=?, modified_time=? WHERE uid=?
public interface UserService { void changePassword(Integer uid, String username, String oldPassword, String newPassword) throws UserNotFoundException, PasswordNotMatchException, UpdateException;} public class UserServiceImpl implements UserService { @Override public void changePassword(Integer uid, String username, String oldPassword, String newPassword) throws UserNotFoundException, PasswordNotMatchException, UpdateException { User user = userMapper.findByUid(uid); if (user == null) { throw new UserNotFoundException("修改密码失败!用户不存在!"); } if (user.getIsDelete() == 1) { throw new UserNotFoundException("修改密码失败!用户不存在!"); } String salt = user.getSalt(); String md5Password = getMd5Password(oldPassword, salt); if (!user.getPassword().equals(md5Password)) { throw new PasswordNotMatchException("修改密码失败!原密码错误!"); } String newMd5Password = getMd5Password(newPassword, salt); Date now = new Date(); Integer rows = userMapper.updatePassword(uid, newMd5Password, username, now); if (rows != 1) { throw new UpdateException("修改密码失败!出现未知错误!"); } }} public abstract class BaseController { @ExceptionHandler(ServiceException.class) public JsonResult handleException(Throwable e) { // 处理不同类型的异常并返回相应的状态码 }} 请求路径:/users/change_password请求参数:oldPassword, newPassword请求方式:POST响应数据:JsonResult
@RequestMapping("change_password")public JsonResult changePassword( @RequestParam("old_password") String oldPassword, @RequestParam("new_password") String newPassword, HttpSession session) { UserService service = new UserServiceImpl(); Integer uid = Integer.valueOf(session.getAttribute("uid").toString()); String username = session.getAttribute("username").toString(); service.changePassword(uid, username, oldPassword, newPassword); return new JsonResult(SUCCESS);} $(document).ready(function() { $("#btn-change-password").click(function() { $.ajax({ url: "/users/change_password", data: $("#form-change-password").serialize(), type: "POST", dataType: "json", success: function(json) { if (json.state == 2000) { alert("修改成功!"); } else { alert(json.message); } } }); });}); 转载地址:http://arzs.baihongyu.com/