JDBC(Java DataBase Connectivity)就是Java数据库连接,简单来说就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句,接下来演示一下 Spring Boot 的数据配置,并且将多数据源配置同Mybatis-plus相结合。
目录
1 配置单数据源
1.1 创建项目
本文通过编译器 IDEA 实现:
也可在之前的项目的 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&
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&
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接口成功👇