Vue + Spring Boot 项目实战(五):数据库的引入

文章目录

  • 一、引入数据库
    • 1.安装数据库
    • 2. 安装mysql
    • 3. MySQL客户端
    • 4. .使用 Navicat 创建数据库与表
  • 二、使用数据库验证登录
    • 1.项目相关配置
    • 2.登录控制器
      • 2.1. User 类
      • 2.2. UserDAO
      • 2.3. UserService
      • 2.4. LoginController
      • 2.5. 测试

一、引入数据库

1.安装数据库

官网地址:https://dev.mysql.com/downloads/mysql/
在这里插入图片描述

2. 安装mysql

win10 下安装、配置、启动mysql
https://gblfy.blog.csdn.net/article/details/90112245

3. MySQL客户端

操作 MySQL 有很多种方式,可以先用 Navicat
参考连接:
https://gblfy.blog.csdn.net/article/details/90403214

4. .使用 Navicat 创建数据库与表

下面的内容主要针对初次使用数据库的读者,有经验的读者可以直接执行下面的 sql 语句,记得先新建一个数据库,名称最好叫 white_jotter,方便以后的配置

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'admin', '123');

按照上面贴出来的教程安装完 MySQL 和 Navicat 后,打开 Navicat,点击连接 -> MySQL,新建数据库连接
在这里插入图片描述
在这里插入图片描述

安装完 MySQL 会有几个默认的数据库,这些不要动,我们在连接(即 WJ)上右键新建一个数据库,命名为 white_jotter,字符集选择 UTF-8,排序规则选择 utf8_general_ci 即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OK,到现在为止,数据库的操作就完成了。

二、使用数据库验证登录

上一篇中我们直接在后端的控制器中用如下语句判断了用户名和密码的正确性:

if (!Objects.equals("admin", username) || !Objects.equals("123456", requestUser.getPassword())) {String message = "账号密码错误";System.out.println("test");return new Result(400);} else {return new Result(200);}

使用数据库验证的逻辑其实也类似,大概是如下过程:

第一步,获得前端发送过来的用户名和密码信息
第二步,查询数据库中是否存在相同的一对用户名和密码
第三步,如果存在,返回成功代码(200),如果不存在,返回失败代码(400)

这里的语句很简单,但在修改之前还需要一些准备工作。

1.项目相关配置

打开我们的后端项目 wj,首先修改 pom.xml,配置我们需要的依赖。为了方便以后的开发,我直接把我的配置粘贴上来,大家可以把原来的所有配置删除掉,再粘贴我的。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.gblfy</groupId><artifactId>wj</artifactId><version>0.0.1-SNAPSHOT</version><name>wj</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!-- springboot web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- springboot tomcat 支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><!-- 热部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!-- jpa--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- springboot test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- thymeleaf --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- elastic search --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- 用了 elasticsearch 就要加这么一个,不然要com.sun.jna.Native 错误 --><dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifactId><version>3.0.9</version></dependency><!-- thymeleaf legacyhtml5 模式支持 --><dependency><groupId>net.sourceforge.nekohtml</groupId><artifactId>nekohtml</artifactId><version>1.9.22</version></dependency><!-- 测试支持 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- tomcat的支持.--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><version>8.5.23</version></dependency><!-- mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- commons-lang --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!-- shiro --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency><!-- hsqldb --><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

粘贴过去之后,IDE 会弹出提示,点击 Import Changes 或 Enable Auto-Import 都可以。
接下来就等待依赖的自动安装。过程可能比较长。如果自动安装的过程没有执行,可以在 pom.xml 上右键,选择 Maven -> Reimport 。

配置完依赖后,还需要配置数据库。打开 src\main\resources\application.yml,在原来的基础上,添加如下语句

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/white_jotter?characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: rootjpa:hibernate:ddl-auto: none

注意端口、数据库名、用户名、密码要与你想使用的数据库一致。

2.登录控制器

配置完成后,我们就可以完善登录控制器了。

2.1. User 类

首先,我们修改 User 类代码如下,以建立对数据库的映射。

package com.gblfy.wj.pojo;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;import javax.persistence.*;@Entity
@Table(name = "user")
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")int id;String username;String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

上面使用了一些注解,其中

