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

借用连接2-得到主库或从库池子连接

二、借用连接--AbstractRoutingDataSource类
目的:基于look up data,然后从目标数据源借用连接  注look up key确定走主 or 从数据库连接池代码开发:
1.定义子类继承AbstractRoutingDataSource,并覆写determineCurrentLookupKey方法,方法引入ThreadLocalUtils.get()后,就可得到当前请求走master or slave
2.DataSource dataSource = this.resolvedDataSources.get(master or slave);----targetDataSources-->类中的set方法给其赋值,入参是map-->开发方法myRoutingDataSource+@QualifiertargetDataSources结果是{"master"=masterDataSource,"slave"=slaveDataSource}

从第三步开始
3.连接和数据源引入SqlSessionFactoryBean类+SqlSessionFactory类-->得到连接数据库连接,MybatisSqlSession类
4.@MapperScan让UserMapper先随项目启动+UserService服务层代码开发+controller层代码开发
5.启动项目(前提是先启动redis和数据库)+jmeter测试接口
源码类:
@Qualifier   标记在属性或者方法入参上,导入对象
@MapperScan  标记在项目的启动类上,变量value+basePackages都是写mapper文件的包路径

注:

导入对象的注解一共有三个:

@Autowired 导入已经用过的spring中的某类
@Resource 导入spring中的某类(根类)
@Qualifier   导入已经用过的spring中的某类,标记在属性或者方法入参上

一、和数据源链接绑定

1、导入数据源链接的这个类,并导入它的父类datasource,因为需要和数据源绑定,所以导入数据

2、连接和数据源绑定

a、引入SqlSessionFactoryBean类,这个类是操作数据库的session链接,因为源码中无构造方法,所以对这个类进行示例化,得到SqlSessionFactoryBean的对象;

b、这个源码类的方法有setdatasource方法,传入myRoutingDataSource(数据源对象,这个主从池子对象),进行事务管理,数据源和SqlSessionFactory进行匹配,连接和数据源绑定

c、使用getObject()方法,这个方法是会创建一个数据源链接,这个链接的名字是sql session

导入数据后还会报错,因为main方法是有static不能直接使用,

所以封装方法,将代码写入,就不会报错了

getobject方法,返回值是sqlsessionfactory是真正的sql session连接

二、随项目启动

1、随项目启动

因myRoutingDataSource这个类就是创建目标源并随着项目启动

所以该步骤也需要增加项目启动注释

@Configuration + @Bean

三、操作服务层代码

1、user service操作数据库 2、user service调用usermappe

3、如果要调用user mapper的方法,设置的mapper方法是一个接口类,调用接口里的方法,弄个子类对这里的方法实现,让mapper文件随着项目初始化

在启动项目类上增加@MapperScan(value = "com.youceedu.tools.ycspring.mapper")

@MapperScan让UserMapper先随项目启动+UserService服务层代码开发+controller层代码开发

a、在启动类上增加@MapperScan让UserMapper先随项目启动

b、UserService服务层代码开发

在UserService代码里导入usermapper对象

在login方法里增加​调用mapper的login方法(如下),并得到返回结果

mapper里的方法登录返回的是int类型,所以设置count,初始化为0/1

在service类中getinfo方法中,调用mapper的getinfo,并得到返回结果

因为mapper里的方法返回的是user类,所以返回值方法值和返回值也设置为user

以及需要做判断

如果login的count等于1就返回数据,如果不是就返回false;

如果user里面的内容为空就是null,如果user为空就返回user结果

这里的关联错误是什么?

是controller里之前临时写了返回值data

controller层代码开发

原本login接口

 把临时的给去掉即可

原本的getinfo因为controller已经做了判断,所以这里的判断就删掉

所以controller代码需要将之前临时的data更换为user这个类

总结

controller调service,service调mapper,mapper操作数据库

 

启动项目

 启动项目(前期启动redis和数据库)

jmeter测试

先在从库里增加user存入数据-密码账号(因为登录+获取数据是存量的从库)

然后在jmeter中进行登录/获取用户信息查询

进行接口请求

因为传入data是1,所以getinfo是id=1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 跟李沐学AI:自注意力和位置编码
  • 典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
  • 如何实现全行业证照一站式结构化识别?Textln企业资质证照识别上线!
  • kafka 消费者线程安全问题详细探讨
  • 中台架构下的数据仓库与非结构化数据整合
  • 详解前驱图与PV操作
  • R语言中的shiny框架
  • 《AI设计类工具系列之一——FigJam AI》
  • 邀请功能的实现分析
  • 初识C语言(三)
  • 嵌入式开发中学习C++的用处?
  • 拼图缺口形状检测系统源码分享
  • 解锁电商新视界:京东商品详情API——您的深度商品信息探索利器
  • Javax Validation 自定义注解校验(身份证号校验)
  • 线程池的执行流程和配置参数总结
  • [iOS]Core Data浅析一 -- 启用Core Data
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【剑指offer】让抽象问题具体化
  • Docker下部署自己的LNMP工作环境
  • eclipse的离线汉化
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java,console输出实时的转向GUI textbox
  • JavaScript设计模式之工厂模式
  • LeetCode算法系列_0891_子序列宽度之和
  • Linux下的乱码问题
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PHP的类修饰符与访问修饰符
  • Vue.js源码(2):初探List Rendering
  • Webpack 4x 之路 ( 四 )
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 不上全站https的网站你们就等着被恶心死吧
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 模型微调
  • 如何使用 JavaScript 解析 URL
  • 入门到放弃node系列之Hello Word篇
  • - 转 Ext2.0 form使用实例
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​​​​​​​​​​​​​​Γ函数
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #Linux(Source Insight安装及工程建立)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (javaweb)Http协议
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (自用)网络编程
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(六):替换字符串中匹配的子串
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Core 中的路径问题
  • .net framework profiles /.net framework 配置