Springboot项目整合MyBatis配置多数据源

Springboot项目整合MyBatis配置多数据源

描述

在项目开发过程中,在实际的业务中总会遇到这样的问题,需要访问不同的数据源来完成数据的转移或者数据的分开处理,这个时候我们可能就需要用到在一个项目中配置多个数据源;接下来要说的是MyBatis所对应的多数据源配置的详细操作。

准备工作

项目中必须包含以下包引用(版本根据项目实际情况定):


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <optional>true</optional>
</dependency>

项目过程

项目中使用的是application.yml文件来完成配置信息的,配置如下:


test:
  datasource:
    db1:
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://saas.database:3306/test_one
    db2:
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://saas.database:3306/test_two

数据源类编写详情如下:
DB1:

@Configuration
@MapperScan(value = "tech.test.eaglehorn.mapper.db1", sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class ThirdPartMybatisConfig {

    @Bean
    @ConfigurationProperties(prefix = "thirdpart.datasource.db1")
    public DataSource dataSourceOne() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }


    @Bean
    public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
                "classpath*:sqlmapper/db1/*.xml"
        ));
        return sqlSessionFactoryBean.getObject();
    }

}

DB2:

@Configuration
@Slf4j
@MapperScan(value = "tech.test.eaglehorn.mapper.db2", sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class GateWayMybatisConfig {

    @Bean
    @ConfigurationProperties(prefix = "thirdpart.datasource.db2")
    public DataSource dataSourceTwo() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }


    @Bean
    public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
                "classpath*:sqlmapper/db2/*.xml"
        ));
        return sqlSessionFactoryBean.getObject();
    }
}

