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

yizhihongxing

下面就是详细的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数据源的示例代码 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • mysql如何查询日期与时间

    MySQL提供了多种方法可以查询日期与时间,以下是两种常用的示例: 方法1: 使用DATE_FORMAT函数格式化日期和时间 使用DATE_FORMAT函数可以将日期和时间以字符串格式输出,具体语法为: SELECT DATE_FORMAT(date_column, format_string) FROM table_name 其中,date_column参…

    database 2023年5月22日
    00
  • 在Ubuntu/Linux环境下使用MySQL开放/修改3306端口和开放访问权限

    下面是在Ubuntu/Linux环境下使用MySQL开放/修改3306端口和开放访问权限的完整攻略: 修改MySQL配置文件 在Linux系统中,MySQL的配置文件通常是/etc/mysql/mysql.conf.d/mysqld.cnf,我们需要修改该文件中的bind-address配置项。首先,使用任意文本编辑器打开该文件。 sudo nano /et…

    database 2023年5月22日
    00
  • CouchDB 和 MongoDB 的区别

    CouchDB和MongoDB是两种常见的NoSQL数据库,在功能、性能、架构等方面有一些不同。下面是CouchDB和MongoDB的详细对比: 功能 数据模型:CouchDB采用了文档导向的数据模型,MongoDB采用了类似于BSON(Binary JSON)的数据模型。文档型数据库的数据结构更加灵活,而BSON的数据结构更加紧凑。 数据查询:CouchD…

    database 2023年3月27日
    00
  • oracle通过存储过程上传list保存功能

    下面我将给出详细讲解“Oracle通过存储过程上传List保存功能”的完整攻略。 1、数据库准备 首先需要创建一个数据库和表来存储上传数据,假设我们创建的表名为list_data,表结构如下: CREATE TABLE list_data( id NUMBER NOT NULL, name VARCHAR2(100) NOT NULL, age NUMBER…

    database 2023年5月21日
    00
  • SQL 列举约束

    以下是详细讲解SQL列举约束的完整攻略。 什么是SQL约束 在数据库中,约束用于限制表中列的数据。通过在列上定义规则,可以保证数据的完整性和准确性。SQL支持许多不同类型的约束,包括主键、外键、唯一、检查和默认约束。 SQL列举约束类型 以下是SQL中常见的列举约束类型: 主键约束(PRIMARY KEY) 主键是一列或一组列,其值唯一标识表中的每一行数据。…

    database 2023年3月27日
    00
  • MySQL数据库大小写敏感的问题

    MySQL数据库大小写敏感的问题是一个常见的问题,下面是针对这个问题的一些攻略。 1. MySQL数据库大小写敏感的原因 MySQL数据库的表名、列名、索引名、触发器名、存储过程等标识符在创建时是否使用了引号会影响它们的大小写和是否敏感。使用引号时,标识符大小写敏感,不使用引号时,标识符大小写不敏感。 如果使用引号来定义标识符,MySQL将严格区分大小写,如…

    database 2023年5月22日
    00
  • MySQL默认字符集设置详情

    MySQL 是一个常用的关系型数据库管理系统,它支持多种字符集。MySQL 默认使用 Latin1 和 UTF8 两种字符集,具体使用哪一种是根据 MySQL 的版本和操作系统决定的。下面将详细讲解 MySQL 默认字符集设置的相关问题,具体内容如下: 查看默认字符集 可以使用以下命令查看 MySQL 数据库服务器的默认字符集: SHOW VARIABLES…

    database 2023年5月18日
    00
  • SQL Server存储过程中使用表值作为输入参数示例

    下面我将为你详细讲解“SQL Server存储过程中使用表值作为输入参数示例”的完整攻略,包含以下内容: 什么是表值参数 如何创建表值参数 如何在存储过程中使用表值参数 示例1:使用表值参数查询指定日期范围内的订单信息 示例2:使用表值参数批量插入数据到数据库中 1. 什么是表值参数 表值参数(table valued parameter,TVP)是SQL …

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部