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

企业端app下载宁波优化推广找哪家

企业端app下载,宁波优化推广找哪家,运营外包,百度百家官网入口目录 一、数据库设计 1.1、数据库选择 1.2、环境配置 1.3、建库建表接口实现 1.4、封装数据库操作 1.5、针对 DataBaseManager 进行单元测试 一、数据库设计 1.1、数据库选择 MySQL 是我们最熟悉的数据库#xff0c;但是这里我们选择使用 SQLite#xff0c;原因如下但是这里我们选择使用 SQLite原因如下 SQLite 比 MySQL 更轻量一个完整的 SQLite 数据库只有一个单独的可执行文件不到 1M.SQLite 操作简便SQLite 只是一个本地数据库相当于是直接操作本地的硬盘.SQLite 应用也非常广泛在一些性能不高的设备上SQLite 是数据库的首选尤其是移动端和嵌入式设备Android 系统就是内置的 SQLite. 1.2、环境配置 在 java 中直接使用 maven 把 SQLite 依赖引入即可版本自行考虑~ !-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc --dependencygroupIdorg.xerial/groupIdartifactIdsqlite-jdbc/artifactIdversion3.41.2.1/version/dependency配置如下 spring:datasource:url: jdbc:sqlite:./data/meta.dbusername:password:driver-class-name: org.sqlite.JDBCurlSQLite 的工作路径用来存储数据在某个指定的文件中. username password对于 SQLite 来说不需要使用 用户名密码.  MySQL 是一个客户端服务器结构的程序而 SQLite 则不是客户端服务器结构的程序只有本地主机能访问. PsSQLite 虽然和 MySQL 不太一样但是都可以通过 MyBatis 这样的框架来使用. 1.3、建库建表接口实现 存储的数据就是交换机、队列、绑定. 这里我们使用 MyBatis 来完成相关的 CRUD. mapper 接口中提供三个建库建表操作和针对这三个库表进行 CRUD 的操作. Mapper public interface MetaMapper {//三个核心建表方法void createExchangeTable();void createQueueTable();void createBindingTable();//基于上述三个表进行 插入、删除、查询 操作void insertExchange(Exchange exchange);ListExchange selectAllExchange();void deleteExchange(String exchangeName);void insertQueue(MSGQueue queue);ListMSGQueue selectAllQueue();void deleteQueue(String queueName);void insertBinding(Binding binding);ListBinding selectAllBinding();void deleteBinding(Binding binding);}对应的实现如下 update idcreateExchangeTablecreate table if not exists exchange (name varchar(50) primary key,type int,durable boolean,autoDelete boolean,arguments varchar(1024));/updateupdate idcreateQueueTablecreate table if not exists queue (name varchar(50) primary key,durable boolean,exclusive boolean,autoDelete boolean,arguments varchar(1024));/updateupdate idcreateBindingTablecreate table if not exists binding (exchangeName varchar(50),queueName varchar(50),bindingKey varchar(256))/updateinsert idinsertExchange parameterTypecom.example.rabbitmqproject.mqserver.core.Exchangeinsert into exchange values (#{name}, #{type}, #{durable}, #{autoDelete}, #{arguments});/insertselect idselectAllExchange resultTypecom.example.rabbitmqproject.mqserver.core.Exchangeselect * from exchange;/selectdelete iddeleteExchange parameterTypecom.example.rabbitmqproject.mqserver.core.Exchangedelete from exchange where name #{name};/deleteinsert idinsertQueue parameterTypecom.example.rabbitmqproject.mqserver.core.MSGQueueinsert into queue values(#{name}, #{durable}, #{exclusive}, #{autoDelete}, #{arguments});/insertselect idselectAllQueue resultTypecom.example.rabbitmqproject.mqserver.core.MSGQueueselect * from queue;/selectdelete iddeleteQueuedelete from queue where name #{name};/deleteinsert idinsertBindinginsert into binding values (#{exchangeName}, #{queueName}, #{bindingKey});/insertselect idselectAllBinding resultTypecom.example.rabbitmqproject.mqserver.core.Bindingselect * from binding;/selectdelete iddeleteBindingdelete from binding where exchangeName #{exchangeName} and queueName #{queueName};/delete1.4、封装数据库操作 这里我们通过定制化 代码 的方式来自动完成建库建表的操作符合 RabbitMQ 中间件的设定. 创建 DataBaseManager 类来完成数据库相关的操作注意细节如下 初始化方法一般谈到初始化都会用到 构造方法但是这里我们使用一个 普通的方法 —— init()构造方法一般是用来初始化类的属性不会涉及到太多的业务逻辑而此处的初始化带有业务逻辑还是单独领出来手动来调用比较合适.建库建表逻辑这里期望broker server 启动的时候做出如下逻辑判断 如果数据库已经存在表存在不做任何操作.如果数据库不存在则建库建表构造默认数据. Ps怎么判定数据库存在或者不存在?就判定 meta.db 文件是否存在即可配置文件中的 url. public class DataBaseManager {//这里不使用 Autowired 注解获取因为当前这个类需要我们后面手动管理private MetaMapper metaMapper;//针对数据库进行初始化public void init() {//手动获取到 MetaMappermetaMapper RabbitmqProjectApplication.context.getBean(MetaMapper.class);if(!checkDBExists()) {//数据库不存在就进行建库建表操作//先创建出目录结构(否则会报错找不到目录结构)File dataDir new File(./data);dataDir.mkdirs();//创建数据库createTable();//插入默认数据createDefaultData();System.out.println([DataBaseManager] 数据库初始化完成!);} else {//数据库存在什么都不做即可System.out.println([DataBaseManager] 数据库已存在!);}}private boolean checkDBExists() {File file new File(./data/meta.db);return file.exists();}private void createTable() {metaMapper.createExchangeTable();metaMapper.createQueueTable();metaMapper.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);metaMapper.insertExchange(exchange);System.out.println([DataBaseManager] 创建初始数据完成);}//把数据库中其他操作也在这里封装一下public void insertExchange(Exchange exchange) {metaMapper.insertExchange(exchange);}public ListExchange selectAllExchange() {return metaMapper.selectAllExchange();}public void deleteExchange(String exchangeName) {metaMapper.deleteExchange(exchangeName);}public void insertQueue(MSGQueue queue) {metaMapper.insertQueue(queue);}public ListMSGQueue selectAllQueue() {return metaMapper.selectAllQueue();}public void deleteQueue(String queueName) {metaMapper.deleteQueue(queueName);}public void insertBinding(Binding binding) {metaMapper.insertBinding(binding);}public ListBinding selectAllBinding() {return metaMapper.selectAllBinding();}public void deleteBinding(Binding binding) {metaMapper.deleteBinding(binding);}public void deleteDB() {//删除文件File file new File(./data/meta.db);boolean res file.delete();if(res) {System.out.println([DataBaseManager] 数据库文件删除完毕!);} else {System.out.println([DataBaseManager] 数据库文件删除失败!);}//删除目录File dataDir new File(./data);boolean ret dataDir.delete();if(ret) {System.out.println([DataBaseManager] 数据库目录删除完成!);} else {System.out.println([DataBaseManager] 数据库目录删除失败!);}}}1.5、针对 DataBaseManager 进行单元测试 设计单元测试这里的要求就是单元测试用例和用例之间是需要相互独立的不会干扰例如以下情况 测试过程中向数据库中插入数据 a . 在针对 b 进行测试可能 a 这里的数据会对 b 造成干扰. Ps这里不一定是数据库也可能是其他方面例如是否搞了一个文件是否占用了端口... SpringBootTest public class DataBaseManagerTests {private DataBaseManager dataBaseManager new DataBaseManager();BeforeEachpublic void setUp() {RabbitmqProjectApplication.context SpringApplication.run(RabbitmqProjectApplication.class);dataBaseManager.init();}AfterEachpublic void setclose() {//此处不能直接删除 数据库文件 需要先关闭 context 对象//此处 context 对象持有了 MetaMapper 的实例 MetaMapper 又打开了 meta.db 数据库//如果 meta.db 被别人打开了此时删除文件是不会成功的(Windows 系统限制, Linux 则不会)//另一方面 context 会占用 8080 端口此处的 close 也是释放 8080 端口RabbitmqProjectApplication.context.close();dataBaseManager.deleteDB();}Testpublic void testInitTable() {ListExchange exchanges dataBaseManager.selectAllExchange();ListMSGQueue msgQueues dataBaseManager.selectAllQueue();ListBinding bindings dataBaseManager.selectAllBinding();Assertions.assertEquals(1, exchanges.size());Assertions.assertEquals(, exchanges.get(0).getName());Assertions.assertEquals(ExchangeType.DIRECT, exchanges.get(0).getType());Assertions.assertEquals(0, msgQueues.size());Assertions.assertEquals(0, bindings.size());}private Exchange createTestExchange(String exchangeName) {Exchange exchange new Exchange();exchange.setName(exchangeName);exchange.setType(ExchangeType.FANOUT);exchange.setDurable(true);exchange.setAutoDelete(false);exchange.setArguments(aaa, 1);exchange.setArguments(bbb, 2);return exchange;}Testpublic void insertExhangeTest() {Exchange exchange createTestExchange(testExchange);dataBaseManager.insertExchange(exchange);ListExchange exchanges dataBaseManager.selectAllExchange();Assertions.assertEquals(2, exchanges.size());Exchange testExchange exchanges.get(1);Assertions.assertEquals(testExchange, testExchange.getName());Assertions.assertEquals(ExchangeType.FANOUT, testExchange.getType());Assertions.assertEquals(true, testExchange.isDurable());Assertions.assertEquals(false, testExchange.isAutoDelete());Assertions.assertEquals(1, testExchange.getArguments(aaa));Assertions.assertEquals(2, testExchange.getArguments(bbb));}Testpublic void deleteExchangeTest() {Exchange exchange createTestExchange(testExchange);dataBaseManager.insertExchange(exchange);ListExchange exchanges dataBaseManager.selectAllExchange();Assertions.assertEquals(2, exchanges.size());Assertions.assertEquals(testExchange, exchanges.get(1).getName());//删除dataBaseManager.deleteExchange(testExchange);exchanges dataBaseManager.selectAllExchange();Assertions.assertEquals(1, exchanges.size());}private MSGQueue createTestQueue(String queueName) {MSGQueue queue new MSGQueue();queue.setName(queueName);queue.setDurable(true);queue.setExclusive(false);queue.setAutoDelete(false);queue.setArguments(aaa, 1);queue.setArguments(bbb, 2);return queue;}Testpublic void testInsertQueue() {MSGQueue queue createTestQueue(testQueue);dataBaseManager.insertQueue(queue);ListMSGQueue queues dataBaseManager.selectAllQueue();Assertions.assertEquals(1, queues.size());MSGQueue msgQueue queues.get(0);Assertions.assertEquals(testQueue, msgQueue.getName());Assertions.assertEquals(true, msgQueue.isDurable());Assertions.assertEquals(false, msgQueue.isExclusive());Assertions.assertEquals(false, msgQueue.isAutoDelete());Assertions.assertEquals(1, msgQueue.getArguments(aaa));Assertions.assertEquals(2, msgQueue.getArguments(bbb));}Testpublic void testDeleteQueue() {MSGQueue queue createTestQueue(testQueue);dataBaseManager.insertQueue(queue);ListMSGQueue queues dataBaseManager.selectAllQueue();Assertions.assertEquals(1, queues.size());//删除dataBaseManager.deleteQueue(testQueue);queues dataBaseManager.selectAllQueue();Assertions.assertEquals(0, queues.size());}private Binding createTestBinding(String exchangeName, String queueName) {Binding binding new Binding();binding.setExchangeName(exchangeName);binding.setQueueName(queueName);binding.setBindingKey(testBindingKey);return binding;}Testpublic void testInsertAndDeleteBinding() {Binding binding createTestBinding(testExchange, testQueue);dataBaseManager.insertBinding(binding);ListBinding bindingList dataBaseManager.selectAllBinding();Assertions.assertEquals(1, bindingList.size());binding bindingList.get(0);Assertions.assertEquals(testExchange, binding.getExchangeName());Assertions.assertEquals(testQueue, binding.getQueueName());Assertions.assertEquals(testBindingKey, binding.getBindingKey());//删除dataBaseManager.deleteBinding(binding);bindingList dataBaseManager.selectAllBinding();Assertions.assertEquals(0, bindingList.size());}}当然我只是做了简单的设计测试用例实际上站在更严谨的角度还需要设计更丰富的测试用例~ 相比于 功能/业务代码测试用例代码编写起来虽然比较无聊但是重要性是非常大的这些操作会大大提高整个项目的开发效率. Ps单元测试本来就是开发要搞的活写代码不可能没有 bug进行周密的测试是应对 bug 最有效的手段.
文章转载自:
http://www.morning.ndxmn.cn.gov.cn.ndxmn.cn
http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn
http://www.morning.hrqfl.cn.gov.cn.hrqfl.cn
http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn
http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn
http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn
http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn
http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn
http://www.morning.mlnby.cn.gov.cn.mlnby.cn
http://www.morning.nwczt.cn.gov.cn.nwczt.cn
http://www.morning.grxsc.cn.gov.cn.grxsc.cn
http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn
http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn
http://www.morning.rpfpx.cn.gov.cn.rpfpx.cn
http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn
http://www.morning.pghry.cn.gov.cn.pghry.cn
http://www.morning.mlfgx.cn.gov.cn.mlfgx.cn
http://www.morning.fkdts.cn.gov.cn.fkdts.cn
http://www.morning.youprogrammer.cn.gov.cn.youprogrammer.cn
http://www.morning.znmwb.cn.gov.cn.znmwb.cn
http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn
http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn
http://www.morning.prznc.cn.gov.cn.prznc.cn
http://www.morning.jzykw.cn.gov.cn.jzykw.cn
http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com
http://www.morning.cprls.cn.gov.cn.cprls.cn
http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn
http://www.morning.clpkp.cn.gov.cn.clpkp.cn
http://www.morning.qwyms.cn.gov.cn.qwyms.cn
http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn
http://www.morning.grtwn.cn.gov.cn.grtwn.cn
http://www.morning.rxcqt.cn.gov.cn.rxcqt.cn
http://www.morning.kyfnh.cn.gov.cn.kyfnh.cn
http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn
http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn
http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn
http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn
http://www.morning.ydnxm.cn.gov.cn.ydnxm.cn
http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn
http://www.morning.cmldr.cn.gov.cn.cmldr.cn
http://www.morning.ljbch.cn.gov.cn.ljbch.cn
http://www.morning.ghzfx.cn.gov.cn.ghzfx.cn
http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn
http://www.morning.krtky.cn.gov.cn.krtky.cn
http://www.morning.bfycr.cn.gov.cn.bfycr.cn
http://www.morning.glncb.cn.gov.cn.glncb.cn
http://www.morning.xrksf.cn.gov.cn.xrksf.cn
http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn
http://www.morning.pzrrq.cn.gov.cn.pzrrq.cn
http://www.morning.xglgm.cn.gov.cn.xglgm.cn
http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn
http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn
http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn
http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn
http://www.morning.nlrp.cn.gov.cn.nlrp.cn
http://www.morning.ljsxg.cn.gov.cn.ljsxg.cn
http://www.morning.zgnng.cn.gov.cn.zgnng.cn
http://www.morning.bjndc.com.gov.cn.bjndc.com
http://www.morning.zfgh.cn.gov.cn.zfgh.cn
http://www.morning.rjljb.cn.gov.cn.rjljb.cn
http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn
http://www.morning.gthgf.cn.gov.cn.gthgf.cn
http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn
http://www.morning.xyjlh.cn.gov.cn.xyjlh.cn
http://www.morning.blfgh.cn.gov.cn.blfgh.cn
http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn
http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn
http://www.morning.btwlp.cn.gov.cn.btwlp.cn
http://www.morning.gnbfj.cn.gov.cn.gnbfj.cn
http://www.morning.llxns.cn.gov.cn.llxns.cn
http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn
http://www.morning.rynqh.cn.gov.cn.rynqh.cn
http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn
http://www.morning.drytb.cn.gov.cn.drytb.cn
http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn
http://www.morning.prgyd.cn.gov.cn.prgyd.cn
http://www.morning.wqpr.cn.gov.cn.wqpr.cn
http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn
http://www.morning.jpbpc.cn.gov.cn.jpbpc.cn
http://www.morning.qkdjq.cn.gov.cn.qkdjq.cn
http://www.tj-hxxt.cn/news/260055.html

