论坛首页 Java版 Hibernate

HI,你还在单独使用hibernate吗?

浏览 3499 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2004-06-03
如题,如果是这样的话,那么请试试spring吧,spring让使用hibernate更容易,你想更简单吗,我相信spring会给你答案的
下面是spring处理的hibernate的一种方法:Template
[code:1]
/*
* Created on 2004-6-3
*
* To change the template for this generated file go to
* Window&Preferences&Java&Code Generation&Code and Comments
*/
package springsample;

import org.springframework.orm.hibernate.*;
import net.sf.hibernate.*;
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window&Preferences&Java&Code Generation&Code and Comments
*/
public class UserDAOImpl implements UserDAO {

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

/* (non-Javadoc)
* @see springsample.UserDAO#addUser(springsample.User)
*/
public User addUser(User user) {
// TODO Auto-generated method stub
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
hibernateTemplate.save(user);
return user;
}

/* (non-Javadoc)
* @see springsample.UserDAO#findByAccount(java.lang.String)
*/
public User findByAccount(String account) {
// TODO Auto-generated method stub
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
User user = (User)hibernateTemplate.load(User.class,account);
return user;
}

/* (non-Javadoc)
* @see springsample.UserDAO#updateUser(springsample.User)
*/
public User updateUser(User user) {
// TODO Auto-generated method stub
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
hibernateTemplate.saveOrUpdate(user);
return user;
}

/* (non-Javadoc)
* @see springsample.UserDAO#deleteUser(springsample.User)
*/
public void deleteUser(User user) {
// TODO Auto-generated method stub
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
hibernateTemplate.delete(user);
}

}
[/code:1]
剩下的部分在配置文件中解决了
[code:1]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
        <property name="mappingResources">
            <list>
                <value>springsample/User.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
           </props>
        </property>
        <property name="dataSource">
             <ref bean="myDataSource"/>
        </property>
    </bean>
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName">
             <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
             <value>jdbc:mysql://localhost:3306/oa</value>
        </property>
        <property name="username">
             <value>root</value>
        </property>
        <property name="password">
             <value></value>
        </property>
    </bean>
    <bean id="myProductDao" class="springsample.UserDAOImpl">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
    </bean>
</beans>
[/code:1]
   
最后更新时间:2004-06-03
这样
[code:1]
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
   public void addUser(User user) {
      getHibernateTemplate().save(user);
   }
}
[/code:1]
同时把
[code:1]
   private SessionFactory sessionFactory;

   public void setSessionFactory(SessionFactory sessionFactory) {
      this.sessionFactory = sessionFactory;
   }
[/code:1]
去掉

就可以了
   
0 请登录后投票
最后更新时间:2004-06-05
改一下标题吧。
标题尽量与贴子内容贴近。谢谢合作。
   
0 请登录后投票
最后更新时间:2004-06-06
spring确实很不错并且集成了hibernate,不过,有一点遗憾的是,HibernateTemplete不支持iterate查询,你需要稍微再次封装一下就ok了.
   
0 请登录后投票
最后更新时间:2004-09-10
怎麽只看到 sessionFactory,没有 生成Session,这样User就能被操作了吗?而且,如果有上面[code:1]<property name="mappingResources">
7              <list>
8                  <value>springsample/User.hbm.xml</value>
9              </list>
10         </property>
[/code:1]
这个配置,我在Hibernate.cfg.xml中还需要配置吗?不知道Spring是怎样减少配置文件的,谁能讲一下?
   
0 请登录后投票
最后更新时间:2004-09-10
lyo 写道
怎麽只看到 sessionFactory,没有 生成Session,这样User就能被操作了吗?而且,如果有上面[code:1]<property name="mappingResources">
7              <list>
8                  <value>springsample/User.hbm.xml</value>
9              </list>
10         </property>
[/code:1]
这个配置,我在Hibernate.cfg.xml中还需要配置吗?不知道Spring是怎样减少配置文件的,谁能讲一下?


我来说说吧, 最近正在研究 Spring.

1)这样配置以后, Hibernate.cfg.xml 不需要配置了;
2)你可以看到代码里的
  "HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory)"
  正是这个 HibernateTemplate 封装了对 session 的直接调用;
3)经过 Spring 的封装, Hibernate 的事务处理也被纳入了 Spring 的事务处理框架, 而我觉得这才是真正简化了 hibernate 的使用的地方, 不管是基于 jdbc 的事务, 还是基于 jta 的事务, 你的 DAO 不需要做任何改动.
   
0 请登录后投票
最后更新时间:2004-09-12
glassprogrammer 写道
lyo 写道
怎麽只看到 sessionFactory,没有 生成Session,这样User就能被操作了吗?而且,如果有上面[code:1]<property name="mappingResources">
7              <list>
8                  <value>springsample/User.hbm.xml</value>
9              </list>
10         </property>
[/code:1]
这个配置,我在Hibernate.cfg.xml中还需要配置吗?不知道Spring是怎样减少配置文件的,谁能讲一下?


我来说说吧, 最近正在研究 Spring.

1)这样配置以后, Hibernate.cfg.xml 不需要配置了;
2)你可以看到代码里的
  "HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory)"
  正是这个 HibernateTemplate 封装了对 session 的直接调用;
3)经过 Spring 的封装, Hibernate 的事务处理也被纳入了 Spring 的事务处理框架, 而我觉得这才是真正简化了 hibernate 的使用的地方, 不管是基于 jdbc 的事务, 还是基于 jta 的事务, 你的 DAO 不需要做任何改动.


多谢解答。 我最近也在看Spring了,感觉他能大大简化Hibernate的开发。更容易管理业务层。
那麽 Spring 是如何 处理 SessionFactory的呢? 以前我们都使用 HibernateUtil来得到当前线程的Session,这个类保持了全局唯一的 单实例 SessionFactory,Spring 可能就不用这个方法了吧,它是如何配置 SessionFactory为 singleton的呢?
还有你刚才说的[code:1]不管是基于 jdbc 的事务, 还是基于 jta 的事务, 你的 DAO 不需要做任何改动[/code:1] 我不是很理解,能具个例子么?多谢!
   
0 请登录后投票
最后更新时间:2004-09-12
看源代码, 比如 org.springframework.orm.hibernate.LocalSessionFactoryBean
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