- 浏览: 830431 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
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 8131. PropertyPlaceholderConfigur ... -
spring 发送MAILJavaMailSenderImpl
2014-01-02 14:32 868spring对mail的支持是org.springframe ... -
spring REST中的内容协商ContentNegotiatingViewResolver
2014-01-02 14:23 1666一.REST内容协商介绍 RESTfu ... -
Spring MVC异常处理
2014-01-02 14:13 459Spring3.0中对异常的处理方法一共提供了两种:一种是使 ... -
Spring AOP 的@Aspect (转)
2013-12-19 10:04 5659转自:http://blog.csdn.net/tangh ... -
spring @component的作用
2013-12-19 09:54 9751、@controller 控制器(注入服务) 2、@se ... -
Spring MVC性能提升
2013-12-18 18:06 7105这几天在做公司内部SpringMVC的培训,培训之余看了看大 ... -
Spring MVC简介
2013-08-27 20:09 964Spring MVC简介 1.Sp ... -
SpringMVC中HandlerInterceptorAdapter的使用
2013-08-27 20:04 1975一般情况下,对来自浏览器的请求的拦截,是利用Filte ... -
Spring注解_详解
2013-08-27 20:01 912spring注解 @Autowired 注释 将 ... -
SpringMVC方法返回值的学习(注解版)
2013-08-22 09:38 1410/** * 项目名称:Spring3mvc de ... -
spring中的Log4jConfigListener作用
2013-08-21 10:40 1361使用spring中的Log4jConfigListener ... -
srping 异常
2010-11-15 14:32 1205Spring数据访问的根异常是DataAccessExcep ... -
使用spring的jdbcTemplate-----将JDBC操作建模为细粒度的对象
2010-09-11 16:32 14861,更新操作对象 首先考虑如何将User插入操作建模为一个操 ... -
使用spring的jdbcTemplate-----使用具名参数
2010-09-11 15:01 3582在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限 ... -
使用spring的jdbcTemplate-----SimpleJdbcTemplate的使用
2010-09-11 12:39 58911,用简单的JDBC模板更新数据库 传统的Jdb ... -
使用spring的jdbcTemplate-----简化JdbcTemplate模板的创建
2010-09-10 20:41 2265每次使用的时候,都要创建一个JdbcTemplate新实例,这 ... -
使用spring的jdbcTemplate-----用jdbc模板跟新数据库
2010-09-09 23:21 44791,用语句创建器更新数据库第一个回调接口是PreparedSt ... -
spring中jdbcTemplate归纳2
2010-09-07 22:01 2146用语句创建器更新数据库第一个回调接口是PerparedStat ... -
spring中jdbcTemplate归纳1
2010-09-07 19:41 2878jdbcTemplate整理 为了实现基本的CRUD操作,s ...
相关推荐
SSH笔记-Spring JdbcTemplate,使用JdbcTemplate对数据库进行操作,使用具名参数和JDBC模板,简化操作
Spring jdbcTemplate 是一个强大的 JDBC 模板,提供了简洁的方式来访问数据库。在此文档中,我们将介绍如何使用 Spring jdbcTemplate 调用 Oracle 存储过程返回 List 集合。 Oracle 存储过程 ------------- 在 ...
使用spring jdbc template简化jdbc数据库操作实例代码,简化操作,包括详细测试例子。
JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法:execute 方法、update 方法及 batchUpdate ...
在本文中,我们将详细介绍 Spring 是如何接管 JDBC 的,并提供一个简单的示例来展示如何使用 Spring 来访问数据库。 首先,让我们来介绍一下 JDBC 是什么。JDBC(Java Database Connectivity)是 Java 语言中用来...
使用Spring提供的JdbcTemplate模板类实现对数据库的更新和查询操作、使用JdbcTemplate实现具体的DAO类、使用支持具名参数的JDBC模板类对数据库进行操作
spring boot 的项目,该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
使用JDBC模板的Spring MVC CRUD这是一个简单的SPRING MVC项目,其中我使用了Spring MVC,JDBC模板进行数据操作,而在数据库方面,我使用了MYSQL数据库。脚步- 1.创建名称为“ usersdb”的MYSQL数据库2.使用以下命令...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
Enjoy(模板引擎),JdbcTemplate(通用JDBC操作数据库),JPA(强大的ORM框架),强大的ORM框架(强大的ORM框架),通用Mapper(快速操作Mybatis Mybatis),PageHelper(通用的Mybatis分页插件),mybatis-plus...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
我们用它来找出在开发时哪个数据库层是最好的我不是在比较性能,而是在日常任务中如何使用这些框架。 我准备了一些常见的方案,通常需要这些方案来实现以数据为中心的应用程序,然后使用各种非JPA DB层框架来实现...
│ 07 数据访问:如何使用 JdbcTemplate 访问关系型数据库?.mp4 │ 13 服务调用:如何正确理解 RetTemplate 远程调用实现原理?.mp4 │ 20 服务监控:如何使用 Actuator 组件实现系统监控?.mp4 │ 22 运行管理...
Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...
使用Spring JDBC初始化数据库 iv. 68.4. 初始化Spring Batch数据库 v. 68.5. 使用一个高级别的数据迁移工具 i. 68.5.1. 启动时执行Flyway数据库迁移 ii. 68.5.2. 启动时执行Liquibase数据库迁移 viii. 69. 批处理...
第11章 使用Spring JDBC访问数据库 11.1 使用Spring JDBC 11.1.1 JDBCTemplate小试牛刀 11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据...