二、借用连接--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