- 浏览: 7936329 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
spring 3的jdbc跟spring mvc搭配起来挺好用的,本文试着小结其主要使用方法,并举出spring 3.3.2中的一些信变化进行解析
1) 在dao中注入jdbctemplate,然后直接execute sql一下,当然配置文件要配置,如
配置文件:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource"/>
具体的crud都可以用update方法去实现(insert,update,delete都可以使用update方法),比如:
就是使用?做占位符了。
2 接下来看如何获得自增主键
spring使用KeyHolder接口的一个实现类GeneratedKeyHolder返回每次插入后的自增键;
keyHolder.getKey().intValue()这里就获得了信增加的主键了;
3 接下来看下如何查询数据,这个是很基本的了,spring jdbc使用了
RowCallbackHandler的回调接口
另外一种常用的方法是使用rowmapper处理结果集
注意的是,这里用rowmapper方法的话,会自动把查出来的每个行记录集自动添加到List中去的,如果数量太多,比如100万个,则list很大,容易内存溢出;而采用
rowbcallbackhandler的话,则在processrow中获得数据后马上进行处理(比如群发邮件时,马上发送邮件)。
4 查询单值数据,典型的有如queryForObject,queryForInt;
5 NamedParameterJDBCTemplate,这是一个很好用的JDBC模板类,解决的是?号占位符号的麻烦(容易对错位置等)
例子如下:
这里可以看到,SQL中的使用:first_name了,并且用MapSqlParameterSource来进行绑定;还有种方法是使用BeanPropertySqlParameterSource;比如:
这里其实就是参数整个javabean传进来,其中:personLastName,personFirstName都必须是javabean中的属性,这样才能一一匹配;
还有一个就是simplejdbctemplate,例子如下:
也是很简单容易理解吧。
下面提及下最新的spring jdbc 3.2.2中,
queryForInt("select count(0) from personTbl")
这个写法换了,换成:
queryForObject("select count(0) from personTbl", Integer.class)
详细的更换和丢弃的方法见:
http://static.springsource.org/spring/docs/3.2.x/javadoc-api/deprecated-list.html
1) 在dao中注入jdbctemplate,然后直接execute sql一下,当然配置文件要配置,如
@Autowired private JdbcTemplate jdbcTemplate; ........ String sql="......."; jdbcTemplate.execute(sql);
配置文件:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource"/>
具体的crud都可以用update方法去实现(insert,update,delete都可以使用update方法),比如:
final String sql = "INSERT INTO t_forum(forum_name,forum_desc) VALUES(?,?)"; Object[] params = new Object[] { forum.getForumName(), forum.getForumDesc() }; jdbcTemplate.update(sql, params);
就是使用?做占位符了。
2 接下来看如何获得自增主键
spring使用KeyHolder接口的一个实现类GeneratedKeyHolder返回每次插入后的自增键;
KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, forum.getForumName()); ps.setString(2, forum.getForumDesc()); return ps; } }, keyHolder); forum.setForumId(keyHolder.getKey().intValue());
keyHolder.getKey().intValue()这里就获得了信增加的主键了;
3 接下来看下如何查询数据,这个是很基本的了,spring jdbc使用了
RowCallbackHandler的回调接口
String sql = "SELECT ......"; final List<Forum> forums = new ArrayList<Forum>(); jdbcTemplate.query(sql,new Object[]{fromId,toId},new RowCallbackHandler(){ public void processRow(ResultSet rs) throws SQLException { Forum forum = new Forum(); forum.setForumId(rs.getInt("forum_id")); forum.setForumName(rs.getString("forum_name")); forum.setForumDesc(rs.getString("forum_desc")); forums.add(forum); }}); return forums;
另外一种常用的方法是使用rowmapper处理结果集
@Override public Person getPerson(String lastName) { String query = "select personId, personFirstName, personLastName from personTbl where personLastName = ?"; return this.getJdbcTemplate().queryForObject(query, new PersonMapper(), lastName); }
注意的是,这里用rowmapper方法的话,会自动把查出来的每个行记录集自动添加到List中去的,如果数量太多,比如100万个,则list很大,容易内存溢出;而采用
rowbcallbackhandler的话,则在processrow中获得数据后马上进行处理(比如群发邮件时,马上发送邮件)。
4 查询单值数据,典型的有如queryForObject,queryForInt;
public int getNumberOfPeople() { int rowCount = this.getJdbcTemplate().queryForInt("select count(0) from personTbl"); return rowCount; }
String firstName = this.getJdbcTemplate().queryForObject( "select personFirstName from personTbl where personLastName = ?", String.class, lastName ) ;
5 NamedParameterJDBCTemplate,这是一个很好用的JDBC模板类,解决的是?号占位符号的麻烦(容易对错位置等)
例子如下:
String sql = "select count(0) from personTbl where personFirstName = :first_name"; SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName); return this.getNamedParameterJdbcTemplate().queryForInt(sql, namedParameters);
这里可以看到,SQL中的使用:first_name了,并且用MapSqlParameterSource来进行绑定;还有种方法是使用BeanPropertySqlParameterSource;比如:
public List<Person> getPerson(Person personSkeleton) { SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(personSkeleton); List<Person> people = this.getNamedParameterJdbcTemplate().query( "select personID, personFirstName, personLastName from personTbl " + " where personLastName = :personLastName and personFirstName = :personFirstName", namedParameters, new PersonMapper() );
这里其实就是参数整个javabean传进来,其中:personLastName,personFirstName都必须是javabean中的属性,这样才能一一匹配;
还有一个就是simplejdbctemplate,例子如下:
public void addPerson(Person newPerson) { SimpleJdbcInsert insertPerson = new SimpleJdbcInsert(this.getDataSource()) .withTableName("personTbl").usingGeneratedKeyColumns("personID"); Map<String, Object> parameters = new HashMap<String, Object>(3); parameters.put("personFirstName", newPerson.getPersonFirstName() ); parameters.put("personLastName", newPerson.getPersonLastName() ); insertPerson.execute(parameters); }
也是很简单容易理解吧。
下面提及下最新的spring jdbc 3.2.2中,
queryForInt("select count(0) from personTbl")
这个写法换了,换成:
queryForObject("select count(0) from personTbl", Integer.class)
详细的更换和丢弃的方法见:
http://static.springsource.org/spring/docs/3.2.x/javadoc-api/deprecated-list.html
评论
4 楼
mike4166955
2013-04-24
请问如何使用Spring 3.2.2中的:“在NamedParameterJdbcTemplate中添加了不带参数的查询变式,在DAO中更加便捷”?
3 楼
macrotea
2013-03-31
spring jdbc 将会越来越人性化
2 楼
jackyrong
2013-03-27
yes,是的
1 楼
suyulin6688
2013-03-27
spring 3.3.2?
到这个版本号了?
到这个版本号了?
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1568方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2017前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3463info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2231import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 489https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 683public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 606https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 668https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 432https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5381 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3095微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 612https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1842什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 962本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1359原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 856public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 668在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 936-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 767一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1903介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
13.8 使用Spring的常用测试注解 540 13.8.1 问题 540 13.8.2 解决方案 540 13.8.3 工作原理 541 13.9 小结 542 第14章 Spring Portlet MVC框架 544 14.1 用Spring Portlet MVC开发一个简单的Portlet ...
13.8 使用Spring的常用测试注解 540 13.8.1 问题 540 13.8.2 解决方案 540 13.8.3 工作原理 541 13.9 小结 542 第14章 Spring Portlet MVC框架 544 14.1 用Spring Portlet MVC开发一个简单的Portlet ...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结
14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结
14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结
小结** 对上述组件的功能进行了简要总结。 - **5.3. 验证** - **5.3.1. ExceptionTranslationFilter** 用于处理认证过程中发生的异常。 - **5.3.2. AuthenticationEntryPoint** 定义了当用户尝试访问受...
JAVA模块知识小结涵盖的内容非常广泛,包含了Java技术栈中的多个重要知识点,从基础的开发工具到框架、数据库以及编程语言本身,以下是对给定文件中提到的各项技术的详细知识点梳理: 1. Hibernate和Ibatis ...
程序设计教程.pdf>>人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 ...本章小结 342
#### 六、本文小结 Spring Data JPA 大大简化了 JPA 的使用方式,使得开发者能够更高效地进行数据访问层的开发。通过遵循约定优于配置的原则,减少了大量模板代码的编写,提高了开发效率。 #### 第二篇 在第二篇...
1.5 小结 第2章 myedipse开发工具对各种框架的支持 2.1 使用jsp的两种模式 2.2 struts框架的实现 2.3 hibernate框架的实现 2.4 jpa框架的实现 2.5 spring框架的实现 2.6 jsf框架的实现 2.7...
6-2 Phoenix安装 6-3 Phoenix实战:shell命令操作Phoenix 6-4 Phoenix实战:java jdbc操作Phoenix 6-5 通过mybatis操作Phoenix 6-6 通过mybatis操作Phoenix 6-7 Sqoop简介 6-8 Sqoop数据导入实战 6-9 课程小结 ...
17 2.1 构建开发环境 17 2.1.1 安装JDK 17 2.1.2 安装Tomcat 21 2.1.3 安装Eclipse 23 2.2 配置开发环境 23 2.3 小结 26 第3章 Java的反射机制 27 3.1 Java反射API 27 3.2 加载类的实例 29 3.2.1 加载class对象的两...
感谢大家的支持,我终于升级了,上传限制得到提升,所以把资源整合下!希望大家一如既往 Java SE实践教程 pdf格式电子书 下载(一) 更新 ...Java SE实践教程 pdf格式电子书 下载(二) 更新 ...13.4 小结 387
### ANT基础学习小结 #### 一、Ant简介与应用场景 Apache Ant 是一个Java环境下的构建工具,主要用于软件编译、测试、部署等自动化任务。它通过XML来定义构建过程,使得开发者能够轻松地管理项目的构建流程。在很...
1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 ...
第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 ...15.13 小结
本文档主要介绍了 MyEclipse 10 的使用教程,涵盖了 MyEclipse 的基本使用、内存管理、快捷键、编译与调试、JDBC 小结、Hibernate 示例代码、jadclipse 插件安装等内容。 一、MyEclipse 基本使用 MyEclipse 支持 ...