Spring配置JDBC,使用JdbcTemplate套件和Druid套件

发布于:2025-08-06 ⋅ 阅读:(18) ⋅ 点赞:(0)

Spring配置JDBC,使用JdbcTemplate套件和Druid套件

摘要:本文介绍了Spring框架中配置JDBC的两种方式,使用JdbcTemplate和Druid数据源。通过XML文件配置数据源和JdbcTemplate,包括基础配置和通过.properties文件动态加载配置的进阶方法。提供了Druid连接池的可选参数配置示例,并展示了如何使用JdbcTemplate执行CRUD操作,包括插入数据、查询单行结果和查询列表结果。查询部分演示了RowMapper的标准写法和lambda简化写法,以及使用BeanPropertyRowMapper自动映射列名和属性名的方法。

XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置Spring的JDBC模板 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_ioc_xml_practice_02?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <!-- 可选配置 -->
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="20"/>
        <property name="minIdle" value="5"/>
        <property name="maxWait" value="60000"/>
    </bean>
<!--    配置-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
        <!-- 可选配置 -->
        <property name="fetchSize" value="100"/>
        <property name="maxRows" value="1000"/>
        <property name="queryTimeout" value="30"/>
    </bean>

<!--    _______________________________________________________________________________________- -->
<!--    进阶-->
<!--    读取 .properties文件配置信息 然后 value中使用 value = "${key}" 的格式,动态配置-->
    <!--导入:       xmlns:context="http://www.springframework.org/schema/context"-->
<!--    多个配置文件 用逗号分割 classpath:jdbc.properties,classpath:jdbc.properties-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource">

        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.jdbcurl}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

    </bean>
</beans>

properties文件配置

jdbc.jdbcurl = jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC
jdbc.username = root
jdbc.password = 123456
jdbc.driverClassName = com.mysql.cj.jdbc.Driver

Test方法

    /**
     * 通过ioc容器读取配置的JdbcTemplate组件
     */
    @Test
    public void testForIoC() {
        // 1.创建ioc容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-01.xml");
        // 2. 获取JdbcTemplate组件
        JdbcTemplate jdbcTemplate = applicationContext.getBean("dataSource1", JdbcTemplate.class);

        // 3. 进行数据库的curd动作
        int rows = jdbcTemplate.update("INSERT INTO test(name,age,class) values (?,?,?)", "张三", 18, "A1");
        System.out.println(rows);

        /**
         * 查询 返回单行值
         * 参数1:sql语句,可以使用?
         * 参数2:RowMapper 列名和属性名的映射器接口
         * 参数3:sql语句的参数
         */
        String sql = "SELECT name,age,class FROM test where name = ?";
        // 标准写法  注:RowMapper 实际开发中推荐使用BeanPropertyRowMapper"
        Student student2 = jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                // rs 结果集
                // rowNum 行数
                // rs 结果集中获取列的值,赋值给实体类对象
                Student student = new Student();
                student.setName(rs.getString("name"));
                student.setAge(rs.getInt("age"));
                student.setClasses(rs.getString("class"));
                return student;
            }
        }, "张三");
        // lambda简化版
        Student student1 = jdbcTemplate.queryForObject(sql, (rs, rowNum) -> {
            // rs 结果集
            // rowNum 行数
            // rs 结果集中获取列的值,赋值给实体类对象
            Student student = new Student();
            student.setName(rs.getString("name"));
            student.setAge(rs.getInt("age"));
            student.setClasses(rs.getString("class"));
            return student;
        }, "张三");
//        查询所有学生的信息
        sql = "SELECT name,age,class as classes FROM test";

//        BeanPropertyRowMapper 是 RowMapper 的实现类 会自动映射列名跟属性名,要求列名跟属性名一致,不一致,自己起别名
        List<Student> studentList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
    }

网站公告

今日签到

点亮在社区的每一天
去签到