SSH 框架实例 操作

来源:互联网 发布:淘宝推广团队 编辑:程序博客网 时间:2024/06/11 04:53

 这个实例采用常用的数据层(dao),业务层(service),展现层(web)三层结构。具体框架图如下: 

具体的 spring,hibernate,struts的框架如何搭建起来的,下次我们再具体分析,下面首先看个简单的实例,本例采用SOA思想 (所有操作面向服务(接口)):

一. 首先我们通过 hibernateHelp工程,利用MYeclipse 插件,生成 相对与数据库TEST中test表的POJO类以及对应的hbm.xml文件,并且将其拷贝到basic工程中的dao包中,如下图:

二.dao 数据层框架中创建针对Test POJO类的操作接口TestDao.java (BaseDao.java是所有数据层操作接口的父类),TestDao.java 简单代码如下:

package com.sac.dao;

import java.util.List;

import com.sac.dao.model.Test;

public interface TestDao extends BaseDao {
 public Test findbyid();
 public List queryAll();
 public List querybyhql(Integer first,Integer number);
 public Integer getQueryNumber();
 public void deleteById(String[] str);
 
}

然后是对接口的hibernate 实现,在hibernate包下,代码如下:

package com.sac.dao.hibernate;

import java.util.List;

import org.hibernate.Query;


import com.sac.dao.TestDao;
import com.sac.dao.model.Test;

public class TestDaoimpl extends BaseDaoImpl implements TestDao {

 public Test findbyid() {
  return (Test)getHibernateTemplate().get(Test.class,new Integer(1));
 
 }
 public List queryAll(){
  String hql="FROM Test";
 
  return getHibernateTemplate().find(hql);
 
 }
 public List querybyhql(Integer first,Integer number){
  String hql="from Test";
  Query q=getSession().createQuery(hql);
  q.setFirstResult(first);
  q.setMaxResults(number);
  
  return q.list();
  
 }
 public Integer getQueryNumber(){
  String hql="FROM Test";
  Query q=getSession().createQuery(hql);
  return q.list().size();
 }
 public void deleteById(String[] str){
      for(int   i=0;i<str.length;i++){
//     Integer j=Integer.parseInt(str[i]);
     String hql = "DELETE Test as T WHERE T.id=?" ;
  Query q = getSession().createQuery(hql) ;
  q.setString(0,str[i]) ;
  q.executeUpdate() ;
      }
 }
}

这里我们就完成了 数据层的接口。那么如何在业务层调用这些接口呢。 这里就涉及到了 spring的 依赖注入(IOC),本实例中所有 配置文件 都在WebRoot包下,如图:

这里是对数据层(dao)的配置:代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <!-- 配置Dao-->

 <bean id="userDao" class="com.sac.dao.hibernate.UserDAOImpl"
  autowire="byName" />
 <bean id="testDao" class="com.sac.dao.hibernate.TestDaoimpl"
  autowire="byName" />

</beans>

当创建名为testDao的对象(其实他是一个接口)的时候,spring就会自动注入这个接口的对象实例。这样就完成了数据层的所有操作!

三. 此时业务层的某个业务要调用数据层的接口。例如:对test表进行一些增删改查的操作 接口 如下图:

首先创建业务层操作接口TestService.java,代码如下:

package com.sac.service;

import java.util.List;

import com.sac.dao.model.Test;
import com.sac.dao.model.User;

public interface TestService {
 public Test loadTest(Integer id);

 public List loadAllTest();
 
 public List loadTestAsPage(Integer first,Integer number);
 
 public Integer gettotal();

 public void saveTestr(Test user);

 public void updateTest(Test user);

 public void removeTest(String[] user);
 
 public void doSomeThing();

}
然后是对接口的实现TestServiceImpl:代码如下:

package com.sac.service.impl;

import java.util.List;

import com.sac.dao.TestDao;
import com.sac.dao.UserDao;
import com.sac.dao.model.Test;
import com.sac.service.TestService;

