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日

相关文章

  • Express作者TJ告别Node.js奔向Go

    Express作者TJ告别Node.js奔向Go 最近,Express.js的作者TJ Holowaychuk宣布放弃Node.js,改为使用Go语言来开发后端应用程序。这个消息一出,立刻引起了广泛关注和讨论。在本篇文章中,我们将详细讲解TJ向Go转换的完整攻略。 为什么TJ要放弃Node.js? 首先,我们需要了解TJ放弃Node.js背后的原因。在TJ发…

    database 2023年5月21日
    00
  • Linux如何处理文件已删除但空间不释放的问题

    在Linux系统下,当我们删除一个文件时,实际上只是删除了文件的指针,并没有真正的将内容清除,因此磁盘空间并没有完全释放。这个问题也称为“空间泄漏”(space leak)或“空洞”(hole)问题。另外,当删除一个打开的文件时,虽然文件的链接被删除,文件本身仍在磁盘上,直到占用该文件的所有文件描述符都被关闭才会真正删除。 下面是处理文件已删除但空间不释放问…

    database 2023年5月22日
    00
  • Ubuntu Mysql 5.7 datadir 数据目录的修改

    今天要修改一下Ubuntu下mysql 5.7 的数据目录,发现无论怎么折腾文件 /etc/mysql/my.cnf   重启后都无效,在网上查看的相关的文档,说是要修改apparmor的文件,借此整理了一下文档,将步骤写到下面。 系统的的版本信息: dc@dc-virtual-machine:~$ uname -a Linux dc-virtual-mac…

    MySQL 2023年4月16日
    00
  • suse11安装mysql5.7

    下载地址http://mirrors.sohu.com/mysql/MySQL-5.7/ 1、     wget -c  http://mirrors.sohu.com/mysql/MySQL-5.7/MySQL-server-5.7.23-1.sles11.x86_64.rpm             wget -c  http://mirrors.soh…

    MySQL 2023年4月13日
    00
  • MySQL查看用户权限的3种方法

    MySQL是一种关系型数据库管理系统,在使用MySQL时,我们有时需要查看某个用户的权限,以便进行修改、授权等操作,因此了解MySQL查看用户权限的方法非常重要。以下是详细说明: 通过show grants命令查看权限列表 show grants 命令用于查看当前用户的所有权限。如果想查看其他用户的权限,需要使用该用户的用户名和密码进行登录,再执行该命令。该…

    MySQL 2023年3月10日
    00
  • Oracle出现超出打开游标最大数的解决方法

    当Oracle数据库中打开的游标数超过了数据库的最大游标数限制时,就会出现“超出打开游标最大数”的错误。 常见的解决方法有以下几种: 方法一:增加最大游标数量 首先,需要查看当前最大游标数限制: SHOW parameter open_cursors; 然后,通过以下命令修改最大游标数量: ALTER SYSTEM SET open_cursors=1000…

    database 2023年5月21日
    00
  • 使用shell脚本每天对MySQL多个数据库自动备份的讲解

    下面是使用 shell 脚本每天对 MySQL 多个数据库自动备份的攻略。 1. 环境准备 在开始之前,我们需要确保以下条件已经具备:1. 服务器上安装了 MySQL 数据库;2. 已经编写好了备份脚本;3. 服务器上安装了 crontab 定时任务服务。 2. 编写备份脚本 备份脚本需要包含以下内容:1. 备份文件的保存路径;2. 备份引擎的选择;3. 备…

    database 2023年5月22日
    00
  • sql server如何利用开窗函数over()进行分组统计

    当我们需要对 SQL Server 数据库中的数据进行统计计算并按照一定的规则进行分组时,可以运用开窗函数 over()。over() 函数的作用是在查询结果集中为每一行计算指定的聚合函数,并且聚合函数的计算范围是针对整个数据集而不是单个分组的范围内。 此外,开窗函数 over() 还可以指定分区(partition by)和排序(order by)规则,进…

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