SpringBoot(四)SpringBoot搭建简单服务端

    通过之前的几篇文章相信大家已经对SpringBoot项目开发有了一个基本的了解。本篇,介绍下如何使用SpringBoot搭建一个简单的服务端,实现一个新用户注册的场景,供前端和移动端去使用。本篇需要你对SpringBoot的starter,mysql,jpa等有一些基本的了解。不过即使你没有任何的基础,直接跟着我的步骤来也是ok的。

目录

一、导入starter和mysql

二、创建Dao类

三、创建JpaRepository

四、创建返回对象类RegisterResult

五、实现Controller

六、创建数据库和表

七、SpringBoot连接mysql数据库

八、运行项目并测试

九、可能遇到的问题


一、导入starter和mysql

    上篇介绍过spring-boot-starter-web,既然是服务端,我们依然需要导入它,在这里不再赘述。然后,导入mysql,因为我们接受到新用户的注册信息后,需要持久化到数据库,在这里我们使用mysql。此外,java程序需要跟mysql数据库交互,大学课程上我们是使用JDBC,大家应该都很熟悉。但是,在这里我们使用JPA(一种ORM规范,用来解决面向对象和关系数据库不匹配问题),导入spring-boot-starter-data-jpa。

		
			org.springframework.boot
			spring-boot-starter-web
		

		
			com.mysql
			mysql-connector-j
			runtime
		

		
			org.springframework.boot
			spring-boot-starter-data-jpa
		

二、创建Dao类

    Dao做java后端的同学肯定都很熟悉,Android也有一个非常优秀的ORM框架GreenDao。上面也提到过,ORM是为了解决对象和关系数据库的映射问题,因此需要注意:Dao类的表名和字段名需要跟后面在mysql创建的表名和字段名一致。

@Entity
@Table(name="user_info")
public class UserDao {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer userId;
    @Column(name = "user_name")
    private String userName;
    @Column(name = "user_password")
    private String userPassword;
    @Column(name = "user_phone")
    private String userPhone;
    @Column(name = "user_token")
    private String userToken;
    @Column(name = "user_register_time")
    private String userRegisterTime;
    @Column(name = "user_last_login_time")
    private String userLastLoginTime;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    public String getUserToken() {
        return userToken;
    }

    public void setUserToken(String userToken) {
        this.userToken = userToken;
    }

    public String getUserRegisterTime() {
        return userRegisterTime;
    }

    public void setUserRegisterTime(String userRegisterTime) {
        this.userRegisterTime = userRegisterTime;
    }

    public String getUserLastLoginTime() {
        return userLastLoginTime;
    }

    public void setUserLastLoginTime(String userLastLoginTime) {
        this.userLastLoginTime = userLastLoginTime;
    }
}

三、创建JpaRepository

    使用JPA,我们只需要定义一个接口就可以轻松地操作数据库,不用写SQL,这个接口继承JpaRepository接口。JpaRepository接口已经提供了几乎非常全面的增删改查方法,自定义的Repository主要是去实现自定义的一些增删改查方法,比如如下示例中的通过用户名和token去查询:

@Repository
public interface UserRepository extends JpaRepository {

    public UserDao findByUserName(String userName); //通过UserName查询

    public UserDao findByUserToken(String token);//通过UserToken查询
}

四、创建返回对象类RegisterResult

    客户端访问服务端,服务端需要返回数据。如下示例中,code可以表示状态码(例如200),status表示注册成功或失败(例如fail),msg则是附加的信息(例如因用户名重复注册失败)。因为是个demo,暂时我们就这么些。

public class RegisterResult {
    private int code;
    private String status;
    private String msg;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

五、实现Controller

    请求API的实现在controller中,我实现了简单的注册逻辑,附带基本的校验。注册成功后,会把新用户的信息写入mysql数据库:

@RestController
public class RegisterController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("register")
    public RegisterResult register(String name, String phone, String password) {
        int code = 0;
        String status = "未知状态";
        String msg = "未知信息";
        String token = "";
        RegisterResult registerResult = new RegisterResult();
        if (TextUtils.isEmpty(name)) {
            status = "fail";
            msg = "用户名不能为空";
        } else if (TextUtils.isEmpty(phone)) {
            status = "fail";
            msg = "手机号不能为空";
        } else if (TextUtils.isEmpty(password)) {
            status = "fail";
            msg = "密码不能为空";
        } else if (userRepository.findByUserName(name) != null) {
            status = "fail";
            msg = "用户名已存在";
        } else {
            status = "success";
            msg = "注册成功";
            addUser(name, phone, password);
        }

        registerResult.setCode(code);
        registerResult.setStatus(status);
        registerResult.setMsg(msg);
        return registerResult;
    }

    /**
     * 添加用户
     *
     * @param name     name
     * @param password password
     * @param phone    phone
     */
    public void addUser(String name, String password, String phone) {
        UserDao userDao = new UserDao();
        userDao.setUserName(name);
        userDao.setUserPassword(password);
        userDao.setUserPhone(phone);
        Timestamp timestamp = new Timestamp(new Date().getTime());
        userDao.setUserRegisterTime(timestamp + "");
        userRepository.save(userDao);
    }
}

六、创建数据库和表

    在这里我使用mysql workbench建表,在此不详细介绍如何使用mysql workbench。特别需要注意的是,user_id设置主键,设置自增。如下:

七、SpringBoot连接mysql数据库

    在application.properties文件中,增加如下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/android_server?&useSSL=false
spring.datasource.username=root
spring.datasource.password=888888
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

八、运行项目并测试

    运行项目,在浏览器中输入:​​​​​​​http://localhost:8080/register?name=zj&phone=1234567890&password=123456

 ​​​​​​​​​​​​​​​SpringBoot(四)SpringBoot搭建简单服务端_第1张图片

     查看mysql数据库,看是否成功写到表里: 

 

九、可能遇到的问题

1、java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)。检查数据库用户名或密码是否拼写错误。

2、com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure。数据库端口号不对,mysql通常是3306。 

    简单总结一下,本篇介绍了如何通过ItelliJ社区版创建的SpringBoot项目搭配mysql和jpa搭建简单的服务端,去模拟实现新用户注册这样的场景。也整理了新手在开发和配置过程中可能遇到的一些问题,希望对大家有所帮助。

你可能感兴趣的:(SpringBoot,spring,boot,后端,java)