相关文章:

  • .win域名做网站怎么样怎么做微信小程序游戏
  • 大人怎么做羞羞的网站做一个公司的门户网站多少钱
  • 成都网站设计很好做期货要关注哪些网站
  • 南京网站建设优化六安木兰巷
  • 彭阳网站建设多少钱越南语网站怎么做
  • 2021好心人给个开车的网站雅虎网站收录提交入口
  • o2o商城分销网站开发网页设计如何设置字体
  • wordpress站点迁移做ppt好的网站有哪些
  • 沧州市网站优化排名sem是什么的英文缩写
  • 申请一个网页要多少钱网站优化排名推广
  • 南海专业网站建设公司广州百度seo排名优化
  • 淘宝网站的订单管理怎么做公司做网站的费用
  • 爱站网ip反域名查询注册一个新公司的流程如下
  • 深圳市罗湖建设局网站wordpress 调用文章简介
  • 聚云测网站怎么做的江阴网站建设工作室
  • 深圳专业做网站开发费用客户管理系统排行榜
  • 后台系统免费模板网站学网站开发的软件有哪些
  • 关键词点击排名软件网站优化的关键词
  • 成都分想设计公司网站海南新闻中心
  • 建设银行河北分行网站网页设计代码设计的代码有哪些
  • 捡个校花做老婆是哪个网站的有域名如何自己制作网站
  • 网站建设优化建议wordpress 技术文档
  • 个人网站建设方案书实例中国住建厅网站官网
  • 给网站加个地图的代码wordpress实现瀑布流
  • 做网站实训报告营销网站搭建建议
  • 城阳做网站的北京网站维护公司
  • 微网站 demowordpress 反向代理
  • 帝国音乐网站怎么做数据表西安高新区网站建设
  • 浙江联科网站开发wordpress怎么播放视频
  • 设计 网站 现状中山seo排名