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数据源的示例代码 - Python技术站

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

相关文章

  • mysql 8.0.18 mgr 搭建及其切换功能

    MySQL 8.0.18 MGR 搭建及其切换功能攻略 本文主要介绍如何在 CentOS 7 上搭建 MySQL 8.0.18 MGR 集群,并演示如何使用 MGR 进行集群节点的切换操作。以下是完整的攻略过程: 1. 安装 MySQL 8.0.18 使用 yum 命令安装 MySQL 8.0.18: sudo yum install mysql-commu…

    database 2023年5月22日
    00
  • Amazon CloudSearch和Amazon Redshift的区别

    Amazon CloudSearch和Amazon Redshift都是由Amazon Web Services(AWS)提供的云端服务,但它们的主要目的不同。在下面的对比中,我将详细介绍Amazon CloudSearch和Amazon Redshift的区别。 Amazon CloudSearch与Amazon Redshift的目的和用途 Amazon…

    database 2023年3月27日
    00
  • mysql下普通索引和唯一索引的效率对比

    下面是详细讲解“mysql下普通索引和唯一索引的效率对比”的完整攻略。 介绍 在MySQL中,普通索引和唯一索引都是提高检索效率的重要手段。普通索引可以让数据检索更快,而唯一索引则保证了列的唯一性、防止出现重复数据。两种索引在实际应用中各自有着各自的优势和劣势。本文将详细讲解它们的效率对比。 测试环境 本次测试的环境是: MySQL版本:8.0.22 数据库…

    database 2023年5月22日
    00
  • Java 如何通过JDBC 操作数据库

    JDBC 是Java 数据库连接,即 Java DataBase Connectivity。JDBC 可让Java 通过程序操作关系型数据库,可基于驱动程序实现与数据库的连接与操作。JDBC 有统一的API ,提供一致的开发过程。其功能强大,执行效率高,可处理海量数据。 开发准备 在Navicat 中新建一个数据库,注意字符集 的选择,如下图所示: 然后运行…

    MySQL 2023年4月11日
    00
  • mysql时间戳转成常用可读时间格式的两种方法

    下面我将详细讲解如何将 MySQL 的时间戳转换成常用的可读时间格式。我将介绍两种方法,分别是使用 MySQL 函数和使用 PHP 函数。 方法一:使用 MySQL 函数 MySQL 中有几个转换时间戳的函数,最常用的有 FROM_UNIXTIME 和 DATE_FORMAT,分别可以将时间戳转换成标准日期时间格式和自定义格式。 1. 用 FROM_UNIX…

    database 2023年5月22日
    00
  • 10个mysql中select语句的简单用法

    10个MySQL中SELECT语句的简单用法 MySQL的SELECT语句是最常用的SQL语句之一,用于从表中检索数据。以下是10个MySQL SELECT语句的简单用法。 1. 选择所有列 使用以下SELECT语句选择表中的所有列: SELECT * FROM tablename; *通配符表示所有列。 2. 选择特定列 使用以下SELECT语句选取特定列…

    database 2023年5月21日
    00
  • WinXP下的Apache-PHP-MySQL安装和配置

    WAMP=WIN+APACHE+MYSQL+PHP 在配置的时候我用了摆动工坊的方法,下面就我自己的实际情况根据自己的实践做相应修改,这是我经历了一次复制php.ini和相关dll文件成功之后然后再对这种方法进行测试的,方法是这一个较为简单,而且可移植性强,据说可以不用重装升级的…. 本文包含了在WinXP上基于Apache 2.2.13的PHP 5.3…

    MySQL 2023年4月13日
    00
  • MySQL变量的定义和赋值方法详解

    MySQL变量的定义和赋值方法如下: 1. 使用SET语句 定义一个变量并赋值: SET @变量名 = 值; 给变量赋新值: SET @变量名 = 新值; 2. 在SELECT语句中使用: 定义一个变量并赋值: SELECT 值 INTO @变量名; 给变量赋新值: SELECT 新值 INTO @变量名; 举例说明: 假设有一张学生表students,包含…

    MySQL 2023年3月10日
    00
合作推广
合作推广
分享本页
返回顶部