分享

Spring中SimpleJdbcTemplate的用法实例(三)

 凌氏 2014-06-10

一、简介

SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate,所以NamedParameterJdbcTemplate
能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要
增加了JDK5.0的泛型技术可变长度参数支持。

 

增加知识:(NameParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情它都能做.NameParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能)


simpleJdbcTemplate中有些方法不全,比如拿到主键的方法就没有,可以获取到NamedParameterJdbcTemplate
调用它里面的方法 getNamedParameterJdbcOperations()返回的是NamedParameterJdbcOperations其实现就是NamedParameterJdbcTemplate这个类
getJdbcOperations()返回的是JdbcOperation其实现就是JdbcTemplate
 
SqlParameterSource的两个主要实现MapSqlParameterSourceBeanPropertyParameterSource类,它的作用是将实例中的属性对应到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、

Java代码  收藏代码
  1. public class UserServiceImpl implements UserService {  
  2.   
  3.     private SimpleJdbcTemplate simpleJdbcTemplate;  
  4.       
  5.     public SimpleJdbcTemplate getSimpleJdbcTemplate () {  
  6.         return simpleJdbcTemplate;  
  7.     }  
  8.   
  9.                 //注入方法1     
  10.     public void setSimpleJdbcTemplate (SimpleJdbcTemplate simpleJdbcTemplate) {  
  11.         this.simpleJdbcTemplate= simpleJdbcTemplate;  
  12.     }  
  13.   
  14.                //其它方法这里省略……  
  15. }  

spring配置文件为:

Xml代码  收藏代码
  1. <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">  
  2.         <property name = "dataSource" ref="dataSource">  
  3. </bean>  
  4. <bean id="userService" class="com.hxzy.account.simpleJdbcTemplate.UserServiceImpl">  
  5.      <property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"/>  
  6. </bean>  

 

方法2、

Java代码  收藏代码
  1. public class UserServiceImpl implements UserService {  
  2.   
  3.         private SimpleJdbcTemplate simpleJdbcTemplate;  
  4.           
  5.         //注入方法2  
  6.         public void setDataSource(DataSource dataSource) {  
  7.                    this.simpleJdbcTemplate= new JdbcTemplate(dataSource);  
  8.         }  
  9.        
  10.        //其它方法省略……  
  11. }  

 

spring配置文件为:

Xml代码  收藏代码
  1. <bean id="userService" class="com.hxzy.account.jdbcTemplate.UserServiceImpl">  
  2.        <property name="dataSource" ref="dataSource"/>  
  3. </bean>  

 

方法3:继承SimpleJdbcDaoSupport,其内部有个namedParamterJdbcTemplate ,需要注入DataSource 属性来实例化。

Java代码  收藏代码
  1. public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {  
  2.   
  3.     @Override  
  4.     public void save(User user) {  
  5.         String sql = null;  
  6.         this.getSimpleJdbcDaoSupport().update(sql);  
  7.     }  
  8.         //其它方法省略……  
  9. }  

 

spring配置文件:

 

Xml代码  收藏代码
  1. <bean id="userDao" class="com.hxzy.account.jdbcTemplate.UserDaoImpl">  
  2.            <property name="dataSource" ref="dataSource"/>  
  3. </bean>  

 

 

三、使用

 

Java代码  收藏代码
  1. @Override  
  2.     public void save(User user) {  
  3.         String sql = "insert into tb_test1(id,username,password,sex) "  
  4.                 + "values (:id,:username,:password,:sex)";  
  5.         this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,  
  6.                 new BeanPropertySqlParameterSource(user));  
  7.     }  
  8.       
  9.     @Override  
  10.     public void update(User user) {  
  11.         String sql = "update tb_test1 set username=:username,password=:password,sex=:sex where id=:id";  
  12.         this.simpleJdbcTemplate.update(sql,  
  13.                 new BeanPropertySqlParameterSource(user));  
  14.     }  
  15.       
  16.     public void deleteById(String id) {  
  17.         String sql = "delete from tb_test1 where id=?";  
  18.         this.simpleJdbcTemplate.update(sql, id);  
  19.     }  
  20.       
  21.     public Object queryById(String id) {  
  22.         String sql = "select * from tb_test1 where id=?";  
  23.         return simpleJdbcTemplate.queryForObject(sql,  
  24.                 ParameterizedBeanPropertyRowMapper.newInstance(User.class), id);  
  25.     }  
  26.       
  27.     public List<?> queryAll() {  
  28.         String sql = "select * from tb_test1" ;  
  29.         return this.simpleJdbcTemplate.query(sql,  
  30.                 ParameterizedBeanPropertyRowMapper.newInstance(clazz));  
  31.     }  
  32.   
  33. private List<User> queryEntityByExample(User user) {  
  34.                String sql = "select * from tb_test1 where (username=:username or :username IS NULL) and (password=:password or :password IS NULL)";  
  35.                return this.simpleJdbcTemplate.query(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class), new BeanPropertySqlParameterSource(user));  
  36.  }  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多