@MapperScan注解参数中,value的值是当前数据源所对应的Mapper接口所在的包路径,sqlSessionFactoryRef的值是当前类中声明的SqlSessionFactory Bean
声明数据源bean上方上的@ConfigurationProperties(prefix = “thirdpart.datasource.db”)是项目配置中的所有信息注入;
PathMatchingResourcePatternResolver().getResources(
“classpath*:sqlmapper/db2/*.xml”
)); 这个路径是xml文件的保存路径。

总结

springboot在项目构建的过程中其实已经帮我们做了很多事情了,我们按照规定简单地做一些配置,就能满足我们基本的restful API操作数据的整个链路,完成以上的配置,将对应的mapper接口放入响应的包下,映射文件放入响应的配置目录下,然后启动项目,就可以直接写操作数据的代码逻辑了

有疑问可以评论,看到了基本上会回复

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Spring Boot项目整合Mybatis需要几个步骤: 1. 在pom.xml中添加MybatisSpring Boot整合的依赖 2. 在application.properties或application.yml中配置数据源Mybatis的相关属性 3. 创建Mybatis配置类,用于配置SqlSessionFactory和Mapper扫描 4. 在Mapper接口上添加@Mapper注解 以下是一个示例的Mybatis配置类: ``` @Configuration @MapperScan(basePackages = "com.example.mapper") public class MybatisConfig { @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setTypeAliasesPackage("com.example.model"); return factoryBean.getObject(); } } ``` 在这个例子中, 我们配置了Mapper扫描的包路径,并且将数据源注入SqlSessionFactoryBean中,同配置了别名的包路径。 ### 回答2: SpringBoot 是一个快速构建 Spring 框架项目的工具,而 MyBatis 是一个很流行的 ORM 框架,将两者整合起来可以更加方便地进行数据库操作。 下面是 springboot 整合 mybatis配置步骤: 1. 创建 SpringBoot 项目 在 IntelliJ IDEA 中创建一个新的 SpringBoot 项目,选用 Maven 作为依赖管理工具,选择 Web 和 MySQL 配置。 2. 导入 MyBatis 相关依赖 在 pom.xml 中添加 MyBatis 相关依赖: ``` <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` 3. 配置数据源 在 application.properties 文件中配置数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 4. 创建映射文件 创建需要操作的表对应的 Bean 类,并创建对应的映射文件,例如 User.java 和 UserMapper.xml,注意必须将映射文件放在 resources 目录下的 mapper 目录中。 User.java: ``` public class User { private Long id; private String name; // getters and setters // toString } ``` UserMapper.xml: ``` <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id" jdbcType="BIGINT"/> <result column="name" property="name" jdbcType="VARCHAR"/> </resultMap> <select id="getUserById" resultMap="BaseResultMap"> SELECT id, name FROM user WHERE id = #{id} </select> </mapper> ``` 5. 创建 Mapper 创建一个 Mapper 接口来访问数据库,例如 UserMapper.java: ``` @Repository public interface UserMapper { User getUserById(Long id); } ``` 6. 配置 MyBatisSpringBoot 项目中使用 MyBatis 无需手动配置 SqlSessionFactory、SqlSessionTemplate 等 Bean,只需在启动类上使用 @MapperScan 注解扫描 Mapper 接口所在的包或类。例如: ``` @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 至此,就完成了 SpringBoot 整合 MyBatis配置。可以在 Controller 中注入 Mapper,并进行 CRUD 操作,例如: ``` @RestController public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/user/{id}") public User getUserById(@PathVariable Long id) { return userMapper.getUserById(id); } } ``` ### 回答3: SpringBoot是一个开源的、快速开发的Java Web开发框架,它具有轻量级、模块化和易于使用的特点。Mybatis是一款优秀的持久层框架,它提供了很多方便的API供开发使用,并且Mybatis的Mapper XML维护SQL比较方便。本文将介绍如何将SpringBootMybatis进行整合配置。 1、添加MybatisMybatis-SpringBoot-Starter依赖 在 pom.xml 文件中添加以下依赖: ```xml <!--Mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <!--Mybatis-MySQL驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2、配置数据源 在application.yml文件中添加数据源的相关配置: ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true username: root password: root ``` 以上代码中的 spring.datasource.xxx 为SpringBoot中连接MySQL的数据源相关配置,其中的最后两行分别是MySQL根账号的用户名和密码,需要根据需要进行修改。 3、配置Mybatis 在application.yml文件中对Mybatis进行配置: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.demo.entity ``` 以上代码中的配置表示将Mapper XML文件存放在mappers目录下,且Mybatis会自动扫描com.example.demo.entity包中的Java对象进行类型别名注册和解析。 4、配置Mapper 在Mapper接口中编写对应的SQL语句: ```java public interface UserMapper { int insert(User user); List<User> selectAll(); } ``` 以上代码定义了一个UserMapper接口,其中的 insert 和 selectAll 方法会映射为对应的SQL语句。insert 方法用于插入一条User数据,selectAll 方法用于查询全部User数据。 5、编写Mapper XML 在 resources/mapper 目录下编写对应的Mapper XML文件: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.demo.mapper.UserMapper" > <resultMap id="BaseResultMap" type="com.example.demo.entity.User" > <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <insert id="insert" parameterType="com.example.demo.entity.User" > insert into tb_user(name, age) values(#{name}, #{age}) </insert> <select id="selectAll" resultMap="BaseResultMap" > select * from tb_user </select> </mapper> ``` 以上代码中定义了一个UserMapper对应的Mapper XML,其中的 selectAll 和 insert 标签与对应的Mapper接口方法名称映射一致,分别对应的是查询全部数据和插入数据两个SQL语句。 6、测试运行 在SpringBoot应用启动之前,需要SpringBootApplication的启动类上添加注解@MapperScan("com.example.demo.mapper"),表示要扫描com.example.demo.mapper包下的所有Mapper类并注册。 ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 接着,在启动类中注入UserMapper并进行测试: ```java @RestController public class UserController { @Autowired UserMapper userMapper; @GetMapping("/user") public List<User> getUser() { return userMapper.selectAll(); } @PostMapping("/user") public String postUser(@RequestBody User user) { int result = userMapper.insert(user); return result == 1 ? "success" : "failed"; } } ``` 以上代码中分别定义了一个GET请求和一个POST请求,分别用于查询数据库中全部的User数据和向数据库中插入一条新的User数据。 7、测试结果 启动SpringBoot应用之后,在浏览器中访问 http://localhost:8080/user 来查询数据库中的所有User数据,或者使用Postman等工具来向数据库中增加一条User数据。如果返回结果为success,则说明数据库操作成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值