0


spring boot项目实践

项目所需静态文件及sql
链接: https://pan.baidu.com/s/1LP7nWe54NK8W3_-uj_PNhA
提取码: k9ks

文章目录

项目介绍

后端部分以springboot为骨架,并使用三层架构模式进行开发controller(控制层)、service(业务层)、mapper(持久层)
前端页面使用到了html、css、js、jQuery、bootstrap

项目功能

  1. 登录、注册、集成kaptcha验证码防止机器人,以及用户管理(用户信息的修改)
  2. 分页处理展示商品信息、支持通过模糊搜索查找相关商品
  3. 购物车相关功能管理(如购物车商品的展示和结算)
  4. 订单管理页面可以查看不同状态订单以及集成了支付宝沙箱模拟商品支付全过程
  5. 收藏界面同样实现分页展示用户收藏商品信息,以及加入收藏、取消收藏和加入购物车
  6. 对全部业务方法使用aop拦截计算业务执行时间,为后续优化提供支持

开发环境

  1. jdk 1.8
  2. maven 3.3.9
  3. 数据库 mysql 8.0.26
  4. 集成开发环境 IDEA2020

用户管理

创建数据库


CREATE DATABASE IF NOT EXISTS `computer_store` CHARACTER SET 'utf8';

创建数据表

CREATE TABLE t_user (
    uid INT AUTO_INCREMENT COMMENT '用户id',
    username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
    password CHAR(32) NOT NULL COMMENT '密码',
    salt CHAR(36) COMMENT '盐值',
    phone VARCHAR(20) COMMENT '电话号码',
    email VARCHAR(30) COMMENT '电子邮箱',
    gender INT COMMENT '性别:0-女,1-男',
    avatar VARCHAR(50) COMMENT '头像',
    is_delete INT COMMENT '是否删除:0-未删除,1-已删除',
    created_user VARCHAR(20) COMMENT '日志-创建人',
    created_time DATETIME COMMENT '日志-创建时间',
    modified_user VARCHAR(20) COMMENT '日志-最后修改执行人',
    modified_time DATETIME COMMENT '日志-最后修改时间',PRIMARY KEY (uid)) ENGINE=InnoDBDEFAULT CHARSET=utf8;

(考虑到每个表中都有固定的四个字段,重复写过于麻烦,因此可以使用一个Java基类来对应这四个字段)

创建实体类

//用于与数据表四个字段形成映射关系的基类@DatapublicclassBaseEntityimplementsSerializable{//为了便于数据传输,实现序列化接口privateString createdUser;privateDate createdTime;privateString modifiedUser;privateDate modifiedTime;}//对应数据表的User实体类@DatapublicclassUserextendsBaseEntity{privateInteger uid;privateString username;privateString password;privateString salt;//用于加密密码privateString phone;privateString email;privateInteger gender;//'性别:0-女,1-男',privateString avatar;privateInteger isDelete;}

注册

后端-持久层

通过MyBatis框架与数据库进行交互

  1. 编写sql语句
#增加用户的sql语句
insert into t_user(username,password)vaules(?,?);

#判断用户名是否已存在的语句
select * from t_user where username =?;
  1. 定义mapper接口和抽象方法
  2. 编写映射文件
  3. 将mapper映射文件的位置在yml配置文件中进行对应的设置
  4. 进行单元测试(每个 的完成建议都进行单元测试)

后端-业务层

业务层的包下主要有exception、impl、接口,其中exception放置各种异常处理类,impl中放置接口的实现类

  1. 规划异常处理机制

考虑到在后端处理业务的过程中,会出现各种异常情况,如执行过程中数据库宕机、用户名重复等。

虽然java在异常处理机制已经很完善,以上的情况都是抛出RuntimeException异常,对定位异常不够明确。

因此在业务层的制定中,需要考虑对异常的定义处理。

在业务层制定一个继承RuntimeException异常的异常类,再让具体的异常继承这个异常。

