springboot项目整合-注册功能模块开发

工程简介准备工作:项目所用到的html界面以及sql文件链接如下:链接: https://pan.baidu.com/s/18loHJiKRC6FI6XkoANMSJg?pwd=nkz2 提取码: nkz2 复制这段内容后打开百度网盘手机App,操作更方便哦第一步:注册功能的实现1.1持久层的设计1.1.1规范需要执行的SQL语句1.用户的注册工作,相当于在做数据的插入操作
insertinto t_user (username,password) values (?,?)2.在用户的注册是首先需要查询当前的用户名是否存在,如果存在则不能进行注册,相当于一个查询语句
select * from t_user where username = ?1.1.2设计接口和抽象方法定义mapper接口,在项目的目录结构下首先创建一个mapper包,在这个包下根据不同的功能模块来创建mapper接口1.创建一个userMapper 需要考虑上述的两个注意点
package com.cy.store.mapper;import com.cy.store.pojo.User;/** * 用户模块的持久化层接口 */public interface UserMapper {/*** 插入用户的数据->用来实现注册功能* @param user* @return 受到影响的行数(增删改查 )*/Integer insert(User user);/*** 根据用户名查询用户的数据* @param username* @return如果找到了则返回相对应的用户信息,找不到返回null*/User findByUsername(String username);}1.1.3 编写映射1.定义xml映射文件,与对应的接口进行关联.所有饿映射文件需要放置在resource目录下,一般为了方便管理,一般在这个目录下创建一个mapper文件夹,然后在找这个文件夹存放相应的mapper 文件2.创建接口的对应的映射文件,规则:和接口的名称保持一致即可,创建一个UserMapper.xml
1.1.4 单元测试1.每个独立的层编写完毕需要编写单元测试方法,来测试当前的功能 , 在test包下创建一个mapper包包:test-com.cy.store.mapper.UserMapperTest
package com.cy.store.mapper;import com.cy.store.pojo.User;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;/** * @PROJECT_NAME: store * @DESCRIPTION: * @USER: 28416 * @DATE: 2022/11/2 16:43 */@Slf4j@SpringBootTestpublic class UserMapperTest {/***在mapper方法上加上这个注解: @Repository*/@AutowiredprivateUserMapper userMapper;/*** @Dat 2022年11月2日17:25:41* 测试成功*/@Testpublic void insert(){User user = new User();user.setUsername("tom");user.setPassword("123456");Integer insert = userMapper.insert(user);log.info("插入返回的值:{}",insert);}/*** @Date 2022年11月2日17:27:25* @return查询的结果为:User(uid=1, username=tom, password=123456, salt=null, phone=null, email=null, gender=null, avatar=null, isDelete=null)* 测试成功*/@Testpublic void testFindByUsername(){User tom = userMapper.findByUsername("tom");log.info("查询的结果为:{}",tom);}}1.2注册功能-业务层1.2.1 规划异常1.runtimeException异常,作为这个异常的子类,然后在定义具体的异常类型来继承这个异常 , 业务层异常的基类serviceException异常,这个异常继承RuntimeException异常,以此建立异常的机制 。
2.用户在进行注册时候可能会产生用户名被占用的错误,抛出一个异常 UsernameDuplicatedException
3.正在执行数据插入操作的时候,服务器、数据库宕机 。处于正在执行插入的过程中,所产生的异常InsertException
1.2.2设计接口和抽象方法1.在service包下创建一个IUserService2.设计一个实现类的包3.实现类中重写注册方法实现完全的用户注册逻辑
@Overridepublic void reg(User user) {//调用findByUsernam 方法判断用户名是否被注册过String username = user.getUsername();User byUsername = userMapper.findByUsername(username);if (byUsername != null){throw new UsernameDuplicatedException("用户名被占用");}Integer insert = userMapper.insert(user);if (insert != 1){thrownew InsertException("在用户注册中产生了位置的异常");}}1.2.3 在单元测试中创建UserServiceTest类 进行相应的注册逻辑进行测试package com.cy.store.service;import com.cy.store.pojo.User;import com.cy.store.service.ex.ServiceException;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;/** * @PROJECT_NAME: store * @DESCRIPTION: * @USER: 28416 * @DATE: 2022/11/2 18:15 */@SpringBootTestpublic class UserServiceTest {@AutowiredprivateIUserService userService;/*** @Date 2022年11月2日19:25:39* @return UsernameDuplicatedException* @return 测试用户注册的功能成功返回1 or返回自定义的exception* /* */@Testpublic void reg(){try {User user = new User();user.setUsername("Lux");user.setPassword("123456");userService.reg(user);System.out.println("ok");} catch (ServiceException e) {//获取异常的类名System.out.println(e.getClass().getSimpleName());//打印错误信息System.out.println(e.getMessage());}}}

推荐阅读