zoukankan      html  css  js  c++  java
  • jdbcTemplate学习(四)

    前面三节讲了jdbcTemplate的使用,这一节讲解NamedParameterJdbcTemplate的使用方法:

    NamedParameterJdbcTemplate类是基于JdbcTemplate类,NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干;NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。

    NamedParameterJdbcTemplate,主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

    spring配置jdbcTemplate:

    (1)第一步,spring提供了类org.springframework.jdbc.core.JdbcTemplate,所以使用bean注入数据源对象:

    <bean id="logJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="logDataSource" />
    </bean>

    (2)第二步,dao类实现类中使用注解将bean对象logJdbcTemplate注入到成员变量中:

    @Autowired
    protected JdbcTemplate logJdbcTemplate;

    spring配置NamedParameterJdbcTemplate:

    (1)第一步,spring提供了类org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate,所以使用bean注入数据源对象,不过这里是使用构造器注入的:

    <bean id="logNamedJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="logDataSource"></constructor-arg>
    </bean>

    (2)第二步,dao类实现类中使用注解将bean对象logNamedJdbcTemplate注入到成员变量中:

    @Autowired
    protected NamedParameterJdbcTemplate logNamedJdbcTemplate;

    @Test  
    public void testNamedParameterJdbcTemplate1() {  
    NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;  
    //namedParameterJdbcTemplate =  
    //    new NamedParameterJdbcTemplate(dataSource);  
    namedParameterJdbcTemplate =  
    new NamedParameterJdbcTemplate(jdbcTemplate);  
        String insertSql = "insert into test(name) values(:name)";  
        String selectSql = "select * from test where name=:name";  
        String deleteSql = "delete from test where name=:name";  
        Map<String, Object> paramMap = new HashMap<String, Object>();  
        paramMap.put("name", "name5");  
        namedParameterJdbcTemplate.update(insertSql, paramMap);  
        final List<Integer> result = new ArrayList<Integer>();  
    namedParameterJdbcTemplate.query(selectSql, paramMap,  
    new RowCallbackHandler() {  
            @Override  
            public void processRow(ResultSet rs) throws SQLException {  
                result.add(rs.getInt("id"));  
            }  
        });  
    Assert.assertEquals(1, result.size());  
    SqlParameterSource paramSource = new MapSqlParameterSource(paramMap);  
    namedParameterJdbcTemplate.update(deleteSql, paramSource);  
    }  

    接下来让我们分析一下代码吧:

    1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;

    2)insert into test(name) values(:name):其中“:name”就是命名参数;

    3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;

    4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;

    5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装java.util.Map。

    NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:

    1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;

    2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

    使用BeanPropertySqlParameterSource封装javaBean对象传递sql参数的例子如下:

    package cn.javass.spring.chapter7;  
    public class UserModel {  
        private int id;  
        private String myName;     
        //省略getter和setter       
    }  
    @Test  
    public void testNamedParameterJdbcTemplate2() {  
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;  
        namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);  
        UserModel model = new UserModel();  
        model.setMyName("name5");  
        String insertSql = "insert into test(name) values(:myName)";  
        SqlParameterSource paramSource = new BeanPropertySqlParameterSource(model);  
        namedParameterJdbcTemplate.update(insertSql, paramSource);  
    }  

    可以看出BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应才可以。

    本文参考来自:http://blog.csdn.net/dyllove98/article/details/7772470

  • 相关阅读:
    我的第一篇博客,简单介绍MarkDown的语法。
    js实现网页pdf打印
    spring与hibernate整合入门-----示例一:各自为政【第一天】
    思考记录
    hibernate入门---Hibernate查询方式(for循环、构造器、对象数组等)【第三天,相当于总结整合】
    hibernate入门---uuid.hex生成方式【依据机器标识等自生】【第二天】
    hibernate入门-------实例、increment生成方式【实例自增-避免使用】【第二天】
    Hibernate入门----几种主键ID生成方式及示例【第二天】
    bat入门-----attrib隐藏文件【第一天】
    bat入门-----依据ping状态判断ip【第一天】
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/7865232.html
Copyright © 2011-2022 走看看