//专用于处理业务层的异常基类//e.g. throws new ServiceException("业务层出现异常")publicclassServiceExceptionextendsRuntimeException{publicServiceException(){super();}publicServiceException(String message){super(message);}publicServiceException(String message,Throwable cause){super(message, cause);}publicServiceException(Throwable cause){super(cause);}protectedServiceException(String message,Throwable cause,boolean enableSuppression,boolean writableStackTrace){super(message, cause, enableSuppression, writableStackTrace);}}

根据业务层不同的 来详细定义具体异常的类型,统一的继承ServiceException异常基类

//表示用户名重复的异常publicclassUsernameDuplicateExceptionextendsServiceException{publicUsernameDuplicateException(){}publicUsernameDuplicateException(String message){super(message);}publicUsernameDuplicateException(String message,Throwable cause){super(message, cause);}publicUsernameDuplicateException(Throwable cause){super(cause);}publicUsernameDuplicateException(String message,Throwable cause,boolean enableSuppression,boolean writableStackTrace){super(message, cause, enableSuppression, writableStackTrace);}}//专用于处理业务层其他未知异常,如数据插入过程中服务器、数据库宕机的情况publicclassInsertExceptionextendsServiceException{}//表示验证码错误的异常publicclassValidCodeNotMatchExceptionextendsRuntimeException{}
  1. 定义业务层接口和抽象方法
// 处理用户注册的业务层接口publicinterfaceIUserService{//处理用户注册voidUserRegister(User user);}
  1. 定义接口的实现类,处理请求

为什么要补全这五个字段?因为注册界面只让填写了用户名和密码,在经过查询数据库用户不重复后,

如果直接执行插入操作,那么这五个字段在数据库中就是空值,因此必须在注册时补全

//处理用户注册的业务层接口的实现类@ServicepublicclassIUserServiceImplimplementsIUserService{@Autowired(required =false)privateUserMapper userMapper;//处理用户注册@OverridepublicvoidUserRegister(User user){//需要先判断用户名是否在数据库中重复User queryUser = userMapper.queryUserByUsername(user.getUsername());//重复的情况下,抛出用户名重复异常if(queryUser !=null){thrownewUsernameDuplicateException("用户名已被注册");}//密码不能以明文方式存入数据库,需要进行加密操作//密码加密的实现: 盐值 + password + 盐值 ---> md5算法进行加密,连续加载三次 ---> 得到最终存入数据库的结果//盐值就是一个随机的字符串//记录旧密码String oldPassword = user.getPassword();//使用UUID获取时间戳创建盐值String salt = UUID.randomUUID().toString().toUpperCase();//记录此刻的盐值,用于以后做用户登录判断
        user.setSalt(salt);//进行加密操作String md5Password =PasswordEncryptedUtils.getPasswordByMD5(oldPassword, salt);//将加密后的密码设置为用户设置的密码
        user.setPassword(md5Password);//在执行插入操作之前对一些表字段进行补全//is_delete字段设置为0,表示未删除用户
        user.setIsDelete(0);//补全其余四个日志信息的字段Date currentTime =newDate();
        user.setCreatedUser(user.getUsername());
        user.setCreatedTime(currentTime);
        user.setModifiedUser(user.getUsername());
        user.setModifiedTime(currentTime);//不重复,调用插入方法,处理业务int result = userMapper.addUser(user);if(result ==0){//判断服务器或数据库执行是否出现异常thrownewInsertException("处理用户注册过程中,服务器或数据库执行出现异常");}}
  1. 业务层进行单元测试

后端-控制层


视频地址
图文项目第一天
图文项目第二天
图文项目第三天
图文项目第四天
图文项目第五天
图文项目第六天
图文项目第七天
图文项目第八天
图文项目第九天
图文项目第十天
maven介绍
maven下载及配置
spring boot入门

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/m0_37761262/article/details/142179940
版权归原作者 一个不会摄影的IT男不是一个好的厨子 所有, 如有侵权,请联系我们删除。

“spring boot项目实践”的评论:

还没有评论