@Entity 表示这是一个实体类
@Table(name=“user”) 表示对应的表名是 user

为了简化对数据库的操作,我们使用了 Java Persistence API(JPA),对于 @JsonIgnoreProperties({ “handler”,“hibernateLazyInitializer” }),解释起来比较复杂,下面的话看不懂可以忽略:

因为是做前后端分离,而前后端数据交互用的是 json 格式。 那么 User 对象就会被转换为 json 数据。 而本项目使用 jpa 来做实体类的持久化,jpa 默认会使用 hibernate, 在 jpa 工作过程中,就会创造代理类来继承 User ,并添加 handler 和 hibernateLazyInitializer 这两个无须 json 化的属性,所以这里需要用 JsonIgnoreProperties 把这两个属性忽略掉。

2.2. UserDAO

Data Access Object(数据访问对象,DAO)即用来操作数据库的对象,这个对象可以是我们自己开发的,也可以是框架提供的。这里我们通过继承 JpaRepository 的方式构建 DAO。

首先新建一个 package,命名为 dao,然后创建 Java Class,命名为 UserDAO,选择种类为 Interface

package com.gblfy.wj.dao;import com.gblfy.wj.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;public interface UserDAO extends JpaRepository<User, Integer> {User findByUsername(String username);User getByUsernameAndPassword(String username, String password);
}

这里关键的地方在于方法的名字。由于使用了 JPA,无需手动构建 SQL 语句,而只需要按照规范提供方法的名字即可实现对数据库的增删改查。

如 findByUsername,就是通过 username 字段查询到对应的行,并返回给 User 类。

这里我们构建了两个方法,一个是通过用户名查询,一个是通过用户名及密码查询。

2.3. UserService

新建 package,命名为 service,新建 Java Class,命名为 UserService,代码如下

package com.gblfy.wj.service;import com.gblfy.wj.dao.UserDAO;
import com.gblfy.wj.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@AutowiredUserDAO userDAO;public boolean isExist(String username) {User user = getByName(username);return null != user;}public User getByName(String username) {return userDAO.findByUsername(username);}public User get(String username, String password) {return userDAO.getByUsernameAndPassword(username, password);}public void add(User user) {userDAO.save(user);}
}

这里实际上是对 UserDAO 进行了二次封装,一般来讲,我们在 DAO 中只定义基础的增删改查操作,而具体的操作,需要由 Service 来完成。当然,由于我们做的操作原本就比较简单,所以这里看起来只是简单地重命名了一下,比如把 “通过用户名及密码查询并获得对象” 这种方法命名为 get。

2.4. LoginController

登录控制器是我们功能的核心部分,尽管它十分简单。逻辑上面已经讲过了,具体的实现,就是通过 UserService 提供的 get 方法查询数据库,如果返回的对象为空,则验证失败,否则就验证成功。代码如下

package com.gblfy.wj.controller;import com.gblfy.wj.pojo.User;
import com.gblfy.wj.result.Result;
import com.gblfy.wj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.HtmlUtils;@Controller
public class LoginController {@AutowiredUserService userService;@CrossOrigin@PostMapping(value = "/api/login")@ResponseBodypublic Result login(@RequestBody User requestUser) {String username = requestUser.getUsername();username = HtmlUtils.htmlEscape(username);User user = userService.get(username, requestUser.getPassword());if (null == user) {return new Result(400);} else {return new Result(200);}}
}

这个没有其它要说的,忘记了怎么回事的话可以回过头看下上一篇文章

2.5. 测试

同时运行前端项目 wj-vue 与后端项目 wj,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问 http://localhost:8080/#/login,输入用户名 admin,密码 123456,我去,没进去!没进去就对了,因为数据库中 admin 的密码式 123 啊。

重新输入密码 123,成功进入 localhost:8080/#/index
在这里插入图片描述
OK,截至目前,前后端、数据库之间的关系都打通了。下一篇我打算讲讲怎么做表面功夫,即通过 Element 优化前端的界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三招提升数据不平衡模型的性能(附python代码)

摘要&#xff1a; 本文的主要目标是处理数据不平衡问题。文中描述了用来克服数据不平衡问题的三种技术&#xff0c;分别是集成交叉验证、类别权重以及过大预测 。对于深度学习而言&#xff0c;数据集非常重要&#xff0c;但在实际项目中&#xff0c;或多或少会碰见数据不平衡问…

