一、疑惑
一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过
一段时间的学习下面我来总结一下,常用的dao层配置。
二、常用的hibernate操作dao
第一种,通过继承HibernateDaoSupport来操作
第二种,通过HibernateTemplate来操作
第三种,通过使用Hibernate的session来操作
第四种,直接写JDBC来实现数据库操作
三、四种常用方法介绍及配置
通过继承HibernateDaoSupport来操作
spring为Hibernate的Dao提供的工具类,其底层是通过HibernateTemplate来实现来数据库的操作,但我觉得使用它的时候需要向每个
Dao层注入sessionFactory感觉有点不方便,因为这样注解就不方便了,但使用的时候就不需要在Dao层里面写SessionFactory的set方法了
直接在配置文件中进行配置就可以了。可以看源码发现:

使用的配置:applicationContext.xml文件
<!-- 配置连接池: --> <!-- 引入外部属性文件 --> <!-- 配置c3p0数据源 --> <!-- 配置hibernate的相关信息 --> <!-- 配置SessionFactory --> <!--配置数据源 注入连接池--> <!-- 事务管理 --> <!-- 配置一个事务管理器 --><!-- 配置hibernate的其他属性 --> <!-- 配置hibernate的映射文件 --> org.hibernate.dialect.MySQLDialect true true update false
com/itwang/entity/User.hbm.xml com/itwang/entity/Category.hbm.xml <!-- 开启注解事务 --> <!-- Dao的配置 =============================--> <!-- 用户的Dao --> <!-- 一级分类的Dao --> <!-- 二级分类的Dao --> <!--商品的Dao -->

使用直接继承,方法里面通过this.getHibernateTemplate()直接使用HibernateTemplate操作数据库
可以看到这种方法有点繁琐
2. 通过HibernateTemplate来操作(推荐)

当然在配置文件中也可以只需要配置hibernateTemplate对象就可以了,因为可以在dao层直接使用注解方式(@Autowired,@Repository)来注入属性和创建Bean
@Repositorypublic class UserDaoImpl implements UserDao { //得到hibernateTemplate对象 @Autowired private HibernateTemplate hibernateTemplate;
@Override public void add() {
User user = new User();
user.setAddress("japan");
user.setUsername("rose");;
hibernateTemplate.save(user);
}
}
这种方式是不是很方便,只需要在配置文件中配置一个HibernateTemplate对象就可以了。
3. 通过使用Hibernate的session来操作
这一种是Hibernate的最基础的方式,也是最灵活的一种方式,以为Session实现了hibernate的所有数据库操作方法,所谓越原始越灵活。
这种方式只需要在Dao层注入SessionFactory对象即可
<!-- 配置SessionFactory --><!--配置数据源 注入连接池--> <!-- 配置hibernate的其他属性 --> <!-- 配置hibernate的映射文件 --> org.hibernate.dialect.MySQLDialect true true update false
com/itwang/entity/User.hbm.xml com/itwang/entity/Category.hbm.xml
@Repositorypublic class UserDaoImpl implements UserDao {
@Autowired private SessionFactory sessionFactory;
@Override public void saveUser() {
Session session = null;
Transaction tx = null; try {
session = sessionFactory.getCurrentSession(); //开启事务
tx = session.beginTransaction(); //添加
User user = new User();
user.setAddress("American");
user.setUsername("老王");
session.save(user);
tx.commit();
}catch(Exception e) {
e.printStackTrace(); //回滚事务 tx.rollback();
}finally {
session.close();
}
}
}
4. 直接写JDBC来实现数据库操作,这种方式我就不多说了,以为这种方式太原始了,不推荐
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1542/viewspace-2804895/ ,如需转载,请注明出处,否则将追究法律责任。