真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot整合MybatisPlus配置多數(shù)據(jù)源增強插件的方法是什么

本篇內(nèi)容介紹了“SpringBoot整合MybatisPlus配置多數(shù)據(jù)源增強插件的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比定結(jié)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式定結(jié)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋定結(jié)地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

一、項目案例簡介

1、多數(shù)據(jù)簡介

實際的項目中,經(jīng)常會用到不同的數(shù)據(jù)庫以滿足項目的實際需求。隨著業(yè)務(wù)的并發(fā)量的不斷增加,一個項目使用多個數(shù)據(jù)庫:主從復(fù)制、讀寫分離、分布式數(shù)據(jù)庫等方式,越來越常見。

2、MybatisPlus簡介

MyBatis-Plus(簡稱 MP)是一個MyBatis的增強工具,在MyBatis的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。

插件特點

無代碼侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響。
強大的 CRUD 操作:通過少量配置即可實現(xiàn)單表大部分 CRUD 操作滿足各類使用需求。
支持 Lambda 形式調(diào)用:通過 Lambda 表達式,方便的編寫各類查詢條件。
支持主鍵自動生成:可自由配置,解決主鍵問題。
內(nèi)置代碼生成工具:采用代碼或者 Maven 插件可快速生成各層代碼。
內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作。
內(nèi)置性能分析插件:可輸出 Sql 語句以及其執(zhí)行時間。

二、多數(shù)據(jù)源案例

1、項目結(jié)構(gòu)

SpringBoot整合MybatisPlus配置多數(shù)據(jù)源增強插件的方法是什么

注意:mapper層和mapper.xml層分別放在不同目錄下,以便mybatis掃描加載。

2、多數(shù)據(jù)源配置

spring:
  # 數(shù)據(jù)源配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    admin-data:
      driverClassName: com.MySQL.jdbc.Driver
      dbUrl: jdbc:mysql://127.0.0.1:3306/cloud-admin-data?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
      username: root
      password: 123
      initialSize: 20
      maxActive: 100
      minIdle: 20
      maxWait: 60000
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 30
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      maxEvictableIdleTimeMillis: 60000
      validationQuery: SELECT 1 FROM DUAL
      testOnBorrow: false
      testOnReturn: false
      testWhileIdle: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      filters: stat,wall
    user-data:
      driverClassName: com.mysql.jdbc.Driver
      dbUrl: jdbc:mysql://127.0.0.1:3306/cloud-user-data?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
      username: root
      password: 123
      initialSize: 20
      maxActive: 100
      minIdle: 20
      maxWait: 60000
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 30
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      maxEvictableIdleTimeMillis: 60000
      validationQuery: SELECT 1 FROM DUAL
      testOnBorrow: false
      testOnReturn: false
      testWhileIdle: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      filters: stat,wall

這里參數(shù)的形式是多樣的,只需要配置參數(shù)掃描即可。

3、參數(shù)掃描類

@Component
@ConfigurationProperties(prefix = "spring.datasource.admin-data")
public class DruidOneParam {
    private String dbUrl;
    private String username;
    private String password;
    private String driverClassName;
    private int initialSize;
    private int maxActive;
    private int minIdle;
    private int maxWait;
    private boolean poolPreparedStatements;
    private int maxPoolPreparedStatementPerConnectionSize;
    private int timeBetweenEvictionRunsMillis;
    private int minEvictableIdleTimeMillis;
    private int maxEvictableIdleTimeMillis;
    private String validationQuery;
    private boolean testWhileIdle;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private String filters;
    private String connectionProperties;
    // 省略 GET 和 SET
}

4、配置Druid連接池

@Configuration
@MapperScan(basePackages = {"com.data.source.mapper.one"},sqlSessionTemplateRef = "sqlSessionTemplateOne")
public class DruidOneConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(DruidOneConfig.class) ;
    @Resource
    private DruidOneParam druidOneParam ;
    @Bean("dataSourceOne")
    public DataSource dataSourceOne () {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(druidOneParam.getDbUrl());
        datasource.setUsername(druidOneParam.getUsername());
        datasource.setPassword(druidOneParam.getPassword());
        datasource.setDriverClassName(druidOneParam.getDriverClassName());
        datasource.setInitialSize(druidOneParam.getInitialSize());
        datasource.setMinIdle(druidOneParam.getMinIdle());
        datasource.setMaxActive(druidOneParam.getMaxActive());
        datasource.setMaxWait(druidOneParam.getMaxWait());
        datasource.setTimeBetweenEvictionRunsMillis(druidOneParam.getTimeBetweenEvictionRunsMillis());
        datasource.setMinEvictableIdleTimeMillis(druidOneParam.getMinEvictableIdleTimeMillis());
        datasource.setMaxEvictableIdleTimeMillis(druidOneParam.getMaxEvictableIdleTimeMillis());
        datasource.setValidationQuery(druidOneParam.getValidationQuery());
        datasource.setTestWhileIdle(druidOneParam.isTestWhileIdle());
        datasource.setTestOnBorrow(druidOneParam.isTestOnBorrow());
        datasource.setTestOnReturn(druidOneParam.isTestOnReturn());
        datasource.setPoolPreparedStatements(druidOneParam.isPoolPreparedStatements());
        datasource.setMaxPoolPreparedStatementPerConnectionSize(druidOneParam.getMaxPoolPreparedStatementPerConnectionSize());
        try {
            datasource.setFilters(druidOneParam.getFilters());
        } catch (Exception e) {
            LOGGER.error("druid configuration initialization filter", e);
        }
        datasource.setConnectionProperties(druidOneParam.getConnectionProperties());
        return datasource;
    }
    @Bean
    public SqlSessionFactory sqlSessionFactoryOne() throws Exception{
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        factory.setDataSource(dataSourceOne());
        factory.setMapperLocations(resolver.getResources("classpath*:/dataOneMapper/*.xml"));
        return factory.getObject();
    }
    @Bean(name="transactionManagerOne")
    public DataSourceTransactionManager transactionManagerOne(){
        return  new DataSourceTransactionManager(dataSourceOne());
    }
    @Bean(name = "sqlSessionTemplateOne")
    public SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryOne());
    }
}