为什么说「中台」程序员将来会最值钱?

戳蓝字“CSDN云计算”关注我们哦&#xff01;今年在国内互联网公司中真的是很流行中台这个概念&#xff0c;不&#xff0c;是非常流行&#xff0c;是相当流行。作为程序员真的非常有必要了解一下。国内中台概念的由来国内中台的这个概念最早是由阿里巴巴提出来的。据说故事是这…

springboot导包显示不存在_BOOT项目依赖另外一个模块的包,开发的时候都正常,执行clean package打包成jar时却提示依赖的模块包不存在。...

我在service1模块里依赖了common模块&#xff0c;开发的时候包都能正常引用到&#xff0c;启动也能正常测试访问&#xff0c;可是奇怪的是&#xff0c;当我要打包成jar包时&#xff0c;就提示service1里依赖common的包都不存在&#xff0c;之前从没遇到过这种问题&#xff0c;有…

别把机器学习和人工智能搞混了!

摘要&#xff1a; 原来机器学习就是人工智能的一小部分啊&#xff01;智力就是理性思考和控制行为的能力。人类有智慧去思考和利用常识来作出决定。人工智能就是一个构建智能代理的研究领域&#xff0c;因此未来我们打造出来的人工智能可以像人一样思考并理性行事。图灵测试由艾…

varclus变量聚类对变量有啥要求_互助问答第208期:递归的双变量probit模型问题...

递归的双变量probit模型的stata命令是什么&#xff1f;比如二元被解释变量为y1&#xff0c;内生的二元变量为t1&#xff0c;x1和x2是其他外生协变量&#xff0c;iv1为内生二元解释变量的工具变量&#xff0c;那么&#xff0c;递归双变量probit模型是否可以写为&#xff1a;bipr…

Vue + Spring Boot 项目实战(六):使用 Element 辅助前端开发

文章目录一、安装并引入 Element1.安装 Element2.引入 Element二、优化登录页面1.使用 Form 组件2.添加样式3.设置背景4.完整代码之前我们实现了登录功能&#xff0c;但不得不说登录页面实在是太简陋了。在这个看脸的社会&#xff0c;如果代码写的烂&#xff0c;界面也做得不好…

不止 5G 和鸿蒙,华为最新大招,扔出 AI 计算核弹

戳蓝字“CSDN云计算”关注我们哦&#xff01;华为发布全世界最快AI产品&#xff0c;集成1024颗业内最强芯片&#xff0c;训练ResNet-50只需59.8秒。近日&#xff0c;华为全联接大会开幕&#xff0c;推出又一重量级AI产品Atlas900。此前接受外媒采访时&#xff0c;任正非就已经预…

阿里90后工程师利用ARM硬件特性开启安卓8终端“上帝模式”

摘要&#xff1a; 本文以安卓8终端为载体&#xff0c;介绍阿里安全潘多拉实验室成员研究并提出的内核空间镜像攻击利用技巧。文/图 阿里安全潘多拉实验室 团控编者按&#xff1a;团控&#xff0c;阿里安全潘多拉实验室研究人员&#xff0c;该实验室主要聚焦于移动安全领域&…

linux环境下企业基于域名访问的web于电子邮件服务器 论文,基于Linux平台的企业邮件服务器搭建...

我失骄杨君失柳&#xff0c;杨柳轻飏直上重霄九。得道多助&#xff0c;失道寡助。身后有余忘缩手&#xff0c;眼前无路想回头。鸟宿池边树&#xff0c;僧敲月下门。想当年&#xff0c;金戈铁马&#xff0c;气吞万里如虎。 本文由418133804贡献pdf文档可能在WAP端浏览体验不佳。…

python多进程写入mysql_Python实现 多进程导入CSV数据到 MySQL

前段时间帮同事处理了一个把 CSV 数据导入到 MySQL 的需求。两个很大的 CSV 文件&#xff0c; 分别有 3GB、2100 万条记录和 7GB、3500 万条记录。对于这个量级的数据&#xff0c;用简单的单进程&#xff0f;单线程导入 会耗时很久&#xff0c;最终用了多进程的方式来实现。具体…

