下面就给你讲解一下“SpringBoot DataSource数据源实现自动配置流程详解”的完整攻略。
一、DataSource数据源实现自动配置概述
在我们开发一个项目时,需要我们配置数据源,SpringBoot提供了自动配置数据源的功能。SpringBoot对JDBC的封装使得开发人员能够快速地进行数据源配置,通过少量的配置就可以连接到数据库。
二、DataSource数据源自动装配
当我们在SpringBoot项目中引入了jdbc的依赖时,SpringBoot就会自动配置一个默认的DataSource数据源。 下面来详细讲解一下自动配置流程。
2.1 配置文件
我们在application.properties或者application.yml文件中配置我们需要连接的数据库信息,比如:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2.2 数据源自动配置
当我们在 application.properties或者application.yml 文件中添加了上述数据源配置后,SpringBoot会自动为我们创建一个DataSource数据源。这些数据源被添加到了环境上下文(ApplicationContext)中:
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnProperty(name = "spring.datasource.type")
@AutoConfigureAfter({ DataSourcePoolMetadataProvidersConfiguration.class,
HibernateJpaAutoConfiguration.class })
public class DataSourceAutoConfiguration {
... ... ...
这是一个自动配置类,这个类使用了@Configuration注解表示这是一个@Configuration配置类
@ConditionalOnClass表示当DataSource和JdbcTemplate在类路径下时,这个配置类才会生效。
@AutoConfigureAfter表示在DataSourcePoolMetadataProvidersConfiguration和HibernateJpaAutoConfiguration类后再进行自动配置。
通过上述注解,我们就能够知道当我们引入了JDBC的依赖之后,SpringBoot就会自动生成一个默认的DataSource数据源。
三、代码示例
3.1 Maven依赖
在项目中,我们需要引入以下Maven依赖
<!-- SpringBoot JDBC依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MySQL连接器依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3.2 配置文件
在application.properties或者application.yml文件中添加以下内容,替换username、password、url为你需要连接的数据库信息。
# MySQL配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root123
3.3 实体类
我们需要先定义一个实体类,如下:
public class Person {
private Long id;
private String name;
private Integer age;
//省略getter setter
}
3.4 数据库表的定义
创建一个person表
CREATE TABLE person (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT(11) NOT NULL,
PRIMARY KEY (id)
);
3.5 数据库CRUD操作
定义一个PersonDao类,并在类中注入JdbcTemplate。
@Repository
public class PersonDao {
private final JdbcTemplate jdbcTemplate;
@Autowired //构造方法注入
public PersonDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//新增一条person记录
public void insert(Person person) {
jdbcTemplate.update("INSERT INTO person(name, age) VALUES (?, ?)",
person.getName(), person.getAge());
}
//根据id更新person记录
public void updateById(Long id, Person person) {
jdbcTemplate.update("UPDATE person SET name = ?, age = ? WHERE id = ?",
person.getName(), person.getAge(), id);
}
//根据id删除person记录
public void deleteById(Long id) {
jdbcTemplate.update("DELETE FROM person WHERE id = ?", id);
}
//查询所有person记录
public List<Person> findAll() {
return jdbcTemplate.query("SELECT id, name, age FROM person",
(rs, rowNum) ->
new Person(
rs.getLong("id"),
rs.getString("name"),
rs.getInt("age")
)
);
}
//根据id查询person记录
public Person findById(Long id) {
return jdbcTemplate.queryForObject("SELECT id, name, age FROM person WHERE id = ?",
new Object[]{id},
(rs, rowNum) ->
new Person(
rs.getLong("id"),
rs.getString("name"),
rs.getInt("age")
)
);
}
}
通过上面的操作,我们就可以完成对Person实体类进行数据库的CRUD操作了。
四、总结
本文简单介绍了SpringBoot DataSource数据源实现自动配置流程,通过对相关代码示例的介绍,希望能够帮助大家更好地理解SpringBoot 的数据源自动配置机制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot DataSource数据源实现自动配置流程详解 - Python技术站