`
123003473
  • 浏览: 1064267 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用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());

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

    /*

     * 这里会用到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://zmx.iteye.com/blog/373736
分享到:
评论

相关推荐

    使用Spring的NamedParameterJdbcTemplate完成DAO操作

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

    Spring对DAO的支持.doc

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

    org.springframework.orm.jar.zip

    3. JDBC抽象:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,它们是对JDBC的简单包装,降低了SQL操作的复杂性,提高了可读性和可维护性。 4. MyBatis集成:对于偏好XML或注解方式配置SQL的开发者,Spring...

    spring-jdbc-1.0.723.zip_daooperations.class_spring jdbc

    除了JdbcTemplate,Spring还提供了NamedParameterJdbcTemplate,它允许使用命名参数的SQL语句,使得SQL更易读,更安全,避免了SQL注入的问题。 在后台分页实现方面,Spring JDBC提供了便捷的分页查询功能。通过组合...

    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.jdbc-3.0.5.jar

    Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库操作的繁琐过程,如连接管理、事务处理和异常转换等。这一版本3.0.5的发布,进一步优化了性能和稳定性。 ...

    Spring 2.0 开发参考手册

    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. 在应用...

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

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

    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 API

    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+jdbc整合jar.rar

    当Spring与JDBC结合使用时,Spring提供了高级抽象,如JdbcTemplate和NamedParameterJdbcTemplate,可以更方便地执行SQL查询,处理结果集,并管理数据库连接。 压缩包中的文件如下: 1. spring.jar:这是Spring框架...

    spring chm文档

    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支持DAO需要的jar包

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

    JDBCTemplate+JavaPOJO实现通用DAO

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

    spring考试通过必备材料.docx

    - 另外,Spring也支持直接使用JDBC进行数据操作,通过`JdbcTemplate`或`NamedParameterJdbcTemplate`提供便利。 这些内容构成了Spring SSH框架的基础,理解并熟练掌握这些知识点对于通过Spring相关的考试至关重要...

    spring-framework-3.2.4.RELEASE.rar

    4.2 ORM集成:包括Hibernate、MyBatis等,Spring通过DAO模板类简化了ORM的使用。 4.3 JPA支持:通过EntityManagerFactory和EntityManager进行对象/关系映射操作。 4.4 事务管理:声明式事务管理通过@Transactional...

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

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

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    Spring mvc + Spring + Spring jdbc 整合 demo.rar

    4. 数据访问对象(DAO):负责与数据库的交互,使用Spring JDBC模板执行SQL查询和更新操作。 5. 模型(Model):数据对象,用于在服务层和视图层之间传递数据。 6. 视图:可能包含JSP页面或其他模板技术,用于展示...

    spring-framework-reference4.1.4

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

Global site tag (gtag.js) - Google Analytics