1。因为公司项目工程使用的是NamedParameterJdbcTemplate,所以对其进行研究
NamedParameterJdbcTemplate实现了接口NamedParameterJdbcOperations
NamedParameterJdbcTemplate.java
/** The JdbcTemplate we are wrapping */
//封装的jdbc模板
private final JdbcOperations classicJdbcTemplate;
/** Map of original SQL String to ParsedSql representation */
//对原始sql的一个缓存集合
private final Map parsedSqlCache = new HashMap();
//
public Object execute(String sql, SqlParameterSource paramSource, PreparedStatementCallback action)
throws DataAccessException {
return getJdbcOperations().execute(getPreparedStatementCreator(sql, paramSource), action);
}
说明:在这里参数sqlParameterSource是一个接口 ,抽象类AbstractSqlParameterSource 实现了SqlParameterSource 中的部分方法
public abstract class AbstractSqlParameterSource implements SqlParameterSource
setvalue抽象方法供用户自己去实现处理相关参数
protected abstract void setValues(PreparedStatement ps, LobCreator lobCreator)
AbstractSqlParameterSource 下有两个实现类BeanPropertySqlParameterSource和MapSqlParameterSource
你也可以不适用其子类,通过内部匿名类实现setValues方法处理参数就行,下面介绍其两个子类
1。BeanPropertySqlParameterSource通过一个普通的javabean对象构造BeanPropertySqlParameterSource对象
传进来的bean必须与参数名称相同
2。MapSqlParameterSource 通过传入一个hashMap构造一个参数源,或者通过调用其AddValue形成参数源
参数2abstractLobCreatingPreparedStatementCallback 实现了PreparedStatementCallback 回调接口
2abstractLobCreatingPreparedStatementCallback 通过 lobHandler构造实例
类如下
public abstract class AbstractLobCreatingPreparedStatementCallback implements PreparedStatementCallback {
并接也提供了 abstract void setValues(PreparedStatement ps, LobCreator lobCreator)抽象方法
第二个excute方法介绍
public Object execute(String sql, Map paramMap, PreparedStatementCallback action) throws DataAccessException {
return execute(sql, new MapSqlParameterSource(paramMap), action);
}
与第一个不同的是execute方法时第二个参数是一个map 他内不是通过调用第一个excute方法传递MapSqlParameterSource 也就是SqlParameterSource 的子类;
接下来看一下查询通过功能划分
第一组:
根据要查询的sql,参数源,结果集提取器进行查询下面这俩个第二个参数只不过是父子关系而已
接口ResultSetExtractor 中void processRow(ResultSet rs) throws SQLException;是为了获取结果集,对其进行处理
public Object query(String sql, SqlParameterSource paramSource, ResultSetExtractor rse)
throws DataAccessException {
return getJdbcOperations().query(getPreparedStatementCreator(sql, paramSource), rse);
}
public Object query(String sql, Map paramMap, ResultSetExtractor rse) throws DataAccessException {
return query(sql, new MapSqlParameterSource(paramMap), rse);
}
第二组:前俩个参数不在做介绍 只对第三个参数做介绍接口RowCallbackHandler
接口RowCallbackHandler 中只有一个
void processRow(ResultSet rs) throws SQLException;是为了获取结果集,对其进行处理
个人感觉RowCallbackHandler 与ResultSetExtractor 接口中的方法一样,这里可能实际使用中对其子类用的比较多吧
public void query(String sql, SqlParameterSource paramSource, RowCallbackHandler rch)
throws DataAccessException {
getJdbcOperations().query(getPreparedStatementCreator(sql, paramSource), rch);
}
public void query(String sql, Map paramMap, RowCallbackHandler rch) throws DataAccessException {
query(sql, new MapSqlParameterSource(paramMap), rch);
}
第三组 主要介绍一下第三个参数接口RowMapper 他的方法 bject mapRow(ResultSet rs, int rowNum)
处理完成后悔返回一个对象
public List query(String sql, SqlParameterSource paramSource, RowMapper rowMapper)
throws DataAccessException {
return getJdbcOperations().query(getPreparedStatementCreator(sql, paramSource), rowMapper);
}
public List query(String sql, Map paramMap, RowMapper rowMapper) throws DataAccessException {
return query(sql, new MapSqlParameterSource(paramMap), rowMapper);
}
分享到:
相关推荐
这个链接可能包含详细的解释和示例代码,帮助你深入学习如何在实际项目中使用Spring、Spring MVC、JdbcTemplate和NamedParameterJdbcTemplate。 总结一下,本话题涵盖了Spring框架的核心组件,特别是其在数据库操作...
1. Spring JDBC:理解JdbcTemplate和NamedParameterJdbcTemplate的使用,简化数据库操作。 2. 事务管理:讲解Spring的事务传播行为,配置事务管理器,以及基于注解的事务控制。 六、Spring整合其他技术 1. Spring与...
2. **Spring JDBC**和**MyBatis集成**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate简化数据库操作,同时支持与ORM框架如MyBatis的无缝集成,帮助我们更好地管理数据库访问。 3. **Spring Data**:这一...
Spring通过JdbcTemplate和NamedParameterJdbcTemplate提供了一种更加简洁和安全的方式来执行SQL语句,避免了手动管理连接、事务和异常处理。它简化了数据库操作,提高了代码的可读性和可维护性。 2. **day01_bean**...
6. **定制化操作**:虽然JDBCTemplate提供了很多通用功能,但有时仍需编写自定义SQL,这时可以使用`NamedParameterJdbcTemplate`,它支持参数化的SQL,使代码更加清晰。 7. **异常处理**:JDBCTemplate会自动处理...
在“onlineShop”例子中,可能会用到`JdbcTemplate`或者`NamedParameterJdbcTemplate`进行简单的SQL操作,也可以看到Repository接口的使用,通过DAO层进行数据访问。此外,`@Transactional`注解与数据库操作的结合,...
另外,Spring JDBC还提供了NamedParameterJdbcTemplate,这个类支持命名参数的SQL查询,使得代码更加可读。在源码中,可以发现其如何解析命名参数,将其转换为占位符,并在执行SQL时进行参数替换。 在学习Spring ...
1. **SQL注入防护**:SpringBoot提供了预编译SQL语句的能力,例如使用JdbcTemplate或NamedParameterJdbcTemplate,这可以防止基本的SQL注入攻击。另外,使用ORM框架如Hibernate时,它的参数绑定机制也能有效防止SQL...
此外,随着框架的发展,如Spring框架提供了JdbcTemplate和NamedParameterJdbcTemplate,它们进一步简化了JDBC的操作,减少了手动管理连接和处理结果集的繁琐工作。这些模板类可以帮助我们更安全、更高效地使用DAO。 ...
源码中可能会包含使用`JdbcTemplate`或`NamedParameterJdbcTemplate`的示例,以及MyBatis的相关配置和Mapper接口。 在企业级应用中,事务管理至关重要。Spring支持编程式和声明式事务管理。编程式事务管理需要在...
使用`JdbcTemplate`或`NamedParameterJdbcTemplate`,我们可以方便地执行SQL查询、更新等操作,同时它们提供了异常转换和自动资源关闭等功能,提高了代码的健壮性。 5. **后端开发** Spring Boot在后端开发中扮演...
2. JdbcTemplate与NamedParameterJdbcTemplate:学习使用Spring提供的模板类进行数据库操作。 3. Hibernate与MyBatis集成:理解ORM框架的工作原理,配置并使用Spring整合Hibernate或MyBatis。 第五天:Spring Boot...
5. **JDBC模板优化**:Spring的JdbcTemplate和NamedParameterJdbcTemplate进一步提升了数据库操作的便捷性,降低了SQL注入的风险。 6. **Spring Boot集成**:虽然Spring Boot不是Spring 4.x的一部分,但这个版本的...
在Spring中,JDBC被封装在`JdbcTemplate`或`NamedParameterJdbcTemplate`等类中,提供了一种更安全、更易于使用的API来执行SQL查询和更新。这使得数据库操作更加简单,减少了手动处理结果集和异常的可能性。 4. **...
Spring JDBC的主要组件包括JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate。 ### 2. JdbcTemplate使用 JdbcTemplate是Spring JDBC的核心,它提供了模板方法来执行SQL查询和更新。使用JdbcTemplate...
在数据库操作中,Spring的JdbcTemplate和NamedParameterJdbcTemplate提供了简洁的API,用于执行SQL查询和更新。它们将原始的JDBC操作进行了封装,使得开发者能以更加面向对象的方式处理数据,避免了手动处理结果集和...
7. **Spring JdbcTemplate和NamedParameterJdbcTemplate**: Spring提供的这两个模板类简化了数据库操作,它们与DataSource结合使用,可以实现无侵入式的数据库访问,降低了SQL注入的风险。 通过阅读《学习Spring...
在IT行业中,数据库操作是应用程序不可或缺的一部分,而存储过程作为数据库中的预编译代码块,可以提高性能并简化复杂的操作。Spring和Hibernate是Java开发中常用的两个框架...希望这个详尽的解释对你的学习有所帮助。
`JdbcTemplate` 和 `NamedParameterJdbcTemplate` 提供了简化 JDBC 操作的接口,而 `HibernateTemplate` 和 `HibernateJpaDialect` 用于整合 Hibernate ORM。 6. **事务管理** Spring 的事务管理机制使应用能够跨...