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

2023-10-26

    通过之前的几篇文章相信大家已经对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。

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

		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>

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

二、创建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<UserDao,Integer> {

    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

 ​​​​​​​​​​​​​​​

     查看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搭建简单的服务端,去模拟实现新用户注册这样的场景。也整理了新手在开发和配置过程中可能遇到的一些问题,希望对大家有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot(四)SpringBoot搭建简单服务端 的相关文章

随机推荐

  • powerdesigner常用配置-修改外键设置

    文章目录 取消自动生成外键列 PowerDesigner给两个表添加reference 中间显示外键信息步骤 取消自动生成外键列 PowerDesigner给两个表添加reference 中间显示外键信息步骤
  • Floyd算法(三)之 Java详解

    前面分别通过C和C 实现了弗洛伊德算法 本文介绍弗洛伊德算法的Java实现 目录 1 弗洛伊德算法介绍 2 弗洛伊德算法图解 3 弗洛伊德算法的代码说明 4 弗洛伊德算法的源码 转载请注明出处 http www cnblogs com sk
  • 记一次XFS文件系统崩溃的处理

    1 问题出现 当使用rpm安装服务时 出现如下问题 当使用yum时也是一样 查了 var log messages发现以下错误 看起来是XFS的问题 可以发现dm 0实际是bel root的问题 查了网上很多解决方法都是说要使用xfs re
  • TCP/IP 报文格式(IP数据包、TCP报头、UDP报头)

    TCP IP 报文格式 IP数据包 TCP报头 UDP报头 一 IP包格式 IP数据包 是一种可以变长的分组 由首部与数据负载组成 首部长度为20 60字节 Byte 后40字节是可选的 但长度不固定 前20字节格式为固定 数据负载部分的长
  • 医疗器械维修工程师好做吗?赚钱吗?

    彩虹医疗器械维修培训第二期长期班安排 学技术 考证书 工作技术支持 彩虹介绍 彩虹医械维修培训中心成立于2003年 至今已有十余年的时间 为满足社会需求 推进医疗器械维修技术发展 开展医疗器械的维修技术培训 在社会上取得了良好的反应和口碑
  • 嵌入式Linux驱动开发(I2C专题)(四)

    编写APP直接访问EEPROM 参考资料 Linux驱动程序 drivers i2c i2c dev c I2C Tools 4 2 https mirrors edge kernel org pub software utils i2c
  • 在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性

    引言 作为全球领先的开源分布式 MQTT Broker EMQX 在 5 0 版本中引入了 MQTT over QUIC 将 MQTT 协议的优势与 QUIC 的特性相结合 通过充分利用 QUIC 协议低连接开销和多路复用的特点 MQTT
  • 入职避坑指南(杭州)

    前言 求职都说金三银四 今天和大家分享一个亲身经历的事情 今天讲的是杭州 群电商公司 规模500人左右 说说我被公司白瞟的亲身经历 希望看到这篇文章的同学能避开这些坑 面试过程 公司比较远 附近没有地铁 大概坐了一个多小时的公交车去面试 到
  • CompletableFuture使用详解

    https blog csdn net admin123404 article details 111168902
  • Centos7.9搭建kafka-3.2.0集群,三台机器组成,并安装安装eagle 监控

    目录 1 准备工作 2 搭建zookeeper集群 3 搭建kafka集群 4 测试kafka集群 4 1 命令测试 4 2 java代码测试 5 安装eagle 监控 1 准备工作 kafka 3 2 0的单机安装教程如下 CentOS7
  • MySQL的全连接

    从这篇博客开始 从高端大气的计算机视觉方向转行做JAVA开发了 接下来的博客就是JavaJavaJava了没有世界上最好用的pythonpythonpython 由于MySQL不支持FULL JOIN 所以 需要使用UNION来实现全连接
  • 一、多路复用

    1 什么是多路复用 数据通信系统或计算机网络系统中 传输媒体的带宽或容量往往会大于传输单一信号的需求 为了有效地利用通信线路 希望一个信道同时传输多路信号 这就是所谓的多路复用技术 Multiplexing 采用多路复用技术能把多个信号组合
  • 第三章 Jinja2模板

    第三章 Jinja2模板 在前面的实例中 视图函数的主要作用是生成请求的响应 这是最简单请求 实际上 视图函数有两个作用 处理业务逻辑 返回响应内容 在大型应用中 把业务逻辑和表现内容放在一起 会增加代码的复杂度和维护成本 模板其实是一个包
  • 因误删文件导致CentOS7开机卡死无法进入图形登录界面

    目录 1 背景 2 解决步骤 1 背景 这几天在清理电脑 需要删除虚拟机 为此写下了Linux系统下卸载VMware Workstation软件 nanke yh的博客 CSDN博客 但是同时怕有残留 自己全局搜索了vm 删除了部分带有vm
  • SpringBoot之整合Shiro(最详细)

    1 SpringBoot整合Shiro思路 2 环境搭建 2 1 创建项目 2 2 引入依赖 pom xml
  • 微信小程序html2canvas,微信小程序之Canvas填坑

    1用能境战求道 重件开又是正易里是了些之框 WXML CANVAS隐藏问求圈分件圈浏第用代是水刚道 的它还题 2需朋者说上事是础一发一开程和开数的目前间 JS CANVAS 新直能分支调二浏页器朋代说 事刚绘制图片 这里要注意的遇新是直朋能
  • [npm] npx 介绍与使用说明

    npm npx 介绍与使用说明 npm 的由来 npx 是什么 npx 特点 npx 的特点 项目安装包的使用 全局安装包的避免 指定工具包版本 no install 参数和 ignore existing 参数 使用不同版本的 node
  • linux开启vt虚拟化,VT虚拟化如何开启

    VT虚拟化如何开启 VT是什么意思 VT虚拟化怎么开启呢 下面小编为大家分享VT虚拟化开启技巧 欢迎大家参考 VT是什么意思 VT是英文virtualizationtechnology的缩写 其意思是CPU虚拟化技术 我们安装的手游助手就是
  • 【机器学习】如何根据数据集选择适合的模型

    Is it because we have many features in our data sheet 因为我们的数据表中有很多特征吗 Or is it because the feature list does not only co
  • SpringBoot(四)SpringBoot搭建简单服务端

    通过之前的几篇文章相信大家已经对SpringBoot项目开发有了一个基本的了解 本篇 介绍下如何使用SpringBoot搭建一个简单的服务端 实现一个新用户注册的场景 供前端和移动端去使用 本篇需要你对SpringBoot的starter