【Java开发】 Spring 框架 02:JDBC 数据配置 & 多数据源配置结合Mybatis-plus

发布于:2022-11-08 ⋅ 阅读:(968) ⋅ 点赞:(0)

JDBC(Java DataBase Connectivity)就是Java数据库连接,简单来说就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句,接下来演示一下 Spring Boot 的数据配置,并且将多数据源配置同Mybatis-plus相结合。

目录

1 配置单数据源

1.1 创建项目

1.2 配置属性

1.3 数据库连接展示

1.4 JDBC 查询操作

2 Spring Boot 配置多数据源

2.1 前提--两个数据源

2.2 配置两组 DataSource

2.3 制定主库,多数据源结合 mybatis-plus

2.4 Dao层 & controlller层

2.5 启动类排除自动配置&运行

2.6 查看运行结果

参考文章


1 配置单数据源

1.1 创建项目

本文通过编译器 IDEA 实现:

①New Project

②添加 Mysql 驱动和 JDBC 依赖

也可在之前的项目的 pom.xml 文件中直接添加Mysql 驱动和 JDBC 依赖~

1.2 配置属性

如下,连接数据库需要进行如下配置👇

路径:src/main/resources/application.properties

#数据源常用配置
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/
#可选
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

1.3 数据库连接展示

启动类中添加如下代码👇

@SpringBootApplication
@Slf4j
public class DataSourceDemoApplication implements CommandLineRunner {

    @Autowired
    private DataSource dataSource;

    public static void main(String[] args) {
        SpringApplication.run(DataSourceDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        log.info(dataSource.toString());
        Connection connection = dataSource.getConnection();
        log.info(connection.toString());
        connection.close();
    }
}

运行可看到 DataSource 和 DataSource Pool 信息👇

1.4 JDBC 查询操作

填写完正确的数据库链接后就可以使用JDBC进行相关操作了~

路径:src/main/java/com/yinyu/datasourcedemo/DataSourceDemoApplication.java

@Autowired
private JdbcTemplate jdbcTemplate; //注入

//查询展示数据
private void showData(){
    jdbcTemplate.queryForList("SELECT * FROM student")
            .forEach(row -> System.out.println(row.toString()));
}

将 showData 方法放在 run 方法下边👇

 执行启动类,就可以看到查询到的数据了,不过前提是所配置的数据库里边有表~

2 Spring Boot 配置多数据源

2.1 前提--两个数据源

我是用的云服务器的 Mysql,然后通过 dbeaver 进行操作,idea 的Database也挺好用(类似dbeaver)。

2.2 配置两组 DataSource

路径:src/main/resources/application.properties

#多数据源data01
spring.datasource.data01.jdbc-url=jdbc:mysql://127.0.0.1:3306/data01?characterEncoding=utf8&amp
spring.datasource.data01.username=root
spring.datasource.data01.password=root
spring.datasource.data01.driver-class-name=com.mysql.cj.jdbc.Driver

#多数据源data2
spring.datasource.data02.jdbc-url=jdbc:mysql://127.0.0.1:3306/data02?characterEncoding=utf8&amp
spring.datasource.data02.username=root
spring.datasource.data02.password=root
spring.datasource.data02.driver-class-name=com.mysql.cj.jdbc.Driver

2.3 制定主库,多数据源结合 mybatis-plus

Ⅰ 添加 mybatis-plus 依赖:

<!--.mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

Ⅱ 数据源配置代码:

相关知识点:

  • 使用@Bean可以创建一个bean对象交给spring容器管理
  • @Bean创建的bean对象的名称默认为方法名,也可以指定
  • @Bean方法参数表示,接收一个bean对象,默认按照type类型接收注入的对象,若要修改为byName方式,可以使用@Qualifier注解注入准确的对象
  • @Primary表示该bean为此类型的默认bean,在其他地方引用的时候用@Autowired即可按照类型注入,不受同类型多个对象影响

路径:src/main/java/com/yinyu/datasourcedemo/datasource/DataSource01Config.java

package com.yinyu.datasourcedemo.datasource;

//省去引入的类


@Configuration//注入到spring容器中
//扫描dao层,并且给dao层注入指定的sqlSessionFactory
@MapperScan(basePackages = "com.yinyu.datasourcedemo.data01",sqlSessionFactoryRef = "sqlSessionFactory01")
public class DataSource01Config {

