当前位置: 首页 > wzjs >正文

沧州网站建设刘磊网络营销师怎么考

沧州网站建设刘磊,网络营销师怎么考,盘锦做网站价格,光辉网络 石家庄网站建设在 Spring Boot 项目中集成 MyBatis-Plus 并配置多数据源,可以按照以下步骤进行。这个示例将展示如何配置两个数据源,并确保每个数据源都有自己对应的 SqlSessionFactory 和事务管理器。 1. 添加依赖 首先,在你的 pom.xml 文件中添加必要的…

在 Spring Boot 项目中集成 MyBatis-Plus 并配置多数据源,可以按照以下步骤进行。这个示例将展示如何配置两个数据源,并确保每个数据源都有自己对应的 SqlSessionFactory 和事务管理器。

1. 添加依赖

首先,在你的 pom.xml 文件中添加必要的依赖项:

<dependencies><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MyBatis-Plus Boot Starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version></dependency><!-- MySQL Connector Java (根据实际使用的数据库选择) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- HikariCP (Spring Boot 默认的连接池) --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency>
</dependencies>

2. 配置文件设置

在 application.yml 中配置两个数据源的相关信息:

spring:datasource:primary:url: jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driversecondary:url: jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 启用SQL日志输出mapper-locations: classpath:/mapper/*.xml # Mapper XML文件位置

3. 数据源配置类

创建两个配置类来分别配置主数据源和次数据源及其相关的 SqlSessionFactory 和事务管理器。

主数据源配置 (PrimaryDataSourceConfig.java)

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.hieasy.e3.mapper.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {@Primary@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Primary@Bean(name = "primarySqlSessionFactory")public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);// 添加MyBatis-Plus插件(如分页插件)sessionFactory.setPlugins(new Interceptor[]{new PaginationInterceptor()});sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));return sessionFactory.getObject();}@Primary@Bean(name = "primaryTransactionManager")public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

次数据源配置 (SecondaryDataSourceConfig.java)

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.hieasy.e3.mapper.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondarySqlSessionFactory")public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);// 添加MyBatis-Plus插件(如分页插件)sessionFactory.setPlugins(new Interceptor[]{new PaginationInterceptor()});sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));return sessionFactory.getObject();}@Bean(name = "secondaryTransactionManager")public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

3.1  关键配置说明

1. 使用 MybatisSqlSessionFactoryBean 而非默认工厂
  • 原因:MyBatis-Plus 的功能(如默认方法)依赖其自定义的 SqlSessionFactory

  • 错误示例:使用原生 SqlSessionFactoryBean 会导致插件失效。

2. 指定独立的Mapper包路径
  • 通过 @MapperScan(basePackages = "包路径", sqlSessionFactoryRef = "工厂Bean名称") 确保每个数据源的Mapper绑定到正确的工厂。

  • 包路径分离:将不同数据源的Mapper接口分别放在不同的包中(如 com.example.mapper.db1 和 com.example.mapper.db2)。

3. 添加MyBatis-Plus插件
  • 在 SqlSessionFactory 中注入插件(如分页插件、乐观锁插件),否则分页等增强功能失效:

 

4. Mapper 接口定义

确保为每个数据源定义的 Mapper 接口位于正确的包下,并继承 BaseMapper。

主数据源 Mapper 示例 (PrimaryMapper.java)

package com.hieasy.e3.mapper.primary;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hieasy.e3.entity.PrimaryEntity;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface PrimaryMapper extends BaseMapper<PrimaryEntity> {
}

次数据源 Mapper 示例 (SecondaryMapper.java)

package com.hieasy.e3.mapper.secondary;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hieasy.e3.entity.SecondaryEntity;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface SecondaryMapper extends BaseMapper<SecondaryEntity> {
}

5. 使用示例

在服务层或控制器中使用这些 Mapper 进行操作时,请确保正确注入它们:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class MultiDataSourceService {private final PrimaryMapper primaryMapper;private final SecondaryMapper secondaryMapper;@Autowiredpublic MultiDataSourceService(PrimaryMapper primaryMapper, SecondaryMapper secondaryMapper) {this.primaryMapper = primaryMapper;this.secondaryMapper = secondaryMapper;}@Transactional("primaryTransactionManager")public void operateOnPrimary() {// 对主数据源的操作}@Transactional("secondaryTransactionManager")public void operateOnSecondary() {// 对次数据源的操作}
}

6. 避免自动配置冲突

若手动配置多数据源,需排除Spring Boot的默认数据源自动配置:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

常见问题排查

  1. 错误提示 Invalid bound statement (not found)

    • 检查Mapper接口的包路径是否在 @MapperScan 中正确指定。

    • 确认XML映射文件(若有)路径是否在配置中指定。

  2. 分页/乐观锁失效

    • 检查是否在 SqlSessionFactory 中添加了对应插件。

  3. 事务不生效

    • 确保在方法上使用 @Transactional(transactionManager = "db1TransactionManager") 指定事务管理器。

http://www.dtcms.com/wzjs/235941.html

相关文章:

  • wordpress插件木马吗百度优化教程
  • 公司网站页面设计图片如何在百度上发自己的广告?
  • 哈尔滨做网站公司哪家好电商培训内容
  • 学校网站建设学生文明上网哪里有免费的网站推广
  • 网站如何推广搜索引擎seo优化怎么做
  • 网站开发终止协议书贵阳网站建设制作
  • wordpress led主题seo优化与推广招聘
  • 医院网站建设运营方案搜索引擎名词解释
  • 做毕设网站多少钱需要推广的app在哪里找
  • wordpress科技网站模板淘宝关键词怎么优化
  • 东昌网站建设浙江seo外包费用
  • 莱芜找工作网站bt蚂蚁磁力搜索天堂
  • 移动网站建设什么平台可以打广告做宣传
  • 个人网站开发平台有哪些企业网站的作用有哪些
  • 睡不着偷偷看b站今日热点新闻事件2022
  • 软文怎么优化网站上海培训机构排名榜
  • 免费建商城网站搜索引擎排名国内
  • 品牌网络营销公司北京搜索关键词优化
  • 国外哪些网站做产品推广比较好谷歌推广哪家公司好
  • 夏县做网站谷歌seo搜索
  • 四川城乡建设监管网站2024年的新闻
  • 衡水网站建设集团最佳磁力搜索天堂
  • 建筑工程有限责任公司网站关键词优化系统
  • 校园二手网站开发的意义宁德市疫情最新消息
  • 打开网站自动跳转代码bt磁力在线种子搜索神器下载
  • 天津市规划局官方网站建设项目郑州疫情最新情况
  • 韩国学校网站模板百度推广优化怎么做
  • 用手机可以做网站seo搜索引擎排名优化
  • 做网站 需要工信部备案吗百度竞价开户多少钱
  • 怎么找的做网站的人seo是什么岗位简称