`
langgufu
  • 浏览: 2307157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate中session.getconnection()的替代方法

阅读更多
2010-04-15 10:21

Hibernate中session.connection()的替代方法

Hibernate3.3.2版本中getSession().connection()已被弃用,替代方法SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection()

来自类org.springframework.orm.hibernate3.SessionFactoryUtils

例子:

java.sql.Connection c = null;
java.sql.PreparedStatement ps = null;
java.sql.ResultSet rs = null;

public List method(String sql) {
List ret = new ArrayList();
try {
c = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
ps = c.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
.....
}
ret.add(ro);
}
} catch (Exception e) {
e.printStackTrace();

} finally {
close();
}
return ret;
}

Hibernate API中让使用doWork(Work,work),描述如下:

()
Deprecated. (scheduled for removal in 4.x). Replacement depends on need; for doing direct JDBC stuff use ; for opening a 'temporary Session' use (TBD).

Work接口的execute()方法用于执行直接通过JDBC API来访问数据库的操作:
public interface Work {
//直接通过JDBC API来访问数据库的操作
public void execute(Connection connection) throws SQLException;
}
Session的doWork(Work work)方法用于执行Work对象指定的操作,即调用Work对象的execute()方法。Session会把当前使用的数据库连接传给execute()方法。

过程如下:

Transaction tx=session.beginTransaction();
//定义一个匿名类,实现了Work接口
Work work=new Work(){
public void execute(Connection connection)throws SQLException{
//通过JDBC API执行用于批量更新的SQL语句
PreparedStatement stmt=connection
.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
+"where AGE>0 ");
stmt.executeUpdate();
}
};

//执行work
session.doWork(work);
tx.commit();

当通过JDBC API中的PreparedStatement接口来执行SQL语句时,SQL语句中涉及到的数据不会被加载到Session的缓存中,因此不会占用内存空间。

分享到:
评论

相关推荐

    javaee试卷.pdf

    7. SessionFactory在Hibernate中是线程安全的,负责生成Session实例。 8. Hibernate的默认XML配置文件名为hibernate.cfg.xml。 9. Hibernate不直接处理事务,而是依赖于JDBC或容器提供的事务管理。 10. Spring的...

    hibernate入门

    4. **查询(Query)**:`session.get()`、`session.load()`、`Query`或`Criteria` API用于查找对象。 ### 七、事务管理 Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理。通常...

    hibernate hellowrold入门级代码

    例如,`session.save(user)`用于持久化新对象,`session.get(User.class, userId)`用于获取特定ID的对象,`session.delete(user)`用于删除对象,而`session.createQuery("from User")`则用于执行HQL(Hibernate ...

    hibernate第一天笔记

    `Session`类是与数据库交互的主要接口,类似于JDBC中的`Connection`。它支持CRUD操作,如`save()`用于添加数据,`update()`用于修改数据,`delete()`用于删除数据,而`get()`则根据ID获取对象。值得注意的是,`...

    Hibernate学习笔记

    其中,重要的属性包括`hibernate.connection.driver_class`(数据库驱动)、`hibernate.connection.url`(数据库URL)、`hibernate.dialect`(数据库方言)等。 ### 4. 实体类与映射文件 - **实体类**: 是与数据库...

    Hibernate 3.1.2 参考手册

    - **注解**:在Java 5之后,Hibernate支持使用注解来替代XML映射文件,使得代码更加简洁易懂。 **4. 查询语言** - **HQL(Hibernate Query Language)**:类似于SQL的一种面向对象的查询语言。 - **Criteria API...

    Hibernate中文帮助文档

    **标签“hibernate API”**指的是使用Hibernate框架时涉及的API接口和方法,包括SessionFactory的get Session方法,Session的save、update、delete、load、query等操作,以及Transaction的begin、commit和rollback等...

    涂鸦hibernate精彩讲解

    3. **Session**:是Hibernate与数据库交互的主要接口,相当于JDBC中的Connection。 4. **Transaction**:处理数据库事务,确保数据的一致性。 5. **Entity**:表示业务对象,对应数据库中的表。 6. **Mapping文件...

    多种数据库连接配置(oracle\mysql\access)

    此外,使用ORM框架如Hibernate,可通过ThreadLocal模式管理Session,确保每个线程有独立的Session,从而避免并发问题。 ### 总结 数据库连接配置是IT项目中的基础但关键环节,无论是Oracle、MySQL还是Access,合理...

    Hibernate学习

    - 加载和检索数据:利用Session的get()、load()或find()方法获取对象,或者使用Query/Criteria API执行复杂查询。 6. **缓存机制** - 一级缓存:Session内部的缓存,存储了当前Session中的持久化对象。 - 二级...

    spring集成Struts与Hibernate

    这样,Action可以通过继承`ActionSupport`类并调用`getWebApplicationContext()`方法来获取`ApplicationContext`实例,进而访问容器中的Bean。 - **实现步骤**: - 创建继承自`ActionSupport`的Action类。 - 在...

    23种设计模式 - 架构设计 - PPT

    - JDBC应用:`OracleDataSource`负责创建连接,`getConnection()`获取连接。 - DAO应用:`XMLDB_DAOFactory`根据`dbtype`创建不同的`XMLDB`实现类。 - Hibernate的`SessionFactory`根据配置文件创建`Session`。 ...

Global site tag (gtag.js) - Google Analytics