【JavaEE】表白墙再升级(MySQL实现持久化)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在最初的表白墙版本中,页面已刷新,“甜言蜜语”就会丢失:

【JavaEE】表白墙再升级(MySQL实现持久化)


在最初的表白墙版本中,页面已刷新,“甜言蜜语”就会丢失:


【JavaScript】实战训练小项目-WebAPI_s:103的博客-CSDN博客

而在第二版本的表白墙,我们实现了页面刷新,“甜言蜜语”不会丢失,但是服务器刷新,“甜言蜜语”也会丢失:


【JavaEE】简单前后端分离小项目-表白墙_s:103的博客-CSDN博客

而这第三版本的表白墙,我们通过MySQL实现持久化,紧接着就是我们本篇文章了!


JDBC基础:【MySQL】Java-JDBC_s:103的博客-CSDN博客


1. 后端引入JDBC的依赖


有了依赖,才能使用JDBC~


中央仓库:Maven Repository: Central (mvnrepository.com)

f1b22be37a97427196f78b8a8cc1b075.png

我选择的是5.1.49,复制依赖~


3ee20e97ebfd4258ab6f474e98cf1e63.png


粘贴到后端pom.xml里



b62c189098584b24a20de9352b92b731.png


2. 建库建表


必须得用数据库和数据表才行呀


在后端识别是否存在此库此表(否则自动建立)

在后端识别库表是否存在,否则建立

在MySQL那边直接建立数据库和表(本文写法)

感兴趣的可以依照以下写法(模板)去实现1操作:


90e6ba523e354c2a95684e5c68d7f15a.png


建库:


5d635d7b0e1149f49ba2088a149f5e27.png

建表:


form 和 to 都是关键字,需要用反引号引用**(键盘左上角与~同键,英语版本不用shift按就是`)**


e99110fb21794c41818db15724189d5b.png


3. 编写数据库代码(JDBC)

5aebb666f70c4b16aa5a6c7eb8f3442c.png


3.1 doGet方法改写


从数据库中加载数据

load方法(需要自己编写)

加载的数据打包成一个数组/集合

load方法的返回值!

解析成json响应回去

f0bf206c38784b4caee2fb526cc9fdcc.png


3.1.1 构建本地数据源

54600d8732cb4221aae3c78b94ca085d.png


url那一段现在看也比较熟悉了,但是还是建议复制粘贴~

jdbc:mysql://127.0.0.1:3306/Loves/characterEncoding=utf8&useSSL=false


其中Loves为数据库名


3.1.2 用本地数据源构造连接器


Connection connection = dataSource.getConnection();


3.1.3 连接器将sql语句转化为“蓄势待发的状态”


String sql = "select * from message;";
PreparedStatement preparedStatement = connection.prepareStatement(sql);


3.1.4 一触即发!


给Love类添加构造方法:


class Love {
    public String from;
    public String to;
    public String love;
    @Override
    public String toString() {
        return "Love{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                ", love='" + love + '\'' +
                '}';
    }
    public Love() {
        //没有这个一定不行!!!
        //因为后续json构建Love对象需要用到无参的构造方法
    }
    public Love(String from, String to, String love) {
        this.from = from;
        this.to = to;
        this.love = love;
    }
}



获取到ResultSet对象后,迭代他,存进list,释放资源后返回list

List<Love> list = new ArrayList<>();
while(set.next()) {
    String from = set.getString("from");
    String to = set.getString("to");
    String love = set.getString("love");
    list.add(new Love(from, to, love));
}
set.close();
preparedStatement.close();
connection.close();
return list;


3.2 doPost方法


将请求里的json转化为对象

传入save方法中

在save方法中,将对象转化为“插入sql语句”,存入数据库

0008c7e0dcbb4850be3cc7f3172efa9f.png


3.2.1 构建本地数据源并构造连接器


DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/Loves/characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("mmsszsd666");//这是俺的微信号,欢迎添加,相互学习!
Connection connection = dataSource.getConnection();


3.2.2 Love对象转化为sql语句


?就是通配符~


eae79f0391654a90a7fef84dd95ba957.png

服务器跑异常了!

经典错误:

e5e30911d2234c968e510859f254a579.png


String sql = "insert into message values(?, ?, ?);";
PreparedStatement preparedStatement = connection.prepareStatement(sql);


3.2.3 用Love对象的属性将通配符替换掉


preparedStatement.setString(1, love.from);
preparedStatement.setString(2, love.to);
preparedStatement.setString(3, love.love);


3.2.4 一触即发!


preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();


4. 测试以及小结


是不是还没开始就结束了,没错只需要简简单单这么一改,就实现了持久化~

启动服务器,打开客户端:


可能因为异常用的是throws的原因,所以根方法也要处理异常~

a3cb3defc2bc48b2be64b8707ff11a11.png

可能是调用doXXX的方法里没有throws这个异常,所以用catch比较合适

输入测试:


a797be2de741467689a63951f92ef6f7.png


可能是你的DataSource和Connection是jdbc的,我们要的是java的,换一换~

可能是你Love的无参构造方法没有定义

可能是你sql语句有误,或者单词拼写错误…

bbe7c1a3f50d435c8a7a5b6c88473fae.png



用连着电脑热点的手机测试:

8a3fea04a8cb4e5195a51554d417f31b.png

c46ba4c4ff8d4d16b37caf520478bfc8.gif



刷新浏览器,刷新服务器测试:

image.png



通过上述代码,我们已经完成了一个简单的网站了!


而我们写更复杂的网站,都依靠这一样的逻辑:


约定前后端交互方式(接口)

实现服务器代码(涉及操作数据库)

实现客户端代码(涉及ajax构造请求,并且用webapi去操控页面)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
监控 关系型数据库 MySQL
mysql升级和降级
mysql升级和降级
265 9
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
225 0
|
29天前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
33 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
12天前
|
监控 关系型数据库 MySQL
如何升级MySQL数据库?
【10月更文挑战第16天】如何升级MySQL数据库?
|
2月前
|
监控 关系型数据库 MySQL
如何升级mysql的版本
如何升级mysql的版本
362 2
|
2月前
|
存储 监控 关系型数据库
如何升级MySQL版本?
如何升级MySQL版本?
96 2
|
3月前
|
SQL 存储 Oracle
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
57 0
|
5月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
158 2
|
6月前
|
存储 关系型数据库 MySQL
AnalyticDB MySQL新购页面融合升级,提供企业版购买选项
AnalyticDB MySQL新购页面升级,现推出企业版和基础版,不再区分湖仓版和数仓版。企业版(集群模式)和基础版(单机模式)融合了弹性模式和预留模式的功能,提供资源隔离、弹性扩展及高性能查询,适合开发测试和生产环境,而基础版适用于小规模测试,不推荐用于生产环境。
AnalyticDB MySQL新购页面融合升级,提供企业版购买选项
|
6月前
|
存储 缓存 算法
MySQL持久化不为人知的一面⭐️卡顿现象的根源与对策
MySQL持久化不为人知的一面⭐️卡顿现象的根源与对策