Spring+Hibernate DAO 持久层开发
来源:互联网 发布:同花顺数据python 编辑:程序博客网 时间:2024/05/01 10:59
DAO开发
注:
(1)以下两者都需在Spring XML配置文件中,注册Bean(实现类)来依赖注入SessionFactory.
(2.1)Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是
延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样,具体细节请参考jdk中有关动态代理的文档。本文主要讲解
如何在spring中进行事务控制。
(2.2)动态代理的一个重要特征是,它是针对接口的,所以我们的DAO要通过动态代理来让spring接管事务,就必须在DAO前面抽象出一个接口. 当然
如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式.
(一)直接使用Hibernate API
public class DaoImp implate Dao{
private SessionFactory sessionFactory;
private static String hql = "from User u where u.username=? ";
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory=sessionFactory;
}
public boolean isValidUser(String username) {
try{
List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list();
if (userList.size() > 0) {
return true;
} catch (HibernateException ex){
throw converHibernaterAccessException(ex);
}
}
}
优点:与Spring框架完全分离
缺点:(1)无法使用Spring框架封装所提供的额外功能.如,直接使用Hibernate API 需用try...catch()处理HibernateException异常.
(2)需在实现类中加入setSessionFactory(SessionFactory sessionFactory)属性,接收依赖注入的SessionFactory.
(二)继承 Spring 的 HibernateDaoSupport 使用 HibernateTemplate
public class DaoImp extend HibernateDaoSupport implates Dao{
//private SessionFactory sessionFactory;
private static String hql = "from User u where u.username=? ";
//public void setSessionFactory(SessionFactory sessionFactory){
// this.sessionFactory=sessionFactory;
//}
public boolean isValidUser(String username) {
// try{
// List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list();
List userList = getHibernateTemplate().fnd(hql,username);
if (userList.size() > 0) {
return true;
// } catch (HibernateException ex){
// throw converHibernaterAccessException(ex);
// }
}
public boolean isValidUser(String username,String password) throw DataAccessException {
Session session = getSession();
String[] userlist=new String[2];
userlist[0]=username;
userlist[1]=password;
try{
List userList = session.find(hql,userlist); //Hibernate语句;
if (userList.size() > 0) {
return true;
} catch (HibernateException ex){
throw converHibernaterAccessException(ex);
}
}
}
特点:对HibernateTemplate没有提供的功能,可以直接调用HibernateDaoSuppor对象的getSession()方法得到Session对象实例用try{ Hibernate API }catch (HibernateException ex )操作.
注:
(1)以下两者都需在Spring XML配置文件中,注册Bean(实现类)来依赖注入SessionFactory.
(2.1)Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是
延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样,具体细节请参考jdk中有关动态代理的文档。本文主要讲解
如何在spring中进行事务控制。
(2.2)动态代理的一个重要特征是,它是针对接口的,所以我们的DAO要通过动态代理来让spring接管事务,就必须在DAO前面抽象出一个接口. 当然
如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式.
(一)直接使用Hibernate API
public class DaoImp implate Dao{
private SessionFactory sessionFactory;
private static String hql = "from User u where u.username=? ";
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory=sessionFactory;
}
public boolean isValidUser(String username) {
try{
List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list();
if (userList.size() > 0) {
return true;
} catch (HibernateException ex){
throw converHibernaterAccessException(ex);
}
}
}
优点:与Spring框架完全分离
缺点:(1)无法使用Spring框架封装所提供的额外功能.如,直接使用Hibernate API 需用try...catch()处理HibernateException异常.
(2)需在实现类中加入setSessionFactory(SessionFactory sessionFactory)属性,接收依赖注入的SessionFactory.
(二)继承 Spring 的 HibernateDaoSupport 使用 HibernateTemplate
public class DaoImp extend HibernateDaoSupport implates Dao{
//private SessionFactory sessionFactory;
private static String hql = "from User u where u.username=? ";
//public void setSessionFactory(SessionFactory sessionFactory){
// this.sessionFactory=sessionFactory;
//}
public boolean isValidUser(String username) {
// try{
// List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list();
List userList = getHibernateTemplate().fnd(hql,username);
if (userList.size() > 0) {
return true;
// } catch (HibernateException ex){
// throw converHibernaterAccessException(ex);
// }
}
public boolean isValidUser(String username,String password) throw DataAccessException {
Session session = getSession();
String[] userlist=new String[2];
userlist[0]=username;
userlist[1]=password;
try{
List userList = session.find(hql,userlist); //Hibernate语句;
if (userList.size() > 0) {
return true;
} catch (HibernateException ex){
throw converHibernaterAccessException(ex);
}
}
}
特点:对HibernateTemplate没有提供的功能,可以直接调用HibernateDaoSuppor对象的getSession()方法得到Session对象实例用try{ Hibernate API }catch (HibernateException ex )操作.
- Spring+Hibernate DAO 持久层开发
- Spring+Hibernate DAO 持久层开发, Spring 用 Hibernate 访问数据库的三种方法.推荐使用回调
- Spring+Hibernate DAO 持久层开发, Spring 用 Hibernate 访问数据库的三种方法.推荐使用回调
- 配置Hibernate sync支持Spring快速开发dao层
- 开发自己的DAO层公共类(Spring+Hibernate)
- Spring持久层(三) Hibernate
- 使用Hibernate和Spring开发事务性持久层
- 用 Hibernate 和 Spring 开发事务持久层
- 用 Hibernate 和 Spring 开发事务持久层
- 用 Hibernate 和 Spring 开发事务持久层
- 用 Hibernate 和 Spring 开发事务持久层
- sping+hibernate Dao层开发
- MyEclipse开发Hibernate持久层
- hibernate泛型Dao,让持久层简洁起来
- Hibernate基于持久层框架的DAO模式应用
- spring + hibernate 数据话持久层
- [构建自己的持久层]六、开始开发DAO之一
- 数据库持久层开发之Hibernate主键
- [英语阅读]日本推出机器人手机 “人味”十足
- 64位的db2比32位的db2 能连接的客户端更多,因为能使用的内存更大
- windows 2003系统目前最完善最完美的安全权限方案
- 程序写了5年了,做个一个总结
- 08年本土地域网站发展建议
- Spring+Hibernate DAO 持久层开发
- JS:attachEvent和addEventListener 使用方法
- KMP字符串模式匹配详解
- C#中如何遍历窗口中的控件!
- MFC下关于“建立空文档失败”问题的分析(转载)
- JavaScript:createElement
- HibernateTemplate的常规用法
- PDA和WebService
- 让卡巴斯基7.0支持Windows2003