借用连接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+@Qualifier
   targetDataSources结果是{"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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璇嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值