您的位置:首页 > 编程语言 > Java开发

对ssh中struts、spring、hibernate分工的理解

2016-08-24 17:12 387 查看
对ssh框架来说,核心是spring。

1Struts只负责拦截浏览器端的请求(可以理解为获取request请求,即得到request对象。request对象中包含用户在页面输入的表单信息当前登录用户等信息),并将请求映射到执行类,剩下的工作全部交给spring来执行(或者叫全部委托为spring来执行)。

2spring是ssh的核心。

2.1spring负责控制反转(即通过在Action类中定义成员变量的方式,就可以使用service类中的方法了,其实service类是接口类,正真执行的是serviceIMP类中的方法)。

2.1管理hibernate,实现hibernate初始化等操作。(初始化了hibernate,就可以操作数据库了)

3hibernate负责数据库操作。

可见spring才是ssh框架的核心。

========================ssh框架下,一个普通类怎么进行数据库操作?===================

ssh框架下,一个普通类怎么进行数据库操作?因为有hibernate,所以用户不用写最原始的sql语句,而是通过hibernate对数据库进行操作。所以步骤如下

1通过spring对hibernate进行初始化(即获取了spring配置文件中的数据库登录用户名、密码、服务器地址和端口号等,就可以访问数据库了)。

2通过hibernate访问数据库。

举例代码如下:

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.ContextLoader;

import org.hibernate.SessionFactory;

import org.springframework.orm.hibernate3.HibernateTemplate;

public class test{

public void testFunction() {

                //通过spring对hibernate进行初始化开始,有此也可见spring是负责管理hibernate的,spring是ssh的核心。而Struts只负责请求到执行类的映射,跟数据库操                  //作没有任何关系
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();  

               SessionFactory factory=wac.getBean(SessionFactory.class);

                HibernateTemplate hh = new HibernateTemplate(factory);

                //通过hibernate操作数据库

               String id="XXXXXXXXXXXXXX";
User instance = (User)getHibernateTemplate().get("com.org.base.User", id);//其中User是用户表的model(可以理解为用户表),id是用户的Id。该句的意思是通过
                                                                                                                                                            //用户id获取该用户。

}

}

========================ssh框架下,而SSH框架中的XXXDAO类怎么进行数据库操作?===================

而SSH框架中的XXXDAO类,想访问数据库就更加简单了。

如下:

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

import com.org.dao.UserDAO;

import com.org.model.User;

public class UserDAOIMP implements UserDAO{
private HibernateTemplate hibernateTemplate;
protected void initDao(){
//do nothing
}
public HibernateTemplate getHibernateTemplate(){
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
this.hibernateTemplate = hibernateTemplate;
}

public List findAll(){
log.debug("finding all User instances");
try{
String queryString = "from User";
return getHibernateTemplate().find(queryString);
}
catch(RuntimeException re){
log.error("find all failed", re);
throw re;
}
}


}

只需要引入成员变量,private HibernateTemplate hibernateTemplate;

而hibernateTemplate需要在spring配置文件中进行配置(实现控制反转),如下:



注意上图中,hibernateTemplate在“控制反转”的时候,sessionFactory作为传入参数。和普通类访问数据库中,如下语句等同:

               WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();  

               SessionFactory factory=wac.getBean(SessionFactory.class);

                HibernateTemplate hh = new HibernateTemplate(factory);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