`

【转】使用Spring的NamedParameterJdbcTemplate完成DAO操作

阅读更多

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

public Object queryForObject(String sql, Map paramMap, RowMapper rowMapper)

public Object queryForObject(String sql, SqlParameterSource paramSource, RowMapper rowMapper)

       SqlParameterSource的两个主要实现MapSqlParameterSource

       BeanPropertySqlParameterSource

public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)保存数据获得主键。 

实例说明:

/**

 * 一、NamedParameterJdbcTemplate提供了命名参数,用:x代替了?

 * NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource

 * map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key:后面的名称,value是你传的值

 * SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样

 

 * 二、使用KeyHolder keyholder=new GeneratedKeyHolder();

   namedjdbctemp.update(sql, ps,keyholder);这个参数可以获得主键生成值

 */

public class StuDaoImple implements StuDaointer{ 

    private NamedParameterJdbcTemplate namedjdbctemp;

 

    public StuDaoImple(){

       namedjdbctemp=new NamedParameterJdbcTemplate(SQLConnUtil.getDataSource());

    }// SQLConnUtilJDBC工具类,提供了得到数据源的静态方法

    /*

     这里会用到NamedParameterJdbcTemplate两个好处:

     * 1,不用一个个的为参数赋值。

     * 2,可以轻易的得到主键自动增长值

     */

    public void addStu(Stu stu) {

       String sql="insert into stu values(:sname,:ssex,:sbrith)";

       //:后面的名称必须和stu属性名称一样

       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

       KeyHolder keyholder=new GeneratedKeyHolder();

       namedjdbctemp.update(sql, ps,keyholder);

       //加上KeyHolder这个参数可以得到添加后主键的值

       int m=keyholder.getKey().intValue();

       System.out.println(m);

       //Map map=keyholder.getKeys();//这样可以得到联合主键的值

       //keyholder.getKeyList();//这样可以得到一些主主键值,若一次添加好几条记录

    }

    public int count() {

       String sql="select count(*) from stu";

       //可以通过NamedParameterJdbcTemplate得到JdbcTemplate

       int m=namedjdbctemp.getJdbcOperations().queryForInt(sql);

       return m;

    }

 

    /*

     这里会用到NamedParameterJdbcTemplate另一个好处:

     位置参数

     */

    public void delStu(int sid) {

       String sql="delete stu where s_id=:id";

       Map map=new HashMap();

       map.put("id", sid);

       namedjdbctemp.update(sql, map);

    }

    public List getAllStu() {

       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";

       List list=namedjdbctemp.getJdbcOperations().query(sql,new BeanPropertyRowMapper(Stu.class));

       return list;

    }

    public List getAllStu(Stu stu) {

       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";

       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

       return namedjdbctemp.query(sql, ps, new BeanPropertyRowMapper(Stu.class));

    }

    public Stu getOneStu(Stu stu) {

       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";

       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

       return (Stu)namedjdbctemp.queryForObject(sql, ps, new BeanPropertyRowMapper(Stu.class));

    }

    public String getStuName(Stu stu) {

       String sql="select s_name as sname from stu where s_name=:sname";

       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

       return (String)namedjdbctemp.queryForObject(sql, ps, String.class);

    }

    public void updStu(Stu stu) {

       String sql="update stu set s_name=:sname,s_sex=:ssex,s_brith=:sbrith where s_id=:sid";

       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

       namedjdbctemp.update(sql, ps);

    }

}

 

 

来自:http://hi.baidu.com/%C5%ED%BD%F0%BD%F0%BB%D4%BB%D4/blog/item/76e7ece269c2483fb9382051.html

 

分享到:
评论

相关推荐

    使用Spring的NamedParameterJdbcTemplate完成DAO操作

    本文将深入探讨如何使用Spring的`NamedParameterJdbcTemplate`类来实现高效的DAO(Data Access Object)操作。`NamedParameterJdbcTemplate`是Spring JDBC模块中的一个强大工具,它允许我们以更加清晰、安全的方式...

    Spring对DAO的支持.doc

    Spring通过JdbcTemplate和NamedParameterJdbcTemplate提供了一种更简洁、更安全的方式来执行JDBC操作。这些模板类封装了数据库连接的获取、关闭,以及异常处理,使得开发者无需关心繁琐的资源管理。此外,它们还提供...

    利用JUnit和Spring-test对SpringJDBC组件DAO层测试

    如果DAO方法涉及数据库操作,可以考虑使用Spring的`@Transactional`注解,确保测试后数据库状态回滚,避免影响其他测试。 对于SpringJDBC中的Druid数据源,它是一个高效、强大的连接池实现。在测试中,我们可以配置...

    经典spring关于关于dao模式的开发案例

    1. **JDBC模板**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate这两个工具类,它们简化了基于JDBC的数据库操作,自动处理了打开和关闭连接、事务管理等繁琐工作。 2. **Hibernate集成**:Spring也支持ORM...

    Spring支持DAO需要的jar包

    1. **Spring JDBC支持**:Spring通过JDBC抽象层提供了模板类JdbcTemplate和NamedParameterJdbcTemplate,它们封装了常见的JDBC操作,如执行SQL查询、更新、事务管理等,大大减少了手动处理结果集和异常的工作。...

    SpringDao模式实例

    在Spring框架中,DAO(Data Access Object)模式是将业务逻辑与数据操作解耦,使得代码更易于测试和维护。 Spring DAO模式的核心组件包括以下几个部分: 1. **JdbcTemplate**: Spring提供的一个核心模板类,用于...

    JDBCTemplate+JavaPOJO实现通用DAO

    6. **定制化操作**:虽然JDBCTemplate提供了很多通用功能,但有时仍需编写自定义SQL,这时可以使用`NamedParameterJdbcTemplate`,它支持参数化的SQL,使代码更加清晰。 7. **异常处理**:JDBCTemplate会自动处理...

    spring的增删改查

    Spring支持DAO模式,你可以创建DAO接口,然后实现这个接口以完成具体的数据操作。Spring的`HibernateTemplate`或`JpaTemplate`可以帮助你更方便地操作ORM框架,如Hibernate或JPA。 4. **Oracle数据库连接** 在...

    spring整合mysql的一些基本操作

    JdbcTemplate用于基本的SQL操作,而NamedParameterJdbcTemplate支持使用命名参数的SQL语句。 4. **普通模式的新增**:使用JdbcTemplate的`update`方法执行INSERT语句。例如: ```java jdbcTemplate.update(...

    使用Spring进行数据访问

    6. **DAO(Data Access Object)模式**:Spring推荐使用DAO模式来组织数据访问层,这样可以将业务逻辑和数据访问逻辑分离,提高代码的可测试性和可维护性。 7. **AOP(面向切面编程)**:Spring的AOP功能可用于实现...

    Spring mvc + Spring + Spring jdbc 整合 demo

    4. **DAO层**:DAO(Data Access Object)层负责与数据库的交互,通常使用Spring JDBC的Template类来执行SQL查询。这里可以找到与特定表操作相关的接口和实现。 5. **模型对象(Model)**:这些对象代表了数据库中...

    Java操作数据库Spring(2)

    4. **DAO层设计**:定义数据访问对象(DAO),这些对象将使用Spring提供的模板类来执行数据库操作。例如,你可以创建一个`UserDao`接口,然后使用`@Repository`注解标记实现类。 5. **Service层设计**:业务逻辑...

    Spring实现增删改查

    综上所述,这个项目涵盖了Spring框架的基础使用,包括依赖注入、数据库操作、事务管理、Web开发等多个方面,是学习和理解Spring框架的良好实践。通过分析和实践这个项目,开发者可以深入理解Spring的工作原理,并能...

    Spring数据访问对象框架入门

    Spring Data Access Object(DAO)框架是Spring生态体系中用于数据库交互的重要部分,它简化了数据访问层的实现,使得开发者可以更专注于业务逻辑,而不是底层数据库操作。本文将深入探讨Spring DAO框架的入门知识,...

    Spring mvc、 Spring、 Spring jdbc 整合实例源码

    5. **数据访问层(DAO)**:处理数据库操作,通常使用Spring JDBC或JPA(Java Persistence API)来实现。Spring JDBC通过JdbcTemplate或NamedParameterJdbcTemplate提供简洁的SQL执行方式。 6. **视图(View)**:...

    详尽的Spring2.0学习提纲

    1. Spring JDBC:理解JdbcTemplate和NamedParameterJdbcTemplate的使用,简化数据库操作。 2. 事务管理:讲解Spring的事务传播行为,配置事务管理器,以及基于注解的事务控制。 六、Spring整合其他技术 1. Spring与...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    spring-note spring 读书笔记

    3. **Spring与JDBC的整合**: Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作,避免了原始JDBC的繁琐。`spring_dao.txt`可能会讨论这些模板类的用法,包括如何执行SQL查询、事务管理等。 ...

    spring中使用JDBC

    其中,Spring提供的三个主要模板类——`JdbcTemplate`、`NamedParameterJdbcTemplate`和`SimpleJdbcTemplate`,极大地简化了数据库操作,减少了代码量,提高了代码的可读性和可维护性。 #### JdbcTemplate `...

Global site tag (gtag.js) - Google Analytics