【HBase从入门到精通系列】误删数据如何抢救?

摘要&#xff1a; 前言 有时候我们操作数据库的时候不小心误删数据&#xff0c;这时候如何找回&#xff1f;mysql里有binlog可以帮助我们恢复数据&#xff0c;但是没有开binlog也没有备份就尴尬了。如果是HBase&#xff0c;你没有做备份误删了又如何恢复呢&#xff1f; 数据保护…

神龙X-Dragon,这技术“范儿”如何?

戳蓝字“CSDN云计算”关注我们哦&#xff01;在CSDN总部会议室&#xff0c;阿晶首次见到了阿里云智能研究员、弹性计算技术负责人张献涛——这位不仅仅在阿里云智能内部&#xff0c;在业内也是响当当的虚拟化技术大牛。现在回想起来&#xff0c;当时聊了没两句&#xff0c;阿晶…

python 如何判断一个函数执行完成_三步搞定 Python 中的文件操作

当程序运行时&#xff0c;变量是保存数据的好方法&#xff0c;但变量、序列以及对象中存储的数据是暂时的&#xff0c;程序结束后就会丢失&#xff0c;如果希望程序结束后数据仍然保持&#xff0c;就需要将数据保存到文件中。Python 提供了内置的文件对象&#xff0c;以及对文件…

一位资深程序员大牛给予Java初学者的学习路线建议

摘要&#xff1a; java学习这一部分其实也算是今天的重点&#xff0c;这一部分用来回答很多群里的朋友所问过的问题&#xff0c;那就是我你是如何学习Java的&#xff0c;能不能给点建议&#xff1f;今天我是打算来点干货&#xff0c;因此咱们就不说一些学习方法和技巧了&#x…

Vue + Spring Boot 项目实战(七):前端路由与登录拦截器

文章目录前言一、前端路由二、使用 History 模式三、后端登录拦截器3.1. LoginController3.2. LoginInterceptor3.3. WebConfigurer3.4. 效果检验四、Vuex 与前端登录拦截器4.1. 引入 Vuex4.2. 修改路由配置4.3. 使用钩子函数判断是否拦截4.4. 修改 Login.vue4.5. 效果检验前言…

前端性能优化二十五:花裤衩模板vue打包优化

(1). 优化vue.js: ①. 修改vue.config.js:const isProd process.env.NODE_ENV productionconst getProdExternals () > {return {vue: Vue,// vue-router: VueRouter,// vuex: Vuex}}module.exports {...configureWebpack: {...externals: isProd ? getProdExternals(…

linux win10 时间同步服务器,windows和linux下服务器时间如何校正?

实现思路&#xff1a;使用NTP(简称network time protocol)协议可以让你的计算机自动与服务器上的时间同步。从而保持最准确的时间。中国国家授时中心的IP地址是&#xff1a;210.72.145.44。Windows XP/2000系统&#xff1a;控制面板,管理工具,服务中找到 Windows Time&#xff…

ppt护理文书流程图_护理文书书品管圈ppt

PPT内容这是护理文书书品管圈ppt下载&#xff0c;主要介绍了圈的组成&#xff1b;圈名意义&#xff1b;圈徽的意义&#xff1b;启动PDCA的循环&#xff1b;主题选定的理由&#xff1b;书写流程图&#xff1b;需改善的目标&#xff1b;对策拟定&#xff1b;目标达到率、进步率&a…

高手如何实践HBase?不容错过的滴滴内部技巧

摘要&#xff1a; HBase和Phoenix的优势大家众所周知&#xff0c;想要落地实践却问题一堆&#xff1f;replication的随机发送、Connection的管理是否让你头痛不已&#xff1f;本次分享中&#xff0c;滴滴以典型的应用场景带大家深入探究HBase和Phoenix&#xff0c;并分享内核改…

JS 打印 data数据_数据表格 Data Table - 复杂内容的15个设计点

表格是桌面应用中常见的内容型组件&#xff0c;它包含大量的信息和丰富的交互形式&#xff0c;表格具有极高的空间利用率&#xff0c;结构化的展示保证了数据可读性。高效、清晰且易用是进行表格设计的原则性要求。本文将从表格的内容组织到交互作一次汇总&#xff0c;作为数据…