- 浏览: 842541 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
JdbcTemplate类声明了几个重载的query()模板方法来控制整个查询过程,就像进行更新数据操作一样,通过实现PreparedStatementCreator和PreparedStatementSetter接口,也可以覆盖语句创建任务。
1,用RowCallbackHandler提取数据
RowCallbackHandler是允许处理结果集当前行的主要接口,JdbcTemplate中的一个query()方法能替你迭代结果集,并为每一行调用RowCallbackHandler,因此,对于返回结果集中的每一行,processRow()方法都会被调用一次
public class JdbcUserDao implements UserDao{ public User findByUserId(int id){ String sql ="select *from user where id =?"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); final User user = new User(); jdbcTemplate.query(sql,new Objcet[]{id},new RowCallbackHandler(){ public void processRow(ResultSet rs)throws Exception{ user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); } }); return user; } }
由于最多只能返回SQL查询结果中的一行记录,因此可以以局部变量的形式创建一个User对象,并从结果集中提取数据来设置它的属性,对于不止一行的结果集来说,应该将对象收集成一个列表,
2,用RowMapper提取数据
RowMapper比RowCallbackHandler更为通用,它的目的是将结果集的单独一行映射到自定义的对象上,因此它适用于单行和多行结果集,从重用的角度考虑,最好将RowMapper接口实现为一般通用的类,而非内部类,在这个接口的mapRow()方法中,必须构建表示行数据的对象,并将它作为方法的返回值
public class UserRowMapper implements RowMapper{ public Object mapRow(ResultSet rs ,int rowNum)throws SQLException{ User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } }
RowMapper可以用于单行或者多行的结果集,比如在像findByUserId()这样的方法中,查询唯一对象时,必须调用JdbcTemplate的queryForObject()方法,
public class JdbcUserDao implements UserDao{ ........... public User findByUserId(int id){ String sql ="select *from user where id =?"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); User user =(User)jdbcTemplate.queryForObject(sql,new Object[]{id},new UseRowMapper()); return user; } }
spring2.5提供了一个更便利的RowMapper实现--BeanPropertyRowMapper,它可以自动的将某一行数据映射到指定类的新实例中,它首先将这个类实例化,然后通过名称匹配的方法,将每个列的值都映射到属性中。
public class JdbcUserDao implements UserDao{ public User findByUserId(int id){ String sql ="select *from user where id = ?"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); User user =(User)jdbcTemplate.queryForObject(sql,new Object[] {id},BeanPropertyRowMapper.newInstance(User.class)); return user; } }
3,查询多行
现在我们来看看如何查询一个带有多行记录的结果集。
public interface UserDao{ public List<User> findAll(); }
没哟RowMapper的帮助,仍然可以调用queryForList()方法,传递一个sql语句,返回的结果集是Map列表,每个Map保存结果集中的一个行,用列名称做键。
public class JdbcUserDao implements UserDao{ public List<User> findAll(){ String sql ="select *from user"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); List<User> lists = new ArrayList<User>(); List<Map> rows = jdbcTemplate.queryForList(sql); for(Map row: rows){ User user = new User(); user.setId((int)row.get("id")); user.setUsername((String)row.get("username")); user.setPasword((String)row.get("password")); lists.add(user); } return lists; } }
通过下面的代码测试findAll方法
public class Main{ public static void main(String[] args){ UserDao userdao = new JdbcUserDao(); List<User> user =userdao.findAll(); for(User u: user){ System.out.println("id :"+user.getId()); System.out.println("username :"+user.getUsername()); System.out.println("password :"+user.getPassword()); } } }
如果使用RowMapper对象映射结果对象中的数据行,就能从query()方法中得到一个映射对象的列表,
public class JdbcUserDao implements UserDao{ public List<User> findAll(){ String sql = "select *from user"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); List<User> users = jdbcTemplate.query(sql,BeanPropertyRowMapper.newInstance(User.class)); return users; } }
4,查询单值
最后,看看如何查询单行和单列的结果集。
public interface UserDao{ public String getUsername(int id); public int countAll(); }
要查询单独的字符串值,可以调用重载的queryForObject方法,对于整型值而言,可以调用queryForInt()方法,
public class JdbcUserDao implements UserDao{ public String getUsername(int id){ String sql = "select username from user where id =?"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); String username =(String)jdbcTempalte.queryForObject(sql,new Object[]{id},String.class); return username; } public int countAll(){ String sql ="select count(*) from user"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); int count = jdbcTemplate.queryForInt(sql); return count; } }
可以通过下面的代码测试上面的数据
public class Main{ public static void main(String[] args){ UserDao dao =new JdbcUserDao(); int count = dao.countAll(); System.out.println("user count :"+count); String username = dao.getUsername(1); System.out.println("username is "+ username); } }
发表评论
-
Spring的PropertyPlaceholderConfigurer应用
2014-01-02 14:43 8401. PropertyPlaceholderConfigur ... -
spring 发送MAILJavaMailSenderImpl
2014-01-02 14:32 901spring对mail的支持是org.springframe ... -
spring REST中的内容协商ContentNegotiatingViewResolver
2014-01-02 14:23 1694一.REST内容协商介绍 RESTfu ... -
Spring MVC异常处理
2014-01-02 14:13 479Spring3.0中对异常的处理方法一共提供了两种:一种是使 ... -
Spring AOP 的@Aspect (转)
2013-12-19 10:04 5705转自:http://blog.csdn.net/tangh ... -
spring @component的作用
2013-12-19 09:54 10011、@controller 控制器(注入服务) 2、@se ... -
Spring MVC性能提升
2013-12-18 18:06 7137这几天在做公司内部SpringMVC的培训,培训之余看了看大 ... -
Spring MVC简介
2013-08-27 20:09 986Spring MVC简介 1.Sp ... -
SpringMVC中HandlerInterceptorAdapter的使用
2013-08-27 20:04 1998一般情况下,对来自浏览器的请求的拦截,是利用Filte ... -
Spring注解_详解
2013-08-27 20:01 936spring注解 @Autowired 注释 将 ... -
SpringMVC方法返回值的学习(注解版)
2013-08-22 09:38 1439/** * 项目名称:Spring3mvc de ... -
spring中的Log4jConfigListener作用
2013-08-21 10:40 1380使用spring中的Log4jConfigListener ... -
srping 异常
2010-11-15 14:32 1230Spring数据访问的根异常是DataAccessExcep ... -
使用spring的jdbcTemplate-----将JDBC操作建模为细粒度的对象
2010-09-11 16:32 15301,更新操作对象 首先考虑如何将User插入操作建模为一个操 ... -
使用spring的jdbcTemplate-----使用具名参数
2010-09-11 15:01 3609在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限 ... -
使用spring的jdbcTemplate-----SimpleJdbcTemplate的使用
2010-09-11 12:39 59141,用简单的JDBC模板更新数据库 传统的Jdb ... -
使用spring的jdbcTemplate-----简化JdbcTemplate模板的创建
2010-09-10 20:41 2297每次使用的时候,都要创建一个JdbcTemplate新实例,这 ... -
使用spring的jdbcTemplate-----用jdbc模板跟新数据库
2010-09-09 23:21 45071,用语句创建器更新数据库第一个回调接口是PreparedSt ... -
spring中jdbcTemplate归纳2
2010-09-07 22:01 2169用语句创建器更新数据库第一个回调接口是PerparedStat ... -
spring中jdbcTemplate归纳1
2010-09-07 19:41 2911jdbcTemplate整理 为了实现基本的CRUD操作,s ...
相关推荐
1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...
标题 "jdbcTemplate-spring对jdbc的支持" 涉及到的是Spring框架中的一个核心组件——JdbcTemplate,它是Spring对Java数据库连接(JDBC)的一种封装,用于简化数据库操作。JdbcTemplate提供了一种模板方法模式,使得...
Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行、结果集处理等进行了抽象,使得开发者可以更专注于业务逻辑,而无需过多关注数据库访问的细节。同时,它还提供了事务...
`JdbcTemplate`是Spring提供的一种模板方法模式实现,它封装了JDBC的常用操作,如执行SQL查询、更新等,提供了异常转换和数据源管理等功能。通过使用`JdbcTemplate`,开发者可以编写出更简洁、更健壮的数据库访问...
Spring JDBC模块是Spring框架对Java数据库连接(JDBC)的一层抽象,它简化了数据库操作,通过提供模板类和 dao 支持来减少样板代码。Spring JDBC 提供了 JdbcTemplate 和 NamedParameterJdbcTemplate,这两个工具类...
Spring-JDBC通过提供模板类(如JdbcTemplate和NamedParameterJdbcTemplate)以及数据源管理,使得开发者能够更高效地执行SQL查询。 在博文链接中,作者可能分享了一个使用Spring-JDBC的实际示例,虽然具体内容未给...
1. **自动配置**: Spring Boot通过自动配置,可以快速设置数据源和JDBC模板。 2. **Repository接口**: 开发者只需定义Repository接口,Spring会自动提供实现,无需编写繁琐的DAO层代码。 3. **ORM支持**: 尽管不如...
1. **JdbcTemplate**:这是Spring JDBC的基础组件,它通过模板方法模式封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等。使用JdbcTemplate,开发者无需手动管理数据库连接、预编译语句、结果集转换等细节,...
SpringJdbcTemplate能够自适应多种数据库,这是因为它的底层使用了JDBC的规范,而不同的数据库厂商都实现了JDBC API。这使得你可以使用相同的代码来连接MySQL、Oracle、PostgreSQL等不同类型的数据库,只需更换相应...
通过使用模板方法设计模式,Spring-JdbcTemplate能够在不牺牲灵活性的同时,保证了代码的简洁性和可维护性。 接着,让我们来看看DataSourceTransactionManager,它是Spring提供的事务管理器,主要用于管理基于...
JdbcTemplate是Spring JDBC模块中的核心组件,它提供了一种模板化的JDBC操作方式,降低了数据库访问的复杂性,同时保持了良好的封装和异常处理机制。在使用Spring JDBC之前,我们需要确保引入了必要的jar包。这里...
Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...
1. `JdbcTemplate`:这是Spring JDBC的核心类,提供了模板方法来执行SQL查询、更新语句和存储过程。 2. `SimpleJdbcInsert`和`SimpleJdbcCall`:简化了插入操作和调用存储过程的过程。 3. `...
Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得开发者可以避免编写大量的JDBC模板代码。这个抽象层包括了事务管理、异常翻译和连接池集成等功能,提高了代码的可读性和可维护性。 2. **数据源注入** ...
Spring JDBC Template是Spring框架的一部分,它提供了一种简化数据库操作的方式,通过抽象出低级的JDBC细节,使开发者能够更高效、更安全地处理数据库交互。连接池是数据库资源管理的重要工具,它可以提高数据库访问...
4. **spring-jdbc-5.1.3.RELEASE.jar**:此包专注于数据库操作,提供了模板类如`JdbcTemplate`和`SimpleJdbcInsert`,使得数据库操作更加简洁,避免了手动管理连接和结果集。 5. **spring-aop-5.1.3.RELEASE.jar**...
在Spring框架中,JDBC模板(JdbcTemplate)是Spring对Java数据库连接(JDBC)API的一个强大封装,它简化了数据库操作,使开发者能够更专注于业务逻辑而不是底层的数据库交互细节。今天我们将深入探讨Spring的JDBC...
Spring JDBC模板类——`org.springframework.jdbc.core.JdbcTemplate`是Spring框架中的核心组件,它为Java开发者提供了一种方便、安全的方式来执行SQL语句,而无需直接管理数据库连接。`JdbcTemplate`通过抽象出低...
1. `JdbcTemplate`:这是Spring JDBC的核心,它提供了执行SQL语句的基本模板方法,如queryForList、update等,使得数据库操作变得更加简单。 2. `SimpleJdbcTemplate`:它是`JdbcTemplate`的一个简化版本,更易于...
Spring JDBC Template被用来简化数据库操作,它提供了一种模板方法模式,将SQL执行、结果集处理等细节进行了封装,使得开发者只需要关注SQL语句和处理结果即可。例如,登录验证可能涉及查询用户表,查找与输入用户名...