- 浏览: 256042 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
郑涵魁:
这才是好文啊
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
silvia016:
很有用,非常感谢
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
chengcwn:
好文章,多谢分享!
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
young7:
不错,特别是那个参考文章
JAVA调用Shell脚本--及阻塞的解决办法 -
zhujianbogo:
什么邮件列表,能说下解决方案吗? 谢谢 。 我也遇到这个问题了 ...
Tomcat与apache2集群的问题
Hibernate与JDBCtemplate如何混用?
一开始在项目中使用的是Hibernate,但是发现Hibernate在做批量操作时,效率不是很理想。所以现在采用JDBCTemplate和Hibernate混用,现在问题是如何配置他们的事务?
两者都用同一个datasource
,同一spring管理事务就没有问题。
另外要注意两点:
1. 由于Spring JDBC 框架,它没有采用服务层缓存技术,所以可以使用 DAO 类返回数据库中的数据。如果采用 Hibernate 等 ORM 框架,由于它们采用了服务层缓存的技术,为了获取数据库中的相应数据,需要在业务方法执行后调用 HibernateTemplate.flush() 方法,将缓存中的对象同步到数据库中,这时才可以通过 SimpleJdbcTemplate 在数据库中访问业务方法的执行情况。
2. 使用hibernateTransaction manager ,才可以保证混用时候的事务。
补充:HibernateTransactionManager实际上是可以同时管理由JdbcTemplate或JdbcDaoSupport实现的dao以及HibernateTemplate或HibernateDaoSupport实现的事务的。
Spring 提供了一个能从当前事务上下文中获取绑定的数据连接的工具类,那就是 DataSourceUtils。Spring 强调必须使用 DataSourceUtils 工具类获取数据连接,Spring 的 JdbcTemplate 内部也是通过 DataSourceUtils 来获取连接的。DataSourceUtils 提供了若干获取和释放数据连接的静态方法,说明如下:
-
static Connection doGetConnection(DataSource dataSource)
: 首先尝试从事务上下文中获取连接,失败后再从数据源获取连接; -
static Connection getConnection(DataSource dataSource)
: 和 doGetConnection 方法的功能一样,实际上,它内部就是调用 doGetConnection 方法获取连接的; -
static void doReleaseConnection(Connection con, DataSource dataSource)
:释放连接,放回到连接池中; -
static void releaseConnection(Connection con, DataSource dataSource)
:和 doReleaseConnection 方法的功能一样,实际上,它内部就是调用 doReleaseConnection 方法获取连接的;
来看一下 DataSourceUtils 从数据源获取连接的关键代码:
public abstract class DataSourceUtils {
…
public static Connection doGetConnection(DataSource dataSource) throws SQLException {
Assert.notNull(dataSource, "No DataSource specified");
//①首先尝试从事务同步管理器中获取数据连接
ConnectionHolder conHolder =
(ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
if (conHolder != null && (conHolder.hasConnection() ||
conHolder.isSynchronizedWithTransaction())) {
conHolder.requested();
if (!conHolder.hasConnection()) {
logger.debug(
"Fetching resumed JDBC Connection from DataSource");
conHolder.setConnection(dataSource.getConnection());
}
return conHolder.getConnection();
}
//②如果获取不到,则直接从数据源中获取连接
Connection con = dataSource.getConnection();
//③如果拥有事务上下文,则将连接绑定到事务上下文中
if (TransactionSynchronizationManager.isSynchronizationActive()) {
ConnectionHolder holderToUse = conHolder;
if (holderToUse == null) {
holderToUse = new ConnectionHolder(con);
}
else {holderToUse.setConnection(con);}
holderToUse.requested();
TransactionSynchronizationManager.registerSynchronization(
new ConnectionSynchronization(holderToUse, dataSource));
holderToUse.setSynchronizedWithTransaction(true);
if (holderToUse != conHolder) {
TransactionSynchronizationManager.bindResource(
dataSource, holderToUse);
}
}
return con;
}
…
}
另外还有hibernate的SessionFactoryUtils(iBatis同Jdbc).
关于JdbcTemplate的使用可以参考下面的一篇文章:
评论
同意,既然都使用了这种搭配为什么不使用ibatis呢?
项目中还是尽量使用Hibernate的,只有一些非常必要的场合才使用了JDBC,
而且Spring的JDBCTemplate已经提供了很好的封装,还可以写一些动态的SQL文(使用freemarker创建动态SQL:http://tivan.iteye.com/blog/686297);
另外还有就是这个是在维护的时候添加的JDBC功能,也就没有添加ibatis。
如果是项目初期的话应该考虑ibatis与JDBCTemplate做个比较。
public Object excuteBySql(final String sql,final Object[] para){
return this.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) {
SQLQuery sqlQuery=session.createSQLQuery(sql);
if(null!=para&¶.length!=0) bindProperties(sqlQuery,para);
return sqlQuery.executeUpdate();
}
});
}
这样不就能用JDBC进行批量操作了么
同意,既然都使用了这种搭配为什么不使用ibatis呢?
发表评论
-
Java文件读写数据流
2012-08-30 20:30 3716数据流可分节点流( ... -
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
2012-04-16 19:59 25036前言在平时开发、测试过程中、甚至是生产环境中,有时会遇到Out ... -
apache2.2+tomcat超时503
2012-03-26 10:35 3418最近apache2.2+tomcat5.5.28(两个) ... -
Tomcat与apache2集群的问题
2012-03-16 14:53 2473最近在Tomcat与apache2集群的问题的应用程序中 ... -
JVM的参数设置的一个要点
2012-03-11 00:07 2553JVM参数的设置(特别是 –Xmx –Xms –Xmn ... -
【转载】理解Heap Profling名词-Shallow和Retained Sizes
2012-03-06 17:22 2912转载请注明原文链接:h ... -
更改eclipse author的默认名字(作者)
2011-09-07 12:39 1668在eclipse的目录下找到eclipse.in ... -
【转载】java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-08-27 12:18 1247java.lang.OutOfMemoryError: P ... -
JAVA NIO
2011-08-19 22:25 707NIO流是一个比IO流(字节字符)效率高很多,因为是以块 ... -
XMLGregorianCalendar 与 Date 转换
2011-06-28 17:01 1929XMLGregorianCalendar 与 Date ... -
Web Service 的描述语言WSDL说明
2011-05-27 10:28 1205<?xml version="1. ... -
spring+quartz的配置文件
2011-05-26 21:23 1228spring+quartz的配置文件 &l ... -
JAVA调用Shell脚本--及阻塞的解决办法
2011-05-16 13:13 8838用java调用shell,使用 Process p=Runt ... -
WIN7安装WebSphere6.1
2011-03-23 12:55 0首先是安装,我们决定安装WebSphere6.1。 ... -
Jbpm4常用操作
2011-03-06 15:00 2645Jbpm4常用操作 一、ProcessEngine:流程 ... -
ThreadLocal
2010-11-08 21:40 856ThreadLocal -
小记--tomcat 常见问题
2010-10-12 22:29 11521. tomcat 6 undepl ... -
SimpleDateFormat用法说明
2010-09-19 13:02 1423关于java.text.SimpleDateFormat。 ... -
常用的jar包总结(4)
2010-08-13 12:34 1717最近用新的一套web框架做项目,有很多常用的包集成在里面。 ... -
常用的jar包总结(3)
2010-08-11 23:27 2055最近用新的一套web框架做项目,有很多常用的包集成在里面 ...
相关推荐
本文档主要讲解Spring与mybatis与jdbc结合使用的方法和例子。
Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...
本主题聚焦于使用`Access_JDBC40.jar`这个特定的JDBC驱动包来与Microsoft Access数据库进行交互。`Access_JDBC40.jar`是针对Java 6及以上版本的JDBC 4.0驱动,提供了对Access数据库的支持。 首先,我们需要理解为...
### JDK版本与JDBC版本的关系 在探讨JDK(Java Development Kit)版本与JDBC(Java Database Connectivity)版本之间的关系之前,我们先简单了解一下这两者的基本概念。 #### 1. JDK简介 JDK是Java开发工具包,...
jdbc教案jdbc教案jdbc教案jdbc教案jdbc教案jdbc教案jdbc教案jdbc教案jdbc教案,JDBC详细使用过程
这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍这两个驱动以及如何使用它们。 1. SQLJDBC驱动: SQLJDBC是微软发布的早期版本的JDBC...
在Java编程语言中,JDBC(Java Database Connectivity)是一个核心的API,用于连接Java应用程序与各种类型的数据库。这里我们关注的是两个特定版本的Microsoft SQL Server的JDBC驱动:sqljdbc41.jar和sqljdbc42.jar...
* JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。 * 驱动开发必须要实现Driver接口。 二、JDBC的API * java.sql包和javax.sql包 * Driver接口(驱动):在加载某一Driver类时,它应该创建自己的...
在IT行业中,数据库是存储和管理数据的核心组件,而Java应用程序常常通过Java Database Connectivity (JDBC) API来与各种数据库进行交互。`sqljdbc4`是Microsoft SQL Server针对Java平台提供的一个驱动,使得Java...
JDBC驱动是连接Java应用程序与数据库之间的桥梁,通常分为四种类型:Type 1(纯Java API,依赖于数据库厂商提供的ODBC桥)、Type 2(混合API,Java与本地数据库API)、Type 3(完全基于网络的API,不依赖于数据库...
在IT行业中,数据库连接是应用程序与数据存储之间的桥梁,而JDBC(Java Database Connectivity)则是Java平台中用于访问数据库的标准API。JDBC Driver 3.0是针对Java开发者的重要组件,它允许Java应用程序与各种...
- JDBC连接池的配置与使用,提高数据库连接的效率。 - SQL语言基础,包括DML(数据操纵语言)、DDL(数据定义语言)和DQL(数据查询语言)。 - JSP与Servlet的关系,以及如何在JSP中调用Servlet。 - 数据库事务的...
客户端可能会使用JDBC API建立与服务器的连接,创建Statement或PreparedStatement对象,然后执行SQL语句。这些语句可以是SELECT、INSERT、UPDATE或DELETE,用于获取、添加、修改或删除数据库中的数据。 `Server....
jdbc 实现与线程池 jdbc 是 Java Database Connectivity 的缩写,用于 Java 语言与数据库之间的交互。jdbc 实现可以对数据库进行增删改查操作,并可以与线程池相结合,提高数据库操作的效率和安全性。 一、jdbc ...
总的来说,sqljdbc4.jar, sqljdbc41.jar, 和sqljdbc42.jar是Microsoft SQL Server与Java应用程序交互的重要工具,它们提供了在不同Java版本下的JDBC连接支持。正确选择和使用这些驱动,可以确保你的Java应用能够顺利...
JAVA 使用 JDBC 进行 insert 操作添加信息到数据库 一、 JDBC 概述 JDBC(Java Database Connectivity)是一种 Java 应用程序用来与数据库进行交互的 API。它提供了一组标准的接口,允许 Java 应用程序与各种...
"jdbc 基础的详解与总结" jdbc 是一套协议,由 Sun 公司定义的一组接口,由数据库厂商来实现,并规定了 Java 开发人员访问数据库所使用的方法的调用规范。jdbc 的实现是由数据库厂商提供,以驱动程序形式提供。jdbc...
SQL Server驱动包是用于Java应用程序通过JDBC(Java Database Connectivity)接口与Microsoft SQL Server数据库进行交互的必备组件。本文将详细介绍这两个重要的驱动文件——sqljdbc.jar和sqljdbc4.jar,以及如何...
Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java Database Connectivity)连接Oracle数据库并执行简单查询操作的过程。本文将通过实例形式...
JDBC规范定义了Java程序如何与数据库交互的规则,其主要目的是让程序员能够使用统一的方法连接并操作数据库。 在本规范文档中,我们可以了解到JDBC 4.3版本所支持的特性,其中API的版本号和维持状态信息表明了当前...