【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)
我选择的是5.1.49,复制依赖~
粘贴到后端pom.xml里
2. 建库建表
必须得用数据库和数据表才行呀
在后端识别是否存在此库此表(否则自动建立)
在后端识别库表是否存在,否则建立
在MySQL那边直接建立数据库和表(本文写法)
感兴趣的可以依照以下写法(模板)去实现1操作:
建库:
建表:
form 和 to 都是关键字,需要用反引号引用**(键盘左上角与~同键,英语版本不用shift按就是`)**
3. 编写数据库代码(JDBC)
3.1 doGet方法改写
从数据库中加载数据
load方法(需要自己编写)
加载的数据打包成一个数组/集合
load方法的返回值!
解析成json响应回去
3.1.1 构建本地数据源
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语句”,存入数据库
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语句
?就是通配符~
服务器跑异常了!
经典错误:
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的原因,所以根方法也要处理异常~
可能是调用doXXX的方法里没有throws这个异常,所以用catch比较合适
输入测试:
可能是你的DataSource和Connection是jdbc的,我们要的是java的,换一换~
可能是你Love的无参构造方法没有定义
可能是你sql语句有误,或者单词拼写错误…
用连着电脑热点的手机测试:
刷新浏览器,刷新服务器测试:
通过上述代码,我们已经完成了一个简单的网站了!
而我们写更复杂的网站,都依靠这一样的逻辑:
约定前后端交互方式(接口)
实现服务器代码(涉及操作数据库)
实现客户端代码(涉及ajax构造请求,并且用webapi去操控页面)