目录
JDBC 集成
Spring Data JPA
MyBatis 集成
事务管理
JDBC(Java Database Connectivity)是Java中用于与关系型数据库进行交互的API。它为Java程序提供了一个标准的、统一的接口,使得Java程序可以连接到各种支持JDBC的数据库,如MySQL、Oracle、PostgreSQL等。通过JDBC,开发人员可以执行SQL语句,进行数据的增删改查操作。
JDBC的主要作用包括:
优点:
缺点:
Spring Boot通过 starters 机制自动配置JDBC环境。当添加spring-boot-starter-jdbc
或spring-boot-starter-data-jpa
依赖时,Spring Boot会自动在classpath中查找JDBC驱动器,并基于这些驱动器配置数据源和JdbcTemplate。
具体来说:
application.properties
中的配置,创建并配置数据源(DataSource)实例,默认使用HikariCP作为连接池。HikariCP是Spring Boot默认使用的数据库连接池,因为它高效、轻量级,并且性能优异。以下是HikariCP的主要特点:
在application.properties
中配置HikariCP的相关参数:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# HikariCP 配置
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=15
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.idleTimeout=60000
在application.properties
中,可以通过Spring Boot的属性来配置数据源和数据库连接:
spring.datasource.url
spring.datasource.username
spring.datasource.password
spring.datasource.driver-class-name
spring.datasource.type
,默认为HikariDataSource,可以选择其他如Druid等。自定义数据源
如果需要自定义数据源,可以在配置类中定义一个@Bean
:
@Configuration
public class DatabaseConfig {
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url("jdbc:mysql://localhost:3306/mydb")
.username("root")
.password("123456")
.build();
}
}
JdbcTemplate是Spring框架提供的一个JDBC模板类,旨在简化JDBC操作。它封装了底层的JDBC细节,提供了一系列方法来执行SQL操作,并自动处理资源的释放。通过使用JdbcTemplate,开发者可以专注于业务逻辑,而不必担心繁琐的JDBC资源管理。
以下是使用JdbcTemplate进行CRUD操作的示例:
public void insertUser(User user) {
String sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, user.getUsername(), user.getEmail(), user.getPassword());
}
public List<User> findAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new UserRowMapper());
}
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong(