当前位置: 首页 > news >正文

校级特色专业建设网站天津电商网站制作

校级特色专业建设网站,天津电商网站制作,莱芜话题济南在线,网站建设英语怎么说前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用 接口类中的各种方法 , 并对数据库完成一些操作 创建DataBaseManager 类 在这个类中, 我们 需要完成对数据库的建库建表操作 , 并封装 一些关于表的增删查改方法(这里说一下, 因为我们使用的数据库是SQLite 是一个文件, 所以当调用建表操作的时候就自动建库了) 实现的方法 init()初始化, 该方法内如果没有表的存在就去创建表checkDB,检查数据库文件是否存在createtable 创建表default 创建一个默认的交换机插入进去delete数据库文件的删除剩下的就是封装 队列 交换机 绑定的方法了 对于各种方法的介绍, 都写进代码里面了 ,自行阅读即可 package com.example.demo.mqServer.dataCenter;import com.example.demo.MqApplication; import com.example.demo.mqServer.core.Binding; import com.example.demo.mqServer.core.Exchange; import com.example.demo.mqServer.core.ExchangeType; import com.example.demo.mqServer.core.MSGQueue; import com.example.demo.mqServer.mapper.MateMapper;import java.io.File; import java.util.List;public class DataBaseManager {private MateMapper mateMapper;// 针对数据库进行初始化public void init() {// 手动获取matemapper 对象mateMapper MqApplication.context.getBean(MateMapper.class);// 手动的获取到 MetaMapperif (!checkDBExists()) {//如果数据库不存在,就进行建表操作// 先创建一个data目录File dataDir new File(./data);dataDir.mkdirs();createTable();// 插入默认数据createDefaultData();System.out.println([DataBaseManager] 数据库初始化完成!);} else {// 数据库已经存在了, 啥都不必做即可System.out.println([DataBaseManager] 数据库已经存在!);}}// 删除数据库, 及删除文件 也删除目录 public void deleteDB() {File file new File(./data/meta.db);boolean ret file.delete();if (ret) {System.out.println([DataBaseManager] 删除数据库文件成功!);} else {System.out.println([DataBaseManager] 删除数据库文件失败!);}File dataDir new File(./data);// 使用 delete 删除目录的时候, 需要保证目录是空的.ret dataDir.delete();if (ret) {System.out.println([DataBaseManager] 删除数据库目录成功!);} else {System.out.println([DataBaseManager] 删除数据库目录失败!);}}// 检查是否存在meta.db 文件private boolean checkDBExists() {File file new File(./data/meta.db);return file.exists();}// 这个方法用来建表.// 建库操作并不需要手动执行. (不需要手动创建 meta.db 文件)// 首次执行这里的数据库操作的时候, 就会自动的创建出 meta.db 文件来 (MyBatis 帮我们完成的)private void createTable() {mateMapper.createExchangeTable();mateMapper.createQueueTable();mateMapper.createBindingTable();System.out.println([DataBaseManager] 创建表完成!);}// 给数据库表中, 添加默认的数据.// 此处主要是添加一个默认的交换机.// RabbitMQ 里有一个这样的设定: 带有一个 匿名 的交换机, 类型是 DIRECT.private void createDefaultData() {// 先构建一个交换机Exchange exchange new Exchange();exchange.setName();exchange.setType(ExchangeType.direct);exchange.setDurable(true);exchange.setAutoDelete(false);mateMapper.insertExchange(exchange);System.out.println([DataBaseManager] 创建初始数据完成!);}public void insertExchange(Exchange exchange){mateMapper.insertExchange(exchange);}public ListExchange selectAllExchanges(){return mateMapper.selectAllExchanges();}public void deleteExchange(String exchangeName){mateMapper.deleteExchange(exchangeName);}public void insertQueue(MSGQueue queue){mateMapper.insertQueue(queue);}public ListMSGQueue selectAllQueues(){return mateMapper.selectAllQueues();}public void deleteQueue(String queueName){mateMapper.deleteQueue(queueName);}public void insertBinding(Binding binding){mateMapper.insertBinding(binding);}public ListBinding selectAllBindings(){return mateMapper.selectAllBindings();}public void deleteBinding(Binding binding){mateMapper.deleteBinding(binding);} } 另一种获取Bean对象的方式 对DataBaseManager 类的 解释, 我们知道 想要 获取 Bean对象 一般情况下 我们使用的 Autowired注解, 但是这个类 我们想要手动 来操作, 使用Autowired 就在一开始就存入了 , 所以我们教大家另一种 获取Bean对象的方式 步骤1: 找到启动类 , 在启动类中添加一个静态成员 public static ConfigurableApplicationContext context; 步骤2: 使用context 等于 run方法结果 步骤3: 在DataBaseManager 中使用 context 来实现对象装配 mateMapper MqApplication.context.getBean(MateMapper.class); package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext;SpringBootApplication public class MqApplication {// 在启动类创建一个静态成员, 用来手动的获取bean对象public static ConfigurableApplicationContext context;public static void main(String[] args) {context SpringApplication.run(MqApplication.class, args);}} 对数据库进行单元测试 但我们,每写完一个模块的时候, 我们就应该对该模块就行单元测试 , 接下来我们对数据库进行单元测试 单元测试是在想要测试的类中点击Generate , 会出现一个Test ,点击Test 这个Test(安装Junit的插件-这里就不介绍了) , 然后选择你想要测试的方法,点击OK 会在Test包中生成对应的类 , 在这个类中加上SpringBootTest 注解 ,就可以正常使用了 测试代码如下 package com.example.demo.mqServer.dataCenter;import com.example.demo.MqApplication; import com.example.demo.mqServer.core.Binding; import com.example.demo.mqServer.core.Exchange; import com.example.demo.mqServer.core.ExchangeType; import com.example.demo.mqServer.core.MSGQueue; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.SpringApplication; import org.springframework.boot.test.context.SpringBootTest;import java.util.List;import static org.junit.jupiter.api.Assertions.*; SpringBootTest class DataBaseManagerTest {private DataBaseManager dataBaseManager new DataBaseManager();// 接下来下面这里需要编写多个 方法 . 每个方法都是一个/一组单元测试用例.// 还需要做一个准备工作. 需要写两个方法, 分别用于进行 准备工作 和 收尾工作// 使用这个方法, 来执行准备工作. 每个用例执行前, 都要调用这个方法.BeforeEachpublic void setUp() {// 由于在 init 中, 需要通过 context 对象拿到 metaMapper 实例的.// 所以就需要先把 context 对象给搞出来.MqApplication.context SpringApplication.run(MqApplication.class);dataBaseManager.init();}// 使用这个方法, 来执行收尾工作. 每个用例执行后, 都要调用这个方法.AfterEachpublic void tearDown() {// 这里要进行的操作, 就是把数据库给清空~~ (把数据库文件, meta.db 直接删了就行了)// 注意, 此处不能直接就删除, 而需要先关闭上述 context 对象!!// 此处的 context 对象, 持有了 MetaMapper 的实例, MetaMapper 实例又打开了 meta.db 数据库文件.// 如果 meta.db 被别人打开了, 此时的删除文件操作是不会成功的 (Windows 系统的限制, Linux 则没这个问题).// 另一方面, 获取 context 操作, 会占用 8080 端口. 此处的 close 也是释放 8080.MqApplication.context.close();dataBaseManager.deleteDB();}Testpublic void testInitTable() {// 由于 init 方法, 已经在上面 setUp 中调用过了. 直接在测试用例代码中, 检查当前的数据库状态即可.// 直接从数据库中查询. 看数据是否符合预期.// 查交换机表, 里面应该有一个数据(匿名的 exchange); 查队列表, 没有数据; 查绑定表, 没有数据.ListExchange exchangeList dataBaseManager.selectAllExchanges();ListMSGQueue queueList dataBaseManager.selectAllQueues();ListBinding bindingList dataBaseManager.selectAllBindings();// 直接打印结果, 通过肉眼来检查结果, 固然也可以. 但是不优雅, 不方便.// 更好的办法是使用断言.// System.out.println(exchangeList.size());// assertEquals 判定结果是不是相等.// 注意这俩参数的顺序. 虽然比较相等, 谁在前谁在后, 无所谓.// 但是 assertEquals 的形参, 第一个形参叫做 expected (预期的), 第二个形参叫做 actual (实际的)Assertions.assertEquals(1, exchangeList.size());Assertions.assertEquals(, exchangeList.get(0).getName());Assertions.assertEquals(ExchangeType.direct, exchangeList.get(0).getType());Assertions.assertEquals(0, queueList.size());Assertions.assertEquals(0, bindingList.size());}private Exchange createExchange(String name){Exchange exchange new Exchange();exchange.setName(name);exchange.setAutoDelete(false);exchange.setDurable(true);exchange.setType(ExchangeType.fanout);exchange.setArguments(aaa,1);exchange.setArguments(bbb,2);return exchange;}Testpublic void insertExchange() {Exchange exchange createExchange(testExchange);dataBaseManager.insertExchange(exchange);// 插入完毕之后, 查询结果ListExchange exchangeList dataBaseManager.selectAllExchanges();Assertions.assertEquals(2, exchangeList.size());Exchange newExchange exchangeList.get(1);Assertions.assertEquals(testExchange, newExchange.getName());Assertions.assertEquals(ExchangeType.fanout, newExchange.getType());Assertions.assertEquals(false, newExchange.isAutoDelete());Assertions.assertEquals(true, newExchange.isDurable());Assertions.assertEquals(1, newExchange.getArguments(aaa));Assertions.assertEquals(2, newExchange.getArguments(bbb));System.out.println(insertExchange测试成功);}Testpublic void testDeleteExchange() {// 先构造一个交换机, 插入数据库; 然后再按照名字删除即可!Exchange exchange createExchange(testExchange);dataBaseManager.insertExchange(exchange);ListExchange exchangeList dataBaseManager.selectAllExchanges();Assertions.assertEquals(2, exchangeList.size());Assertions.assertEquals(testExchange, exchangeList.get(1).getName());// 进行删除操作dataBaseManager.deleteExchange(testExchange);// 再次查询exchangeList dataBaseManager.selectAllExchanges();Assertions.assertEquals(1, exchangeList.size());Assertions.assertEquals(, exchangeList.get(0).getName());System.out.println(testDeleteExchange测试成功);}private MSGQueue createTestQueue(String queueName) {MSGQueue queue new MSGQueue();queue.setName(queueName);queue.setDurable(true);queue.setAutoDelete(false);queue.setExclusive(false);queue.setArguments(aaa, 1);queue.setArguments(bbb, 2);return queue;}Testpublic void testInsertQueue() {MSGQueue queue createTestQueue(testQueue);dataBaseManager.insertQueue(queue);ListMSGQueue queueList dataBaseManager.selectAllQueues();Assertions.assertEquals(1, queueList.size());MSGQueue newQueue queueList.get(0);Assertions.assertEquals(testQueue, newQueue.getName());Assertions.assertEquals(true, newQueue.isDurable());Assertions.assertEquals(false, newQueue.isAutoDelete());Assertions.assertEquals(false, newQueue.isExclusive());Assertions.assertEquals(1, newQueue.getArguments(aaa));Assertions.assertEquals(2, newQueue.getArguments(bbb));System.out.println(testInsertQueue测试成功);}Testpublic void testDeleteQueue() {MSGQueue queue createTestQueue(testQueue);dataBaseManager.insertQueue(queue);ListMSGQueue queueList dataBaseManager.selectAllQueues();Assertions.assertEquals(1, queueList.size());// 进行删除dataBaseManager.deleteQueue(testQueue);queueList dataBaseManager.selectAllQueues();Assertions.assertEquals(0, queueList.size());System.out.println(testDeleteQueue测试成功);}private Binding createTestBinding(String exchangeName, String queueName) {Binding binding new Binding();binding.setExchangeName(exchangeName);binding.setMsgQueueName(queueName);binding.setBindingKey(testBindingKey);return binding;}Testpublic void testInsertBinding() {Binding binding createTestBinding(testExchange, testQueue);dataBaseManager.insertBinding(binding);ListBinding bindingList dataBaseManager.selectAllBindings();Assertions.assertEquals(1, bindingList.size());Assertions.assertEquals(testExchange, bindingList.get(0).getExchangeName());Assertions.assertEquals(testQueue, bindingList.get(0).getMsgQueueName());Assertions.assertEquals(testBindingKey, bindingList.get(0).getBindingKey());System.out.println(testInsertBinding测试成功);}Testpublic void testDeleteBinding() {Binding binding createTestBinding(testExchange, testQueue);dataBaseManager.insertBinding(binding);ListBinding bindingList dataBaseManager.selectAllBindings();Assertions.assertEquals(1, bindingList.size());// 删除Binding toDeleteBinding createTestBinding(testExchange, testQueue);dataBaseManager.deleteBinding(toDeleteBinding);bindingList dataBaseManager.selectAllBindings();Assertions.assertEquals(0, bindingList.size());System.out.println(testDeleteBinding测试成功);} }
http://www.w-s-a.com/news/205439/

相关文章:

  • 个股期权系统网站开发小清新wordpress模板
  • 全中文网站开发建筑公司企业愿景文案
  • 广州网站建设正规公司建设银行信用卡中心网站
  • 哪个网站是专门做封面素材怎么制作app平台
  • 网站开发 平均工资商标注册在哪个部门申请
  • 做外贸需要自己的网站吗营销型网站建设市场分析
  • 绍兴网站制作推广wordpress 无法自动升级
  • 阿里云建站数据库用什么app制作开发费用多少
  • 中国住房和城乡建设部网站资质查询中小开网站
  • 交易所网站开发水果营销软文
  • 石家庄有什么好玩的地方2017织梦网站怎么做seo
  • wordpress项目插件seo的含义
  • 网站平台建设的作用电影宣传类网页界面设计
  • 户外网站模板国外优秀的平面设计网站
  • 家政网站怎么做网站机房建设方案
  • 学校网站建设运行情况2022年近期舆情热点话题
  • 做淘宝需要知道什么网站吗有没有做软件的网站
  • 安丘网站建设制作做网站和微信小程序
  • 京东网站的建设与发展前景黑龙江建设网官网登陆
  • soho的网站怎么做微网站平台建设方案
  • 网站开发下载阿里云oss做视频网站
  • 东莞营销网站制作做一个网站建设
  • 啥网站都能看的浏览器下载网站后台管理系统展望
  • 新建站点步骤汉中 wordpress联盟
  • 坪山网站设计的公司网站 seo 设置
  • 济南网站设计公司排名如何免费注册网站域名
  • 网站开发分工甜妹妹福利wordpress
  • 网站中英文要怎么做网站建设的策划文案
  • 合肥推广外包公司佛山seo
  • 成都网站品牌设计策划课堂网站开发