下面就是详细的SpringBoot整合JDBC和Druid数据源的示例代码攻略。
1. 前置条件
在开始本文之前,需要先安装好对应的开发环境,建议使用以下版本:
- Java 8或以上
- Maven 3.2或以上
- SpringBoot 2.0.0或以上
本文涉及到的示例代码可以在GitHub上进行下载。
2. 导入依赖
首先,在pom.xml
文件中添加以下依赖:
<dependencies>
<!-- Spring Boot Starter JDBC,由于 MySQL 需要所以在此依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Druid 数据源包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- MySQL JDBC 驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3. 配置数据源
在application.yml
文件中配置数据源信息(MySQL示例):
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydatabase?serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 配置 Druid 的监控页面
# 默认会和 Druid 自带的监控页面冲突,需要修改默认路径
druid:
servlet:
# 监控页面的访问路径
stat-view-servlet:
url-pattern: /druid/*
# 数据源的默认配置
# 具体配置可以在不同的数据源中进行覆盖
stat-view-servlet:
login-username: admin
login-password: admin
reset-enable: false
datasource:
# 配置数据源的名称,和在代码中对应的名称一致
# 多数据源时,需要指定不同的名称
name: my-datasource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydatabase?serverTimezone=Asia/Shanghai
username: root
password: 123456
filters: stat,wall
maxActive: 20
initialSize: 1
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=500
4. 创建数据表
在 MySQL 中创建一个简单的表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`age` int(11) NOT NULL,
`email` varchar(64) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
5. 创建 DAO 和 Service 层
创建一个 User 实体类:
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// setter, getter, toString 省略
}
创建一个 UserDAO 接口和一个 UserDAOImpl 实现类:
public interface UserDAO {
User findById(Long id);
void save(User user);
void update(User user);
void deleteById(Long id);
}
@Repository("userDAO")
public class UserDAOImpl implements UserDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public User findById(Long id) {
String sql = "SELECT * FROM user WHERE id = ?";
RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
return jdbcTemplate.queryForObject(sql, rowMapper, id);
}
// 保存用户
@Override
public void save(User user) {
String sql = "INSERT INTO user(name, age, email) VALUES(?, ?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getEmail());
}
// 更新用户
@Override
public void update(User user) {
String sql = "UPDATE user SET name = ?, age = ?, email = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getEmail(), user.getId());
}
// 删除用户
@Override
public void deleteById(Long id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, id);
}
}
创建一个 UserService 接口和一个 UserServiceImpl 实现类:
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User findById(Long id) {
return userDAO.findById(id);
}
@Override
public void save(User user) {
userDAO.save(user);
}
@Override
public void update(User user) {
userDAO.update(user);
}
@Override
public void deleteById(Long id) {
userDAO.deleteById(id);
}
}
6. 配置Druid数据源
创建Druid数据源配置类,用于将开发中使用的数据源 bean 定义到容器中,例如:
@Configuration
public class DataSourceConfig {
// 数据源名称
private final String DATASOURCE_NAME = "my-datasource";
@Bean(DATASOURCE_NAME)
// 指定数据源为 Druid 数据源
@ConfigurationProperties("spring.datasource.druid")
public DruidDataSource druidDataSource() {
return new DruidDataSource();
}
@Bean
// 将 Druid 数据源包装为 Spring 的 JdbcTemplate
public JdbcTemplate jdbcTemplate(@Qualifier(DATASOURCE_NAME) DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
7. 编写测试类
创建一个User DAO 的测试类,演示如何在测试类中使用 Druid 数据源测试 UserDAO,例如:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {
private Logger logger = LoggerFactory.getLogger(UserDaoTest.class);
@Autowired
private UserDAO userDAO;
@Test
public void testFindById() {
User user = userDAO.findById(1L);
logger.info("testFindById result: {}", user.toString());
}
@Test
public void testSave() {
User user = new User();
user.setName("张三");
user.setAge(20);
user.setEmail("zhangsan@example.com");
userDAO.save(user);
logger.info("testSave result: {}", user.toString());
}
@Test
public void testUpdate() {
User user = userDAO.findById(2L);
user.setName("李四");
userDAO.update(user);
logger.info("testUpdate result: {}", user.toString());
}
@Test
public void testDeleteById() {
userDAO.deleteById(3L);
logger.info("testDeleteById");
}
}
8. 运行测试
在测试类中运行测试方法,如果测试通过,则说明整合成功。在浏览器中输入“http://localhost:8080/druid”即可访问 Druid 数据源的监控页面,默认用户名和密码均为 admin。
9. 示例说明
示例1
在示例1中,我们将在pom.xml
文件中添加完成Druid数据源的依赖,并在application.yml
文件中配置数据源信息。在经过以上的配置之后,我们将能够直接使用Druid数据源,来进行我们的SpringBoot开发工作。
示例2
在示例2中,我们将演示如何使用代码将Druid数据源包装为Spring的JdbcTemplate,并用于对MySQL中的数据表进行CRUD操作。演示过程中使用到了JdbcTemplate
和DAOU
接口,主要是为了方便的对数据表进行操作,以及便于扩展和维护。
总结
本文介绍了SpringBoot如何整合JDBC、Druid数据源的完整攻略。希望读者通过本文,可以快速上手并理解整合过程中的相关概念和关键步骤,使 SpringBoot 开发过程更加高效和愉悦。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合JDBC、Druid数据源的示例代码 - Python技术站