注意事項

  • MapperScan 在指定數(shù)據(jù)源上配置;

  • SqlSessionFactory 配置掃描的Mapper.xml地址 ;

  • DataSourceTransactionManager 配置該數(shù)據(jù)源的事務(wù);

  • 兩個數(shù)據(jù)源的配置手法相同,不贅述 ;

5、操作案例

  • 數(shù)據(jù)源一:簡單查詢

    @Service
    public class AdminUserServiceImpl implements AdminUserService {
      
    @Resource
      private AdminUserMapper adminUserMapper ;
      
    @Override
      public AdminUser selectByPrimaryKey (Integer id) {
          return adminUserMapper.selectByPrimaryKey(id) ;
      }
    }
  • 數(shù)據(jù)源二:事務(wù)操作

    @Service
    public class UserBaseServiceImpl implements UserBaseService {
      
    @Resource
      private UserBaseMapper userBaseMapper ;
      
    @Override
      public UserBase selectByPrimaryKey(Integer id) {
          return userBaseMapper.selectByPrimaryKey(id);
      }
      // 使用指定數(shù)據(jù)源的事務(wù)
      
    @Transactional(value = "transactionManagerTwo")
      
    @Override
      public void insert(UserBase record) {
          // 這里數(shù)據(jù)寫入失敗
          userBaseMapper.insert(record) ;
          // int i = 1/0 ;
      }
    }

    注意:這里的需要指定該數(shù)據(jù)源配置的事務(wù)管理器。

三、MybatisPlus案例

1、核心依賴


    com.baomidou
    mybatis-plus-boot-starter
    3.0.7.1
    
        
            com.baomidou
            mybatis-plus-generator
        
    


    com.baomidou
    mybatis-plus
    3.0.7.1

2、配置文件

mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  typeAliasesPackage: com.digital.market.*.entity
  global-config:
    db-config:
      id-type: AUTO
      field-strategy: NOT_NULL
      logic-delete-value: -1
      logic-not-delete-value: 0
    banner: false
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    jdbc-type-for-null: 'null'

3、分層配置

mapper層
UserBaseMapper extends BaseMapper
實現(xiàn)層
UserBaseServiceImpl extends ServiceImpl implements UserBaseService
接口層
UserBaseService extends IService

4、mapper.xml文件


  
    
    
    
    
    
    
    
    
  
  
    id, user_name, pass_word, phone, email, create_time, update_time, state
  
  
    select * from hc_user_base
  

注意事項

BaseMapper中的方法都已默認(rèn)實現(xiàn);這里也可以自定義實現(xiàn)一些自己的方法。

5、演示接口

@RestController
@RequestMapping("/user")
public class UserBaseController {
    private static final Logger LOGGER = LoggerFactory.getLogger(UserBaseController.class) ;
    @Resource
    private UserBaseService userBaseService ;
    @RequestMapping("/info")
    public UserBase getUserBase (){
        return userBaseService.getById(1) ;
    }
    @RequestMapping("/queryInfo")
    public String queryInfo (){
        UserBase userBase1 = userBaseService.getOne(new QueryWrapper().orderByDesc("create_time")) ;
        LOGGER.info("倒敘取值:{}",userBase1.getUserName());
        Integer count = userBaseService.count() ;
        LOGGER.info("查詢總數(shù):{}",count);
        UserBase userBase2 = new UserBase() ;
        userBase2.setId(1);
        userBase2.setUserName("spring");
        boolean resFlag = userBaseService.saveOrUpdate(userBase2) ;
        LOGGER.info("保存更新:{}",resFlag);
        Map listByMap = new HashMap<>() ;
        listByMap.put("state","0") ;
        Collection listMap = userBaseService.listByMap(listByMap) ;
        LOGGER.info("ListByMap查詢:{}",listMap);
        boolean removeFlag = userBaseService.removeById(3) ;
        LOGGER.info("刪除數(shù)據(jù):{}",removeFlag);
        return "success" ;
    }
    @RequestMapping("/queryPage")
    public IPage queryPage (){
        QueryParam param = new QueryParam() ;
        param.setPage(1);
        param.setPageSize(10);
        param.setUserName("cicada");
        param.setState(0);
        return userBaseService.queryPage(param) ;
    }
    @RequestMapping("/pageHelper")
    public PageInfo pageHelper (){
        return userBaseService.pageHelper(new QueryParam()) ;
    }
}

這里pageHelper方法是使用PageHelper插件自定義的方法。

“SpringBoot整合MybatisPlus配置多數(shù)據(jù)源增強插件的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


本文名稱:SpringBoot整合MybatisPlus配置多數(shù)據(jù)源增強插件的方法是什么
本文地址:http://weahome.cn/article/jseeeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部