SpringBoot-IDEA-简单登录注册实现

初识SpringBoot

第一次使用SpringBoot写一个小功能,表达的有点乱,见谅

SpringBoot的特点

SpringBoot是一种用来简化新Spring应用的初始搭建以及开发过程的全新框架。与传统的Spring框架相比,他有以下特点:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。

创建一个SpringBoot项目

主要步骤

1.打开IDEA,新建一个项目,选中这个Spring Initializr(没有这个选项的朋友可以下载SpringAssistant的plugin,或者使用付费版的IDEA)
SpringBoot-IDEA-简单登录注册实现_第1张图片2. 一直next,然后在这个页面选择自己需要用到的依赖
SpringBoot-IDEA-简单登录注册实现_第2张图片3.最后finish则可以生成一个SpringBoot项目。
要测试自己的项目是否成功创建,可直接运行空项目中的DemoApplication的main函数,若出现以下结果,说明你成功啦
SpringBoot-IDEA-简单登录注册实现_第3张图片

踩过的坑

1.在创建项目时,我使用的是默认的服务网址https://start.spring.io,但显示无法连接上服务器,请教他人后得知将网址改成http://start.spring.io就能正常连接。

2.由于在选择依赖时,我选择了jdbc,而若测试时仍未配置好数据库的连接,也会报错。

功能实现

文件分层

SpringBoot-IDEA-简单登录注册实现_第4张图片

数据库创建

由于只是简单的登录注册,我们只建了一个表,表内有三个属性:id、username、password
SpringBoot-IDEA-简单登录注册实现_第5张图片这里值得注意的就是我们要把id属性的AI(Automatic-Increase)填上,方便后面对id的自增操作。

前端

faillogin.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>失败啦</p>
</body>
</html>

failregist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
<form action="/user/return" method="post">
    <p>注册失败!用户名重复!</p>
    <input type="submit" value="返回">
</form>
</body>
</html>

login.html

<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
<form action="/user/login" method="post">
    用户名:<input name="username" type="text" required="required"><br>
    密码:<input name="password" type="password" required="required"> <br>
    <input type="submit" value="登录">
</form>
</body>

regist.html

<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<form action="/user/regist" method="post">
    用户名:<input name="username" type="text"/><br>
    密码:<input name="password" type="password"> <br>
    <input type="submit" value="注册">
</form>
</body>

successlogin.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>成功啦</p>
</body>
</html>

Beans

这里定义了一个实体类,用于存储用户信息。以及一个Result类,用于存储返回信息。

public class User {
    private long id;
    private String Username;
    private String password;
    //...getter and setter
}
public class Result<T> {
    //返回信息
    private String msg;
    //数据是否正常请求
    private boolean success;
    //具体返回的数据
    private T detail;
    //... getter and setter
}

Dao层

Dao层实际上就是基本操作的底层实现(包括数据库的增删改查、基础逻辑实现等)

@Component
@Mapper 
@Repository
public interface UserMapper {

    @Select(value = "select u.username,u.password from user u where u.username=#{username}")
    @Results
            ({@Result(property = "username",column = "username"),
                    @Result(property = "password",column = "password")})
    User findUserByName(@Param("username") String username);
    
    
    @Insert("insert into user values(#{id},#{username},#{password})")
    //加入该注解可以保存对象后,查看对象插入id
    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    void regist(User user);

    
    @Select("select u.id from user u where u.username = #{username} and password = #{password}")
    Long login(User user);
}

这里我们可以看到函数的具体实现都以注解的方式呈现,如果发现自己的编译器无法识别这些注解,则在你的xml文件里加入以下依赖吧

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

Service层

@Service
@Transactional(rollbackFor = RuntimeException.class)
public class UserService {

    //@Autowired
    private final UserMapper userMapper;



    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    /**
     * 注册
     * @param user 参数封装
     * @return Result
     */
    public Result regist(User user) {
        Result result = new Result();
        result.setSuccess(false);
        result.setDetail(null);
        try {
            User existUser = userMapper.findUserByName(user.getUsername());
            if(existUser != null){
                //如果用户名已存在
                

            }else{
                userMapper.regist(user);
                //System.out.println(user.getId());
                result.setSuccess(true);
                result.setDetail(user);
            }
        } catch (Exception e) {
            result.setMsg(e.getMessage());
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 登录
     * @param user 用户名和密码
     * @return Result
     */
    public Result login(User user) {
        Result result = new Result();
        result.setSuccess(false);
        result.setDetail(null);
        try {
            Long userId= userMapper.login(user);
            if(userId == null){
            }else{
                result.setSuccess(true);
                user.setId(userId);
                result.setDetail(user);
            }
        } catch (Exception e) {
            result.setMsg(e.getMessage());
            e.printStackTrace();
        }
        return result;
    }
}

Controller层

@Controller    
@RequestMapping("/user")

public class UserController {

    @Autowired
    private UserService userService;


    @RequestMapping(value = "/regist")
    public String regist(User user){
        Result result=userService.regist(user);
        if(result.isSuccess())
        {
            return "login";
        }
        else
            return "failregist";
    }
   
    @RequestMapping(value = "/login")
    public String login(User user){
        boolean success=userService.login(user).isSuccess();
        if(success==true)
            return "successlogin";
        else
            return "faillogin";

    }
    @RequestMapping(value="/return")
    public String rr(){
        return "login";
    }
}

踩过的坑

RestController和Controller的使用
这份代码一开始是参考的另一篇文章,下面会贴出链接
这份代码中,我们可以看到Controller层中方法返回的是String类型,由于我们在依赖中加入了thymeleaf

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

编译时会自动识别以该字符串为名的html文件
这种情况需要我们将注解设为Controller,若设为RestController(Controller和RequestBody的合体),则会显示所返回的字符串

参考博客
springboot基本登录注册功能.

你可能感兴趣的:(SpringBoot-IDEA-简单登录注册实现)