Spring配置JDBC,使用JdbcTemplate套件和Druid套件
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组件*/@Testpublic 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>() {@Overridepublic 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));}