一、简介
SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate,所以NamedParameterJdbcTemplate
能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要
增加了JDK5.0的泛型技术和可变长度参数支持。
增加知识:(NameParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情它都能做.NameParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能)
simpleJdbcTemplate中有些方法不全,比如拿到主键的方法就没有,可以获取到NamedParameterJdbcTemplate
调用它里面的方法 getNamedParameterJdbcOperations()返回的是NamedParameterJdbcOperations其实现就是NamedParameterJdbcTemplate这个类
getJdbcOperations()返回的是JdbcOperation其实现就是JdbcTemplate
SqlParameterSource的两个主要实现MapSqlParameterSource和BeanPropertyParameterSource类,它的作用是将实例中的属性对应到sql中的命名参数上去;而ParameterizedBeanPropertyRowMapper做查询出来的结果映射到java类实例上去;
二、配置
和JdbcTemplate一样,SimpleJdbcTemplate也有3中配置方式:
第一种方式:我们可以在自己定义的DAO 实现类中注入一个DataSource 引用来完 成SimpleJdbcTemplate的实例化。也就是它是从外部“注入” DataSource 到DAO 中,然后 自己实例化SimpleJdbcTemplate,然后将DataSource 设置到SimpleJdbcTemplate对象中。
第二种方式: 在 Spring 的 IoC 容器中配置一个 SimpleJdbcTemplate的 bean,将 DataSource 注入进来,然后再把SimpleJdbcTemplate注入到自定义DAO 中。
第三种方式: Spring 提供了 org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport类 , 这 个 类 中 定 义 了 NamedParameterJdbcTemplate 属性,也定义了DataSource 属性,当设置DataSource 属性的时候,会创 建SimpleJdbcDaoSupport的实例,所以我们自己编写的DAO 只需要继承SimpleJdbcDaoSupport类, 然后注入DataSource 即可。提倡采用第三种方法。虽然下面的用法中采用了前两种方法
配置方法有3种:
1、
public class UserServiceImpl implements UserService {
private SimpleJdbcTemplate simpleJdbcTemplate;
public SimpleJdbcTemplate getSimpleJdbcTemplate () {
return simpleJdbcTemplate;
}
//注入方法1
public void setSimpleJdbcTemplate (SimpleJdbcTemplate simpleJdbcTemplate) {
this.simpleJdbcTemplate= simpleJdbcTemplate;
}
//其它方法这里省略……
}
spring配置文件为:
<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <property name = "dataSource" ref="dataSource"> </bean> <bean id="userService" class="com.hxzy.account.simpleJdbcTemplate.UserServiceImpl"> <property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"/> </bean>
方法2、
public class UserServiceImpl implements UserService {
private SimpleJdbcTemplate simpleJdbcTemplate;
//注入方法2
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate= new JdbcTemplate(dataSource);
}
//其它方法省略……
}
spring配置文件为:
<bean id="userService" class="com.hxzy.account.jdbcTemplate.UserServiceImpl"> <property name="dataSource" ref="dataSource"/> </bean>
方法3:继承SimpleJdbcDaoSupport,其内部有个namedParamterJdbcTemplate ,需要注入DataSource 属性来实例化。
public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {
@Override
public void save(User user) {
String sql = null;
this.getSimpleJdbcDaoSupport().update(sql);
}
//其它方法省略……
}
spring配置文件:
<bean id="userDao" class="com.hxzy.account.jdbcTemplate.UserDaoImpl"> <property name="dataSource" ref="dataSource"/> </bean>
三、使用
@Override
public void save(User user) {
String sql = "insert into tb_test1(id,username,password,sex) "
+ "values (:id,:username,:password,:sex)";
this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
new BeanPropertySqlParameterSource(user));
}
@Override
public void update(User user) {
String sql = "update tb_test1 set username=:username,password=:password,sex=:sex where id=:id";
this.simpleJdbcTemplate.update(sql,
new BeanPropertySqlParameterSource(user));
}
public void deleteById(String id) {
String sql = "delete from tb_test1 where id=?";
this.simpleJdbcTemplate.update(sql, id);
}
public Object queryById(String id) {
String sql = "select * from tb_test1 where id=?";
return simpleJdbcTemplate.queryForObject(sql,
ParameterizedBeanPropertyRowMapper.newInstance(User.class), id);
}
public List<?> queryAll() {
String sql = "select * from tb_test1" ;
return this.simpleJdbcTemplate.query(sql,
ParameterizedBeanPropertyRowMapper.newInstance(clazz));
}
private List<User> queryEntityByExample(User user) {
String sql = "select * from tb_test1 where (username=:username or :username IS NULL) and (password=:password or :password IS NULL)";
return this.simpleJdbcTemplate.query(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class), new BeanPropertySqlParameterSource(user));
}