沃梦达 / IT编程 / 数据库 / 正文

SpringBoot整合JDBC、Druid数据源的示例代码

下面就是详细的SpringBoot整合JDBC和Druid数据源的示例代码攻略。

下面就是详细的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操作。演示过程中使用到了JdbcTemplateDAOU接口,主要是为了方便的对数据表进行操作,以及便于扩展和维护。

总结

本文介绍了SpringBoot如何整合JDBC、Druid数据源的完整攻略。希望读者通过本文,可以快速上手并理解整合过程中的相关概念和关键步骤,使 SpringBoot 开发过程更加高效和愉悦。

本文标题为:SpringBoot整合JDBC、Druid数据源的示例代码