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&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));
}