springboot实现简单的注册登录功能

初始化项目

通过spring官网初始化SpringBoot项目在这里插入图片描述
使用idea工具打开Springboot项目,项目结构
在这里插入图片描述

添加pom依赖

<!--springboot启动类-->
 		<dependency>
         	<groupId>org.springframework.boot</groupId>
         	<artifactId>spring-boot-starter</artifactId>
        </dependency>
<!--webmvc-->
		<dependency>
        	<groupId>org.springframework.boot</groupId>
       		<artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--devtools自动部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
<!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
<!--Mybatis-->
      <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.1</version>
        </dependency>
<!--devtools自动部署-->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

添加maven远程仓库阿里云镜像

<repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>nexus-aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

application.yml相关配置

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/DatabaseName?serverTimezone=GMT%2b8
mybatis:
  mapper-locations: classpath:mapper/*.xml #扫描所有mybatis的xml文件
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql

使用navicat数据库可视化管理工具管理MySQL数据库
在这里插入图片描述

一、实现用户注册功能

user表
CREATE TABLE `user` (
  `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_account` varchar(255) DEFAULT NULL COMMENT '用户账号',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '盐值',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户姓名',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3;
实体类User
@Getter
@Setter
public class User {
        private Integer userId;
        private String userAccount;
        private String password;
        private String salt;
        private String userName;
        private String email;
}
mapper接口实现类
public interface UserMapper {
    /**
     * 插入一条用户数据
     * @param user
     * @return 受影响的行数
     */
    Integer insert(User user);

    /**
     * 根据用户名查询用户数据
     * @param username
     * @return 如果找到对应的用户则返回这个用户的数据,没有找到返回null值
     */
    User findByUsername(String username);

    /**
     * 根据id删除一条用户
     * @param id
     * @return 返回受影响行数
     */
    Integer deleteById(Integer id);

    /**
     * 更新一条数据
     * @param user
     * @return 返回受影响的行数
     */
    Integer update(User user);

}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
        "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace属性指定当前映射文件和哪个接口进行映射,需要标注包的完整路径接口-->
<mapper namespace="com.example.demo.mapper.UserMapper">
<!--自定义映射规则-->
    <resultMap id="DifUser" type="com.example.demo.entity.User">
        <id column="user_id" property="userId"></id>
        <result column="user_account" property="userAccount"></result>
        <result column="user_name" property="userName"></result>
        <result column="email" property="email"></result>
    </resultMap>
    <!--id指定接口方法的名称-->
    <insert id="insert">
        INSERT INTO user(user_account,password,salt,user_name,email) values (#{userAccount},#{password},#{salt},#{userName},#{email})
    </insert>

<!--当表的字段和类的对象的属性不一致时,来自定义查询结果集的映射规则-->
    <select id="findByUsername" resultMap="DifUser">
        SELECT * FROM user WHERE user_name=#{userName}
    </select>

    <delete id="deleteById">
        DELETE FROM user WHERE user_id=#{userId}
    </delete>

    <update id="update">
        update user set user_account=#{userAccount},user_name=#{userName},email=#{email} where user_id=#{userId}
    </update>
</mapper>
IUserService:用户注册方法在这个接口中实现
public interface IUserService {
    /**
     * 用户注册方法
     * @param user 用户的数据对象
     */
    void reg(User user);

}
UserServiceImpl:实现用户注册功能相关逻辑
@Service
public class UserServiceImpl implements IUserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public void reg(User user) {
        User result = userMapper.findByUsername(user.getUserName());
        //如果结果不为null,则抛出用户名被占用异常
        if (result!=null){
            throw new UsernameDuplicatedException("用户名被占用");
        }else {
            //如果结果为null,则执行注册业务
            String oldPassword=user.getPassword();
            String salt= UUID.randomUUID().toString().toUpperCase();
            user.setSalt(salt);
            String md5Password = getMd5Password(oldPassword, salt);
            System.out.println(md5Password);
            user.setPassword(md5Password);
            Integer rows = userMapper.insert(user);
            if (rows!=1){
                throw new InsertException("注册失败");
            }
        }
    }
    /**
     * md5算法加密
     */
    private String getMd5Password(String password,String salt){
        for (int i = 0; i < 3; i++) {
            //三次加密
            password = DigestUtils.md5DigestAsHex((salt + password + salt).getBytes()).toUpperCase();
        }
        //返回加密的密码
        return password;
    }
}
ServiceException :业务异常处理基类
public class ServiceException extends RuntimeException {
    public ServiceException() {
        super();
    }

    public ServiceException(String message) {
        super(message);
    }

    public ServiceException(String message, Throwable cause) {
        super(message, cause);
    }

    public ServiceException(Throwable cause) {
        super(cause);
    }

    protected ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
InsertException:插入方法异常
public class InsertException extends ServiceException {
    public InsertException() {
        super();
    }

    public InsertException(String message) {
        super(message);
    }

    public InsertException(String message, Throwable cause) {
        super(message, cause);
    }

    public InsertException(Throwable cause) {
        super(cause);
    }

    protected InsertException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
  • 8
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值