public class TestServiceimpl implements TestService {

 private TestDao testDao;

 public void setTestDao(TestDao testDao) {
  this.testDao = testDao;
 }

 public void doSomeThing() {

 }

 public List loadAllTest() {

  return testDao.queryAll();
 }

 public Test loadTest(Integer id) {
  return testDao.findbyid();

 }

 public List loadTestAsPage(Integer first, Integer number) {
  return testDao.querybyhql(first, number);
 }

 public Integer gettotal() {
  Integer i=testDao.getQueryNumber();
  return i;
 }

 public void removeTest(String[] user) {
  testDao.deleteById(user);

 }

 public void saveTestr(Test user) {

 }

 public void updateTest(Test user) {

 }

}
这里我们只实现了某几个操作

同理,我们在展现层调用这些接口,进行展现层的操作,配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <!-- 配置Service-->

 <bean id="userService" class="com.sac.service.impl.UserServiceImpl"
  autowire="byName">
 </bean>
 <bean id="testService" class="com.sac.service.impl.TestServiceimpl"
  autowire="byName">
 </bean>

</beans>

四. 下面是展现层利用struts的 MVC 模式 对业务层进行接口调用:

首先我们利用MYeclipse自带的功能 创建一个 action具体的struts我们在下次的文章中具体分析:action包如下图:

这里我们如果是团队开发就需要将ACTION建在我们自己的model下,如图。那么在页面上如何将请求交给特定的action呢。这里就涉及到struts的控制问题。其实这里有两种方法:

1.我们直接交给 struts ,那么只要在struts配置文件中配置:代码如下:

<action path="/test"
   type="com.sac.web.action.moudle1.TestAction" />

2.我们也利用Spring的工厂进行依赖注入,本实例采用这个方法,代码如下

2.1  struts配置代码如下:

<action path="/test"
   type="org.springframework.web.struts.DelegatingActionProxy" /> //将请求交给spring容器管理

2.2 在spring中增加action的配置文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <!-- 配置Action -->

 <bean name="/user"
  class="com.sac.web.action.model1.UserAction" autowire="byName">
 </bean>
 <bean name="/test"
  class="com.sac.web.action.moudle1.TestAction" autowire="byName">
 </bean>
 <bean name="/test_delete"
  class="com.sac.web.action.Test_deleteAction" autowire="byName">
 </bean>
</beans>

我们创建action的代码,这里我们用到了ext2.0的页面实现和json的数据格式:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.sac.web.action.moudle1;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.sac.dao.model.Test;
import com.sac.service.TestService;

public class TestAction extends Action {
 protected final Log log = LogFactory.getLog(getClass());

 private TestService testService;

 public void setTestService(TestService testService) {
  this.testService = testService;
 }

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {

  System.out.println(testService.loadTest(1).getName());
  
  System.out.println(request.getParameter("start"));

  Integer i=Integer.parseInt(request.getParameter("start"));
  Integer h=Integer.parseInt(request.getParameter("limit"));
  Integer j=testService.gettotal();
  List TestList=testService.loadTestAsPage(i, h);


  JSONArray jsonArray = JSONArray.fromObject( TestList);
  String jsonArraypage="{/"count/":"+j+",/"dataSet/":"+jsonArray+"}";
  System.out.println(jsonArraypage);
  response.setContentType("text/json; charset=GBK");
        try {   
         
            response.getWriter().print(jsonArraypage);   
        } catch (IOException e) {   
            e.printStackTrace();  
            return null;   
        }
  
  return null;
 }

}

 这里我们就完成了一个简单的SSH 框架的实现   读者可以在浏览器中敲入:http://localhost:8080/basic/test.do 请求进行测试。

呵呵, 这是本人的第一篇 文章   有错误的地方  请给予帮助,本人邮箱:suishi666881@yahoo.com.cn

希望广交 老师和朋友

原创粉丝点击