springboot+mybatis-plus+sqlserver多数据源的配置(二)

本文介绍如何在Spring Boot应用中,通过entity到controller层次的配置,实现两个数据库的独立切换,并演示如何使用@DS注解和事务管理。包括DataSource、SqlSessionFactory、TransactionManager和SqlSessionTemplate的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在entity、service、dao和controller四个层次的同级建立一个config文件夹,之后分别建立两个数据库的配置类,如图所示
在这里插入图片描述
其中一个数据库配置类:

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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.demo.tool.mapper.XXX1", sqlSessionFactoryRef = "XXX1SqlSessionFactory")
public class XXX1DBConfig {
    @Value("${spring.datasource.XXX1.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.XXX1.url}")
    private String url;
    @Value("${spring.datasource.XXX1.username}")
    private String username;
    @Value("${spring.datasource.XXX1.password}")
    private String password;

    @Bean(name = "XXX1")
    @Primary
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.driverClassName);
        dataSource.setUrl(this.url);
        dataSource.setUsername(this.username);
        dataSource.setPassword(this.password);
        return dataSource;
    }

    @Bean(name = "XXX1SqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("XXX1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/XXX1/*Mapper.xml"));
        return bean.getObject();
    }

    @Bean(name = "XXX1TransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("XXX1") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
    @Bean(name = "XXX1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("XXX1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

最后在Service层使用@DS(“XXX1”)方法来切换数据库,具体方法在网上查查就有了。
另外,如果切换失败的话,在方法上加上

@Transactional(transactionManager = "XXX1TransactionManager", propagation = Propagation.REQUIRES_NEW)

就可以强制切换事务。

<think>嗯,用户问的是怎么搭建Spring Boot加上MyBatis-Plus的开发框架。首先,我得回忆一下自己之前有没有做过类似的项目。记得Spring Boot是用来简化Spring应用的初始搭建和开发过程的,而MyBatis-Plus是对MyBatis的增强,提供了很多便捷的功能,比如通用的CRUD操作、分页插件什么的。所以用户可能需要一个快速搭建的指南,让他们能够高效地开始开发。 首先,我应该考虑用户可能的使用场景。可能是一个新的项目需要快速启动,或者他们之前用MyBatis,现在想升级到MyBatis-Plus来提升效率。用户可能是后端开发人员,有一定的Java和Spring基础,但对整合这两个框架还不太熟悉。他们可能希望有一个步骤清晰的教程,包括必要的依赖配置、代码示例以及常见问题的解决方法。 接下来,我需要确定回答的结构。通常,搭建框架的步骤包括创建项目、添加依赖、配置数据源、创建实体和Mapper、配置MyBatis-Plus、编写Service和Controller,最后测试。每个步骤都需要详细说明,特别是依赖的版本和配置文件的设置,因为这里容易出错。 在创建项目部分,使用Spring Initializr是最快捷的方式,用户可以通过网页或者IDE(比如IntelliJ)来生成项目模板。这里需要选择Spring Boot的版本,建议选比较稳定的,比如2.7.x或者3.x,但要注意MyBatis-Spring Boot Starter的版本是否兼容。比如,MyBatis-Plus 3.5.x对应Spring Boot 2.x,而如果用户用的是Spring Boot 3.x,可能需要更高的MyBatis-Plus版本,或者等待官方支持。 添加依赖的时候,除了MyBatis-Plus的starter,可能还需要数据库驱动,比如MySQL或者PostgreSQL,以及lombok来简化代码。这时候要提醒用户检查版本兼容性,避免冲突。例如,如果使用Spring Boot 3.x,可能需要Java 17以上的版本,这时候要确认MyBatis-Plus是否有对应的支持。 配置数据源方面,application.properties或application.yml文件中的数据库连接信息必须正确,包括URL、用户名、密码和驱动类。这里常见的错误是驱动类名写错,或者数据库URL格式不正确,比如MySQL的时区问题,可能需要加上serverTimezone=Asia/Shanghai这样的参数。 创建实体类时,使用MyBatis-Plus的注解,比如@TableName和@TableId,可以指定表名和主键。需要提醒用户如果表名和字段名符合默认规则(比如驼峰转下划线),可能不需要注解,但最好显式指定,避免歧义。 Mapper接口需要继承BaseMapper,这样就能直接使用内置的CRUD方法。这里可能需要用户了解MyBatis的接口编程模式,以及如何通过继承获得通用方法。 配置类中添加@MapperScan注解,指定Mapper接口所在的包,这样Spring Boot才能自动扫描并注册这些Mapper。如果漏掉这一步,可能会导致注入失败,出现找不到Bean的错误。 分页插件的配置也是关键,用户可能需要进行分页查询,这时候需要在配置类中注册PaginationInnerInterceptor,并设置相关参数,比如数据库类型。这里需要说明如何正确配置,以及分页参数的使用方法。 Service层通常会有通用的接口和实现,利用MyBatis-Plus的IService和ServiceImpl,可以快速实现CRUD操作。需要展示如何编写Service接口和实现类,并注入Mapper。 Controller层处理HTTP请求,调用Service层的方法。这里需要演示如何编写RESTful API,比如使用@RestController和@RequestMapping注解,以及如何处理请求参数和返回结果。 测试部分,建议用户使用Postman或者单元测试来验证接口是否正常工作。常见的测试包括插入数据、查询、分页等,确保各层之间的调用没有问题。 此外,可能需要提到一些常见问题和解决方案,比如依赖冲突、配置错误、注解遗漏等。例如,如果启动时报错找不到数据源,可能是数据库配置不正确,或者驱动未添加;如果Mapper无法注入,可能是@MapperScan的包路径不对。 最后,应该给出一个简单的总结,让用户能够快速回顾整个搭建流程,并确认各步骤是否完成。可能还需要推荐一些扩展功能,比如代码生成器、自动填充字段、乐观锁等,帮助用户进一步利用MyBatis-Plus的高级特性。 整个过程中,要确保步骤清晰,代码示例准确,并且考虑到用户可能遇到的坑,提前给出提示。同时,使用中文口语化的表达,避免过于技术化的术语,让不同水平的开发者都能理解。</think>好的,下面是一步步搭建Spring Boot + MyBatis-Plus框架的指南,包含关键代码示例和注意事项: --- ### **1. 创建Spring Boot项目** 通过 [Spring Initializr](https://start.spring.io/) 或IDE工具(如IntelliJ)创建项目: - 选择 **Java版本**(推荐JDK 11/17) - 勾选依赖: `Spring Web`(构建Web应用) `Lombok`(简化代码) `MySQL Driver`(或其他数据库驱动) --- ### **2. 添加MyBatis-Plus依赖** 在`pom.xml`中添加: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> <!-- 根据Spring Boot版本选择 --> </dependency> ``` ⚠️ 注意版本兼容性: - MyBatis-Plus 3.x ➔ Spring Boot 2.x - MyBatis-Plus 4.x ➔ Spring Boot 3.x --- ### **3. 配置数据源** 在`application.yml`中配置数据库: ```yml spring: datasource: url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` --- ### **4. 创建实体类** 使用`@TableName`注解映射表名: ```java @Data @TableName("user") // 表名 public class User { @TableId(type = IdType.AUTO) // 主键自增 private Long id; private String name; private Integer age; } ``` --- ### **5. 创建Mapper接口** 继承`BaseMapper`获得通用CRUD方法: ```java public interface UserMapper extends BaseMapper<User> { // 自定义SQL方法(可选) @Select("SELECT * FROM user WHERE age > #{age}") List<User> selectByAgeGreaterThan(Integer age); } ``` --- ### **6. 配置MyBatis-Plus** 创建配置类启用分页插件: ```java @Configuration @MapperScan("com.example.demo.mapper") // 扫描Mapper接口路径 public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件 return interceptor; } } ``` --- ### **7. 编写Service层** 利用MyBatis-Plus的`IService`接口快速实现: ```java public interface UserService extends IService<User> {} @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {} ``` --- ### **8. 编写Controller层** ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getById(@PathVariable Long id) { return userService.getById(id); } @PostMapping public boolean saveUser(@RequestBody User user) { return userService.save(user); } @GetMapping("/page") public Page<User> page(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { return userService.page(new Page<>(pageNum, pageSize)); } } ``` --- ### **9. 测试API** 使用Postman或浏览器测试: - `GET http://localhost:8080/users/1` - `POST http://localhost:8080/users`(JSON body) - `GET http://localhost:8080/users/page?pageNum=2&pageSize=5` --- ### **常见问题解决** 1. **Mapper无法注入**:检查`@MapperScan`路径是否正确 2. **分页不生效**:确保配置了`PaginationInnerInterceptor` 3. **表名/字段名映射错误**:使用`@TableField("column_name")`显式指定 --- ### **扩展功能** - **代码生成器**:自动生成Entity/Mapper/Service代码 - **自动填充**:实现`MetaObjectHandler`处理创建/更新时间 - **乐观锁**:通过`@Version`注解实现并发控制 完整项目结构示例: ``` src/main/java ├── com.example.demo │ ├── config │ │ └── MyBatisPlusConfig.java │ ├── controller │ │ └── UserController.java │ ├── entity │ │ └── User.java │ ├── mapper │ │ └── UserMapper.java │ └── service │ ├── impl │ │ └── UserServiceImpl.java │ └── UserService.java ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值