1. 程式人生 > 其它 >mybatis多資料來源配置_springboot+mybatis多資料來源配置(附原始碼,page helper分頁配置)...

mybatis多資料來源配置_springboot+mybatis多資料來源配置(附原始碼,page helper分頁配置)...

技術標籤:mybatis多資料來源配置pagehelper分頁原理springboot mybatis配置springboot配置mybatis

測試的工作很大一部分時間都會花費在造測試資料上,尤其對於分散式系統。這種系統一般都是很多小組維護各自的模組,作為下游系統,如果要驗證一些業務流程,資料必須來自上游系統的真實資料,所以我們維護了一個幫助測試同事造數的平臺,這其中就涉及到 “多資料來源的配置”

mybatis工作原理

1. 建立SqlSessionFactoryBuilder物件,呼叫build(inputstream)方法讀取並解析配置檔案,返回SqlSessionFactory物件

2. 由SqlSessionFactory建立SqlSession 物件

3. 呼叫SqlSession中的api,傳入Statement Id和引數,最後呼叫jdbc執行SQL語句,封裝結果返回

例項

先配置兩個庫 teacher 、student

student.jdbc.url=jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNulljdbc.student.name=rootjdbc.student.password=root        teacher.jdbc.url=jdbc:mysql://127.0.0.1:3306/teacher?serverTimezone=UTC&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNulljdbc.teacher.name=rootjdbc.teacher.password=root

這裡以student的Mybatis配置為例,

這裡需要注意多資料來源的配置需要指定的 主資料來源的,需要新增

@Primary,如果不配置主資料來源,啟動會報錯

@[email protected](basePackages = {"com.zl.demo.mapper.student"}, sqlSessionFactoryRef = "studentSqlSessionFactory")public class StudentMybatisConfig {    @Autowired    private AppConfigBean appConfigBean;    @Bean(name = "studentDataSource")    DataSource mockDataSource() throws SQLException {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setUrl(appConfigBean.getStudentJdbcUrl());        dataSource.setDriverClassName(appConfigBean.getJdbcDriverClassName());        dataSource.setUsername(appConfigBean.getJdbcStudentName());        dataSource.setPassword(appConfigBean.getJdbcStudentPassword());        dataSource.setFilters("stat");        List initSqls = new ArrayList<>();        initSqls.add("set names utf8mb4");        dataSource.setConnectionInitSqls(initSqls);        dataSource.setMaxActive(appConfigBean.getJdbcMaxActive());        dataSource.setInitialSize(appConfigBean.getJdbcInitialSize());        return dataSource;    }    @Bean(name = "studentSqlSessionFactory")    @Primary    public SqlSessionFactory studentSqlSessionFactory() throws SQLException {        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();        factoryBean.setDataSource(mockDataSource());        factoryBean.setTypeAliasesPackage("com.zl.deml.entity.student");        // 分頁外掛        PageHelper pageHelper = new PageHelper();        Properties properties = new Properties();        properties.setProperty("reasonable", "false");        //properties.setProperty("supportMethodsArguments", "true");        properties.setProperty("returnPageInfo", "check");        properties.setProperty("params", "pageNum=start;count=countSql");        pageHelper.setProperties(properties);        // 新增外掛        factoryBean.setPlugins(new Interceptor[]{pageHelper});        // 新增XML目錄        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {            factoryBean                    .setMapperLocations(resolver.getResources("classpath*:/mybatis/student/*.xml"));            return factoryBean.getObject();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }    @Bean(name = "studentTransactionManager")    public DataSourceTransactionManager studentTransactionManager() {        try {            return new DataSourceTransactionManager(mockDataSource());        } catch (SQLException e) {            throw new RuntimeException(e);        }    }}

其中有一段是對pageHelper 分頁的配置,不需要的話可以刪除

測試資料

多資料來源整合測試資料

bf1ca0d3101745eeaa8b843a084b7718.png

分頁的測資料

8ba47fdf4520371b765ac9b460c2185a.png

例項程式碼已上傳github

https://github.com/627886474/mybatis-multidata

如果對你有幫助的話

歡迎微信搜尋:可樂的測試之路

267004ff9ed7bfb6f387c484d12adde8.png