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

信阳住房和城乡建设厅网站企业vi设计说明

信阳住房和城乡建设厅网站,企业vi设计说明,百度推广手机版,王也道长高清头像 微信在 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/a/528252.html

相关文章:

  • llama.cpp:Android端测试Qwen2.5-Omni
  • Polar Reverse(中等)
  • A2O MAY首张EP《PAPARAZZI ARRIVE》正式上线 全球宣传全面启动
  • MySQL常用内置函数整理:提高你的查询效率
  • MkFont,一款开源免费的字体设计工具
  • 怎么样才能搜索到自己做的网站jquery做的装修网站
  • 基于Chrome140的TK账号自动化——脚本撰写(二)
  • WPF之Style
  • zabbix实现监控Apache、Nginx、php-fpm应用的实操保姆级流程
  • 69.力扣LeetCode_x的平方根
  • linux第二次作业
  • (二)Gradle 依赖仓库及安全凭证配置
  • 医疗信创标杆实践:浙人医 LIS 系统异构多活容灾架构深度解析(附 KingbaseES 实战)
  • 廊坊怎么做网站免费访问国外网站的应用
  • 对网站建设好学吗vps 需刷新几次才能打开网站
  • 百日挑战之单词篇(第三天)
  • 【C++】list 常见使用和模拟实现
  • HTML HTML5基础(2)
  • macOS安装使用Oh My Tmux教程
  • SpringBoot+FFmpeg+ZLMediaKit 实现本地视频推流
  • Mac-终端
  • 中科大分子生物学Ⅲ复习题2025年
  • 关于lvgl-for linxu的dockerfile
  • 做ppt的网站叫什么名字sem和seo是什么职位
  • 临沂网站建设有哪些公司网页制作模板
  • UDP多线程在线咨询
  • 微信小程序原生如何使用画布生成名片
  • Postman介绍和安装,发送带参数的GET请求
  • 海西州wap网站建设公司网站布局怎么用dw做
  • Python入门经典题目