Spring的JDBC模板的使用
Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。Spring对持久层也提供了解决方案:ORM模块和JDBC的模板。
Spring提供了很多的模板用于简化开发
JDBC模板使用
创建项目,导入jar包
创建数据库和表
create database spring4_day03;
use spring4_day03;
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
使用JDBC模板 保存数据
/**
* JDBC模板的使用
*/
public class JdbcDemo1 {
@Test
// jdbc模板的使用类似于Dbutils.
public void demo1(){
// 创建连接池:
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring4_day03");
dataSource.setUsername("root");
dataSource.setPassword("abc");
// 创建jdbc模板
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
jdbcTemplate.update("insert into account values (null,?,?)", "赵冠希",10000d);
}
}
将数据库连接池和模板交给Spring管理
引入dbcp c3p0 连接池 依赖jar包
配置配置文件
Spring的配置文件
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置Spring的内置的连接池======================== --> <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///spring4_day03"/> <property name="username" value="root"/> <property name="password" value="abc"/> </bean> --> <!-- 配置DBCP连接池=============================== --> <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///spring4_day03"/> <property name="username" value="root"/> <property name="password" value="abc"/> </bean> --> <!-- 引入属性文件================================== --> <!-- 第一种方式通过一个bean标签引入的(很少) --> <!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"/> </bean> --> <!-- 第二种方式通过context标签引入的 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池=============================== --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置Spring的JDBC的模板========================= --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
jdbc的配置文件
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///spring4_day03 jdbc.username=root jdbc.password=abc
增删改
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class JdbcDemo2 { @Resource(name="jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test // 保存操作 public void demo1(){ jdbcTemplate.update("insert into account values (null,?,?)", "何菊花",10000d); } @Test // 修改操作 public void demo2(){ jdbcTemplate.update("update account set name = ? ,money = ? where id = ?", "何巨涛",2000d,6); } @Test // 删除操作 public void demo3(){ jdbcTemplate.update("delete from account where id = ?", 6); } }
查询单个字段
@Test // 查询操作: public void demo4(){ String name = jdbcTemplate.queryForObject("select name from account where id = ?", String.class, 5); System.out.println(name); }
统计查询
@Test // 统计查询 public void demo5(){ Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class); System.out.println(count); }
查询单个对象或多个对象,先要写一个封装数据的类,实现spring 提供的接口RowMapper<>
class MyRowMapper implements RowMapper<Account>{ @Override public Account mapRow(ResultSet rs, int rowNum) throws SQLException { Account account = new Account(); account.setId(rs.getInt("id")); account.setName(rs.getString("name")); account.setMoney(rs.getDouble("money")); return account; } }
@Test // 封装到一个对象中 public void demo6(){ Account account = jdbcTemplate.queryForObject("select * from account where id = ?", new MyRowMapper(), 5); System.out.println(account); } @Test // 查询多条记录 public void demo7(){ List<Account> list = jdbcTemplate.query("select * from account", new MyRowMapper()); for (Account account : list) { System.out.println(account); } }