seo网站排名优化,wordpress 注册 填写密码,销售方案怎么写,ucenter 整合两个数据库网站你能学到什么
表白墙#xff08;升级版#xff09;Mybatis的一些简单应用
正文
前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中#xff0c;接下来咱们借助MyBatis来实现数据库的操作。
数据准备
如果我们…你能学到什么
表白墙升级版Mybatis的一些简单应用
正文
前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中接下来咱们借助MyBatis来实现数据库的操作。
数据准备
如果我们想将数据存起来首先要有一个数据库吧所以首先就是要创建一个数据库 由于直接在Mysql 小黑框里写有点麻烦我们可以借助一些软件来更加简单的创建数据库我使用的是Navicat Premium17挺好用的虽然它收费但是搜搜教程免费的就来了懂我的意思吧。 最好使用Mysql 8 因为 Mysql5 好像和新的一些功能不兼容了。 这是创建一个message_info表的代码有兴趣的可以跟着敲一下就当复习了没兴趣的直接复制就行。
DROP TABLE IF EXISTS message_info;
CREATE TABLE message_info (
id INT ( 11 ) NOT NULL AUTO_INCREMENT,
from VARCHAR ( 127 ) NOT NULL,
to VARCHAR ( 127 ) NOT NULL,
message VARCHAR ( 256 ) NOT NULL,
delete_flag TINYINT ( 4 ) DEFAULT 0 COMMENT 0-正常, 1-删除,
create_time DATETIME DEFAULT now(),
update_time DATETIME DEFAULT now() ON UPDATE now(),
PRIMARY KEY ( id )
) ENGINE INNODB DEFAULT CHARSET utf8mb4;引入依赖
引⼊MyBatis 和 MySQL驱动依赖
方法一修改pom文件然后刷新Maven就能将依赖加进来 下面是用到的依赖有需要的可以复制
dependency
groupIdorg.mybatis.spring.boot/groupId
artifactIdmybatis-spring-boot-starter/artifactId
version3.0.3/version
/dependency
dependency
groupIdcom.mysql/groupId
artifactIdmysql-connector-j/artifactId
scoperuntime/scope
/dependency方法二使⽤插件EditStarters来引入依赖
1先打开settings 然后在Plugins插件里面搜EditStarters,点击install就行了然后重启IDEA就能用了 2在pom文件页面右键generate然后按照以下的简图进行 方法三在创建项目的时候就将依赖加进来 以上的方法任选其一就行。 对于方法三吃一堑长一智下次我们在创建项目的时候直接添加进来就行了就不用后期再次添加了。
配置Mysql账号密码
这个操作需要在applicantion.properties文件下配置由于这里我只提供了yml格式的配置信息大家可以将这个文件重命名改成applicantion.yml照着下面的流程图改就行了。 将相应的配置信息添加进来 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/blogs_text?characterEncodingutf8useSSLfalseusername: rootpassword: 456123driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration: # 配置打印 MyBatis⽇志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换
编写后端代码
实体类info 我们可以看到数据库里有很多属性如果只靠我们之前定义的类中的属性肯定是不够的所以我们要重新定义一个实体类和数据库里的属性对应。 实体类代码
package com.example.leavemessage_blogs.model;
import lombok.Data;
import java.util.Date;
Data
public class Info {private Integer id;private String from;private String to;private String message;private Integer deleteFlag;private Date createTime;private Date updateTime;
}
使用Mybatis 操作数据库
说到这里我们就需要想一想接口文档了我们的需求是什么要用增删改查的哪一个。我们知道表白墙的两大功能就是 1显示数据2添加信息 由此我们可以回忆一下之前我们的初级表白墙怎么做的我们是用一个list来储存数据如果要显示数据就将list返回给前端。而此刻我们不再用list储存数据了而是用数据库所以我们要提供的功能就是1查找数据select返回数据给前端页面显示2新增数据insert将用户输入的数据存到数据库中
InfoMapper接口的代码由于我们不需要方法有具体的实现所以定义成接口更合适
我们先完成一个功能添加
package com.example.leavemessage_blogs.Mapper;import com.example.leavemessage_blogs.model.Info;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;//使用Mybatis操作数据库别忘记加Mapper注解
Mapper
public interface InfoMapper {//我们采用传对象的方式由于前端只提交这几个值所以我们只需要将这几个值传入数据库就行了其他的默认值就行Insert(insert into message_info(from,to,message) values (#{from},#{to},#{message}))public boolean addInfo(Info info);}
编写并测试新增addInfo功能
上面我们已经写好了可以测试一下我们写的到底对不对 右键——》generate——》text——》勾选你要测试的方法其他不用动。
然后加上SpringBootText 测试注解编写测试代码。 因此我们将sql语句加上反引号 测试结果成功 新增的测试代码
package com.example.leavemessage_blogs.Mapper;import com.example.leavemessage_blogs.model.Info;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest
class InfoMapperTest {AutowiredInfoMapper infoMapper;Testvoid addInfo() {Info info new Info();info.setFrom(wulanzheng);info.setTo(chengaiying);info.setMessage(I love you);}
}编写并测试查询querryAllInfo功能
查询功能的代码
package com.example.leavemessage_blogs.Mapper;import com.example.leavemessage_blogs.model.Info;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;//别忘记加Mapper注解
Mapper
public interface InfoMapper {//我们采用传对象的方式由于前端只提交这几个值所以我们只需要将这几个值传入数据库就行了其他的默认值就行
// Insert(insert into message_info(from,to,message) values (#{from},#{to},#{message}))
// public boolean addInfo(Info info);Select(select * from Message_info)public ListInfo querryAllInfo();}
测试
注意如果你在右键——》generate——》text——》勾选你要测试的方法。 的过程中出现了下面的Error 不要慌直接点击ok就行了。 我们能能看到代码运行成功还打印出了结果
查询的测试代码
package com.example.leavemessage_blogs.Mapper;import com.example.leavemessage_blogs.model.Info;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest
class InfoMapperTest {AutowiredInfoMapper infoMapper;// Test
// void addInfo() {
// Info info new Info();
// info.setFrom(wulanzheng);
// info.setTo(chengaiying);
// info.setMessage(I love you);
// infoMapper.addInfo(info);
// }Test
void querryAllInfo() {//将查询的数据遍历打印下来这是一种lamda表达式的写法infoMapper.querryAllInfo().forEach(System.out::println);
}
}这样我们的后端主要的架构就写完了但是由于应用分层的理念我们还要写service方法和controller进行交互
编写service代码应用分层交互
package com.example.leavemessage_blogs.Service;import com.example.leavemessage_blogs.Mapper.InfoMapper;
import com.example.leavemessage_blogs.model.Info;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;Service
public class InfoService {AutowiredInfoMapper infoMapper;public ListInfo getInfo(){return infoMapper.querryAllInfo();}public boolean addInfo(Info info){boolean ret infoMapper.addInfo(info);if(ret) {return true;}return false;}
}
修改controller 代码
我们已经将数据库引入了自然就不需要list来存储数据了所以controller中的代码也要修改 修改后的controller代码
package com.example.leavemessage_blogs.Controller;import com.example.leavemessage_blogs.Service.InfoService;
import com.example.leavemessage_blogs.model.Info;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;RequestMapping(/message)
RestController
public class MessageController {AutowiredInfoService infoService;RequestMapping(getList_Mysql)public ListInfo getList(){return infoService.getInfo();}RequestMapping(/addInfo)public boolean addInfo(Info info){System.out.println(info);if(StringUtils.hasLength(info.getFrom())StringUtils.hasLength(info.getTo())StringUtils.hasLength(info.getMessage())){infoService.addInfo(info);return true;}return false;}
}
测试后端代码
此时我们就已经将后端代码全部修改完毕了就是测试了我们使用postman来测试。
测试新增的功能
可以看到发送成功 我们再看看数据库 没有任何问题
测试查询的功能
也是没有任何问题
小tips对于测试单一接口先将controller 类和service类Mapper类都先写了然后再经过Postman访问controller的url从而达到测试的目的这也是一种测试的方法。但是相比较于我们上面的直接generate自动生成的方法自动生成的方法更加的方便高效所以更推荐在测试一个接口的时候使用自动生成的方法。
编写前端代码
确定了后端代码全部正确以后此时我们再次点开messagewall.html文件对前端代码进行修改 看来看去好想只有load里的url需要修改一下 load();function load() {$.ajax({type: get,url: /message/getList_Mysql,//修改这里的url改成我们新的urlsuccess: function (result) {for (var message of result) {var divE div message.from 对 message.to 说: message.message /div;$(.container).append(divE);}}});}
测试前端代码
访问http://127.0.0.1:8080/messagewall.html之后会出现我们之前添加过的数据这表示查询功能正常 我们此时再添加一个数据可以看到功能正常 以上的表白墙无论你怎么重复启动程序都不会丢失数据了这就是表白墙进阶全部内容了如果有什么问题欢迎留言我们共同探讨。