六、spring之jdbcTemplate
一、JdbcTemplate 概述
它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。spring框架为我们提供了很多 的操作模板类。
1操作关系型数据的:
JdbcTemplate
HibernateTemplate
> 2操作nosql数据库的:
RedisTemplate
操作消息队列的: JmsTemplate
我们今天的主角在spring-jdbc-5.0.2.RELEASE.jar 中,我们在导包的时候,除了要导入这个 jar包外,还需要导入一个spring-tx-5.0.2.RELEASE.jar(它是和事务相关的)。
二、JdbcTemplate 的简单应用
package cn.it.dao.impl;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import cn.it.dao.AccountDao;
import cn.it.domain.Account;
import cn.it.domain.AccountMapper;
/**
* 账户持久层
* JdbcDaoSupport:spring为我们封装的一个通用的dao实现类,提供了JdbcTemplate成员变量及get、set方法
* 通过继承JdbcDaoSupport,
* 直接使用父类定义好的jdbcTemplate成员变量,减少dao的代码冗余(通过get方法获取:getJdbcTemplate())
*
*/
public class AccountDaoImpl2 extends JdbcDaoSupport implements AccountDao {
/**
* 一、增删改(例:修改账户)
* update:增删改的方法
* jdbcTemplate.update(sql, args)
* 1参数1:sql语句
* 2参数2:参数列表
*
*
*/
@Override
public int updateAccount(Account account) {
int row = getJdbcTemplate().update("update account set money = ? where name=?", account.getMoney(),
account.getName());
return row;
}
/**
* 二、结果集为list的查询(查询所有账户))
* 1.query:查询结果为list集合
* jdbcTemplate.query(sql, rowMapper, args)
* 2参数1:sql语句
* 3参数2:查询封装结果集对象,实现了RowMapper接口的自定义实现类
* 4参数3:参数列表
*/
public List<Account> findAll() {
List<Account> alist = getJdbcTemplate().query("select * from account ", new AccountMapper());
return alist;
}
/**
* 三、单结果集查询(通过名字查找账户)
* 1.queryForObject:查询结果为一个对象
* jdbcTemplate.queryForObject(sql, rowMapper, args)
* 2.参数1:sql语句
* 3.参数2:RowMapper 查询结果集
* 4.参数3:args 参数列表
*/
@Override
public Account findAccountByName(String name) {
Account account = getJdbcTemplate().queryForObject("select * from account where name =? ", new AccountMapper(),
name);
return account;
}
/**
* 四、结果集一行一列的查询(查询表中账户数量)
* 1.queryForObject:查询结果为一行一列
* jdbcTemplate.queryForObject(sql, requiredType, args)
* 2参数1:sql语句
* 3参数2:查询结果的字节码(一般为基本类型,long,int,String等)
* 4参数3:参数列表
*/
public Long findCount() {
Long row = getJdbcTemplate().queryForObject("select Count(*) from account ", Long.class);
return row;
}
}
/**
* 在不继承JdbcDaoSupport的情况下,我们每个dao实现类都需要定义一个JdbcTemplate成员变量,
* 并提供set方法,来供CURD的方法使用。
* */
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
配置文件(这里我们采用spring内置的连接池)
<!-- 创建Dao交给spring管理 -->
<bean id="accountDao" class="cn.it.dao.impl.AccountDaoImpl2">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!-- 配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 注入基本元素,配置spring内置连接池对象 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 基本元素赋值 -->
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///springdb"></property>
</bean>
我们也可以配置c3p0连接池
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="root"></property>
<property name="password" value="111111"></property>
<property name="jdbcUrl" value="jdbc:mysql:///springdb"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
</bean>
当然也可以使用dbcp
<!-- 注入基本元素,配置dbcp连接池对象 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 基本元素赋值 -->
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///springdb"></property>
</bean>