    /**
     * 数据源对象
     * @return
     */
    @Bean(name = "dataSource01")//使用@Bean可以创建一个bean对象交给spring容器管理
    @Primary//表示它是主数据库,表示默认的对象
    @ConfigurationProperties(prefix = "spring.datasource.data01")//表示默认读取spring.datasource.data01开头的节点
    public DataSource dataSource01(){
        return DataSourceBuilder.create().build();
    }


    @Primary
    @Bean(name = "sqlSessionFactory01")
    public SqlSessionFactory sqlSessionFactory01(@Qualifier("dataSource01") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //我们采用的是注解的方式,如果写了mapper.xml文件就需要用下面这句话
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:"));
        return bean.getObject();
    }
    @Primary
    @Bean(name = "transactionManager01")
    public DataSourceTransactionManager transactionManager01(@Qualifier("dataSource01")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "sessionTemplate01")
    public SqlSessionTemplate sessionTemplate01(@Qualifier("sqlSessionFactory01")SqlSessionFactory sessionFactory){
        return new SqlSessionTemplate(sessionFactory);
    }

}

路径:src/main/java/com/yinyu/datasourcedemo/datasource/DataSource02Config.java

package com.yinyu.datasourcedemo.datasource;

//省去引入的类

@Configuration//注入到spring容器中
@MapperScan(basePackages = "com.yinyu.datasourcedemo.data02",sqlSessionFactoryRef = "sqlSessionFactory02")
public class DataSource02Config {

    //数据源对象
    @Bean(name = "dataSource02")
    @ConfigurationProperties(prefix = "spring.datasource.data02")
    public DataSource dataSource02(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory02")
    public SqlSessionFactory sqlSessionFactory02(@Qualifier("dataSource02") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:"));
        return bean.getObject();
    }
    @Bean(name = "transactionManager02")
    public DataSourceTransactionManager transactionManager02(@Qualifier("dataSource02")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sessionTemplate02")
    public SqlSessionTemplate sessionTemplate02(@Qualifier("sqlSessionFactory02")SqlSessionFactory sessionFactory){
        return new SqlSessionTemplate(sessionFactory);
    }

}

2.4 Dao层 & controlller层

ⅠDao层--StudentMapper 和 StudentMapper

路径:src/main/java/com/yinyu/datasourcedemo/data01/mapper/StudentMapper.java

//创建一个简单的 mapper,简单到不继承BaseMapper
@Repository//代表持久层
public interface StudentMapper{

    //查询student,也可创建student实体类替代Map
    @Select("select * from student")
    List<Map<String,Object>> selectStudent();

}

路径:src/main/java/com/yinyu/datasourcedemo/data02/mapper/UserMapper.java

//创建一个简单的 mapper,简单到不继承BaseMapper
@Repository//代表持久层
public interface StudentMapper{

    //查询student,也可创建student实体类替代Map
    @Select("select * from student")
    List<Map<String,Object>> selectStudent();
    
}

Ⅱ 直接到 controller 层

路径:src/main/java/com/yinyu/datasourcedemo/controller/IndexController.java

@RestController//这个注解包含了@ResponseBody和@Controller配合,这个类中的方法返回的都是json
public class IndexController {

    @Autowired
    //主数据源
    private StudentMapper studentMapper;

    @Autowired//表示按名称自动注入
    //第二个数据源
    private UserMapper userMapper;


    @RequestMapping("/student")
    public Object getStudent(){
        return studentMapper.selectStudent();
    }

    @RequestMapping("/user")//对外的访问路径
    public Object getUser(){
        return userMapper.selectUser();
    }
}

2.5 启动类排除自动配置&运行

路径:src/main/java/com/yinyu/datasourcedemo/DataSourceDemoApplication.java

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,
        JdbcTemplateAutoConfiguration.class})
@Slf4j
public class DataSourceDemoApplication{

    public static void main(String[] args) {
        SpringApplication.run(DataSourceDemoApplication.class, args);
    }

}

2.6 查看运行结果

启动成功👇

 查询/student接口成功👇

  查询/user接口成功👇


参考文章

springboot配置多数据源 - 走看看


网站公告

今日签到

点亮在社区的每一天
去签到