spring NamedParameterJdbcDaoSupport query相对于JdbcDaoSupport更加方便

可以利用NamedParameterJdbcDaoSupport 已经封装的NamedParameterJdbcTemplate方便的进行sql中参数的初始化工作。

相对于JdbcDaoSupport中封装的JdbcTemplate更加好用。

1.Dept

package cn.hxex.springcore.jdbc;

public class Dept {

    private Integer deptNo;
    private String dName;
    private String loc;

    public Integer getDeptNo() {
        return deptNo;
    }
    public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
    }
    public String getDName() {
        return dName;
    }
    public void setDName(String name) {
        dName = name;
    }
    public String getLoc() {
        return loc;
    }
    public void setLoc(String loc) {
        this.loc = loc;
    }

    public String toString() {
        StringBuffer buf = new StringBuffer();

        buf.append( "deptNo:\t" ).append( getDeptNo() ).append( "\t" );
        buf.append( "dName:\t" ).append( getDName() ).append( "\t" );
        buf.append( "loc:\t" ).append( getLoc() ).append( "\t" );

        return buf.toString();
    }
}

2.IDeptDao

package cn.hxex.springcore.jdbc;

import java.util.List;

public interface IDeptDao {

    public List getDepts();

    public List getDeptsByNo(int deptno);
}

3.DeptNamedDaoImp

package cn.hxex.springcore.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

public class DeptNamedDaoImp extends NamedParameterJdbcDaoSupport implements IDeptDao{

    @Override
    public List getDepts() {
        String sql = "SELECT deptno, dname, loc FROM dept";
        return super.getNamedParameterJdbcTemplate().query( sql, new HashMap(),  new DeptRowMapper() );
    }

    @Override
    public List getDeptsByNo(final int deptno) {
        final String sql = "SELECT deptno, dname, loc FROM dept where deptno=:deptno";
        Map<String,Object> paramMap = new HashMap<String,Object>();
        paramMap.put("deptno", deptno);
        return super.getNamedParameterJdbcTemplate().query( sql, paramMap,  new DeptRowMapper() );
    }

    class DeptRowMapper implements RowMapper {

        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            Dept dept = new Dept();
            dept.setDeptNo( new Integer( rs.getString(1) ) );
            dept.setDName( rs.getString( 2 ) );
            dept.setLoc( rs.getString( 3 ) );
            return dept;
        }

    }

}

4.JdbcNamedDaoSupportMain

package cn.hxex.springcore.jdbc;

import java.util.List;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class JdbcNamedDaoSupportMain {

    public static void main(String[] args) {

        ClassPathResource resource = new ClassPathResource("cn/hxex/springcore/jdbc/JdbcNamedDaoSupportBeans.xml");
        BeanFactory factory = new XmlBeanFactory(resource);

        IDeptDao dao = (IDeptDao)factory.getBean( "deptDao" );
        //List depts = dao.getDepts();
        List depts = dao.getDeptsByNo(10);

        for( int i=0; i<depts.size(); i++ ) {
            System.out.println( depts.get( i ) );
        }
    }
}

5.JdbcNamedDaoSupportBeans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <!--  初始化数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
      <property name="url">
        <value>jdbc:oracle:thin:@localhost:1521:XE</value>
      </property>
      <property name="username"><value>jeffrey</value></property>
      <property name="password"><value>jeffrey</value></property>
    </bean>

    <bean id="deptDao" class="cn.hxex.springcore.jdbc.DeptNamedDaoImp">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

spring参考文档:http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html

备注:以上部分代码来自陈天河编著的某书

时间: 2024-08-26 03:49:35

spring NamedParameterJdbcDaoSupport query相对于JdbcDaoSupport更加方便的相关文章

spring jdbcTemplate query

1. spring jdbcTemplate query需要实现mapRow方法 package com.cdv.apolloagent.jdbc.dao.impl; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowi

Spring data Query 使用 实现条件查询

第一种 根据方法命名规则自动生成基于一列查询等值查询 findBy 列名 例如: findByName(String name);基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name)基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(Stringusername, String password )第二种 不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者

Spring ORM+Hibernate?Out!换 Spring Data JPA 吧!

转载请注明出处:http://blog.csdn.net/anxpp/article/details/51415698,谢谢! 在一切开始之前,先举个简单的例子,以提高大家的兴致! 如果一张表user有三个字段,id.name和age,要查找指定姓氏在某年龄以上的user,在传统的Spring+Hibernate中,dao层我们是这样写的: UserDao: public interface UserDao{ List<User> findByNameLikeAndAgeGreaterThan

Spring中使用JdbcTemplate

软件152班杨锦宏 Spring中使用JdbcTemplate.JdbcDaoSupport和NamedParameterJdbcTemplate来操作数据库,但是JdbcTemplate最常用,最易用. jdbc.properties: user=root password=123 driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc\:mysql\:///spring?encoding\=UFT-8 initPoolSize=5 maxPoolSize

Flashback version/Transaction Query,FlashbackTable

Flashback version Query相对于Flashback Query 只能看到某一点的对象状态, Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内,记录是如何发生变化的. 根据这个历史,DBA就可以快速的判断数据是在什么时点发生了错误,进而恢复到之前的状态.先看一个伪列 ORA_ROWSCN. 所谓的伪列,就是假的,不存在的数据列,用户创建表时虽然没有指定,但是Oracle为了维护而添加的一些内部字段,这些字段可以像普通文件那样的使用

Spring Security调研记录【七】--核心模型与实现

网上有很多关于Spring Security文章中,都认为Spring Security(相对于shiro)过于复杂,个人认为复杂的是Spring Security的官方文档而不是Spring Security本身. Spring Security满足了用户认证与授权的几乎所有应用场景,在其核心模型下,扩展随心所欲! 本文将归纳出Spring Security的核心模型与实现. 一.核心模型 核心模型总结为如下三张图,Filter.Authentication.Access Spring Sec

EasyUi+Spring Data 实现按条件分页查询

Spring data 介绍 Spring data 出现目的 为了简化.统一 持久层 各种实现技术 API ,所以 spring data 提供一套标准 API 和 不同持久层整合技术实现 . 自己开发 Repository 只需要继承 JpaRepository 接口CrudRepository save. delete. deteleAll. findAll. findOne. countPagingAndSortingRepositoryfindAll(Sort) 基于排序的查询. fi

Spring 4与Struts 2项目基于XML的集成实战

Spring 4与Struts 2项目基于XML的集成实战 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs 为什么要写这篇Hello World级别的文章.大约十年前,我开始使用Spring 2和Struts 1开发Web应用,构建工具使用的是Ant.早些年,把多个框架集成在一起并不容易,各框架间的兼容性也没有现在这么好.不管怎么样,这些基础的框架伴随我们多年.如今十年过去了,沧海桑田,Spring框架和Struts框架都经过了无数

Spring JDBC查询返回对象代码跟踪

在封装方法的时候突然发现通过 ResultSetMetaData的getColumnCount()获取到的列明会多一列(ROWSTAT),而且每次的值都是1,目前没有找到相关信息,在国外网站上看到有类似的情况,但是都没有人回答.于是想到spring 的JDBC部分是怎么实现映射的,于是通过spring的源代码发现了大致的流程: (这里先说明一下自己得到收获:spring的query查询返回对象T的方法是首先获取要返回对象的所有的writeMethod,也就是set方法,然后存放在一个Proper