<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Mybatis配置多數(shù)據(jù)源

          共 5694字,需瀏覽 12分鐘

           ·

          2021-08-19 13:27

          在項(xiàng)目中經(jīng)常會(huì)存在操作不同數(shù)據(jù)庫(kù)得情況,最為典型就是后管系統(tǒng),如果不走接口進(jìn)行調(diào)用,那么勢(shì)必會(huì)有多個(gè)數(shù)據(jù)源作為數(shù)據(jù)管理的得突破口。在此我們可以想一下到底是微服務(wù)接口暴露模式的后管好還是基于多數(shù)據(jù)源的模式好?雖然都是管理數(shù)據(jù),而且效果都差不多。但是接口模式的管理對(duì)開(kāi)發(fā)不太友好。所以這塊我們稍微學(xué)習(xí)一下mybatis的多數(shù)據(jù)配置,我們想要的結(jié)果是項(xiàng)目兼容任意多個(gè)數(shù)據(jù)庫(kù),這里我們用mysql做為研究對(duì)象。至于其他的數(shù)據(jù)庫(kù)也是一樣的。
          在之前我們學(xué)習(xí)mybatis的時(shí)候說(shuō)mybatis是java的orm框架,然后這個(gè)orm框架要和spring進(jìn)行整合,需要mybatis-spring這樣一個(gè)橋的東西。當(dāng)然在springboot中提供了基于自動(dòng)配置的mybatis,這塊我們學(xué)的是原生的.
          首先我們導(dǎo)入相關(guān)的maven依賴(lài)
          <!--        數(shù)據(jù)庫(kù)-->        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.26</version>        </dependency>
          <!-- orm--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>
          <!-- orm spring--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency>
          <!-- 數(shù)據(jù)源--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.9</version> </dependency>
          數(shù)據(jù)源這塊采用druid,這塊為了實(shí)踐,我們采用MapperFactoryBean和MapperScannerConfigurer兩種方式進(jìn)行探討。代碼如下:
          @Configurationpublic class MybatisConfig {
          public DruidDataSource getDruidDataSource(String url,String userName,String password) throws SQLException { DruidDataSource ds = new DruidDataSource(); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); try { ds.setFilters("stat,mergeStat,slf4j"); } catch (Exception var18) { } ds.setMaxActive(50); ds.setInitialSize(1); ds.setMinIdle(1); ds.setMaxWait(60000); ds.setTimeBetweenEvictionRunsMillis(120000); ds.setMinEvictableIdleTimeMillis(300000); ds.setValidationQuery("SELECT 'x'"); ds.setPoolPreparedStatements(true); ds.setMaxPoolPreparedStatementPerConnectionSize(30); ds.setTestWhileIdle(true); ds.setTestOnReturn(false); ds.setTestOnBorrow(false); ds.init(); return ds; }
          @Bean(name = "dataO") public SqlSessionFactoryBean getSqlSessionFactoryOne1() throws Exception { //xml和實(shí)體的映射 SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(getDruidDataSource("jdbc:mysql://127.0.0.1:3306/tianjl?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true","root","tianjingle")); sqlSessionFactoryBean.setTypeAliasesPackage("com.example.demo.one"); Resource[] resources = new Resource[]{new ClassPathResource("tian/one/OneMapper.xml")}; sqlSessionFactoryBean.setMapperLocations(resources); return sqlSessionFactoryBean; }
          @Bean(name = "dataTwo") public MapperFactoryBean getSqlSessionFactoryTwo() throws Exception { //xml和實(shí)體的映射 SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(getDruidDataSource("jdbc:mysql://127.0.0.1:3306/tianjl?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true","root","tianjingle")); sqlSessionFactoryBean.setTypeAliasesPackage("com.example.demo.two"); sqlSessionFactoryBean.setMapperLocations(new ClassPathResource("tian/two/TwoMapper.xml")); //單個(gè)數(shù)據(jù)源所有的數(shù)據(jù)庫(kù)映射 MapperFactoryBean mapperFactoryBean=new MapperFactoryBean(); //設(shè)置sqlSessionTemplate,zhuru yong de mapperFactoryBean.setMapperInterface(TwoMapper.class); mapperFactoryBean.setSqlSessionFactory(sqlSessionFactoryBean.getObject()); return mapperFactoryBean; }
          @Bean @ConditionalOnBean(name = "dataO") public static MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage("com.example.demo.one.mapper");//這塊指定掃描的接口 mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataO"); return mapperScannerConfigurer; }}
          在完成上述方法之后,我們編寫(xiě)測(cè)試方法
              @Resource    private OneMapper oneMapper;

          @Resource private TwoMapper twoMapper;

          @GetMapping(value = "/one") public BaikeResponse one(){ BaikeResponse baikeResponse=new BaikeResponse(); baikeResponse.setData(oneMapper.one()); return baikeResponse; }
          @GetMapping(value = "/two") public BaikeResponse two(){ BaikeResponse baikeResponse=new BaikeResponse(); baikeResponse.setData(twoMapper.two()); return baikeResponse;}
          小結(jié):這塊我們采用比較原始的方式配置了了兩種多數(shù)據(jù)源的實(shí)現(xiàn),這塊我們也可以對(duì)此進(jìn)行擴(kuò)展,封裝成讓習(xí)慣了使用starter的同學(xué)摸不著頭腦的形式。好了,本次demo就演示到這里了。
          晚安~




          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产手机精品视频 | 国产女人在线 | 日日夜夜拍拍 | 国产日皮视频免费观看 | 日逼视频免费观看 |