菜鸟手记

Posted on 2012-07-19 23:10 YangSuN 阅读(143) 评论(0)  编辑  收藏

From now on,开始我的菜鸟手记,记录一名菜鸟程序媛的成长过程。
Today,公司昆哥给我的任务是看epp项目的数据流向,先起个blog头,晚上go on

Here we go !
今天学习了SSH struts+spring+hibernate )框架的基本业务流程,带教人曾在我刚进部门的时候就给了我一个miniweb的项目,让我研究,对于一个仅培训过几天Java的我来说,左看右看上看下看也看不出什么感觉,直到今天,在一位同事的针对我们正着手做的项目的一个小模块,带着我将流程又细细走了一遍之后才有了初步的体会。我把研究了一整天的流程贴出来。
首先,整个流程总体来说是
,在表示层中,通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)ActionServlet接收到的Request委派给Web层的相应Action处理,接着,在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性,最后,在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
假设以在页面上显示一个下拉菜单为例子。
1.
表示层的jsp页面

<td class="tdName">下拉菜单:</td>

    <td>

       <s:select  name="refundXiaLaId"   id="refundXiaLaId" cssClass="inputSelt"  list="xiaLaDtoList" headerKey="" headerValue="请选择" listKey="id" listValue="xiaLaName"  value="%{XiaLaId}" theme="simple"/>

    </td>

客户端:http://localhost:8888/my-project/mypack/myFile/my-test-file!myfunc.action

 

 

2WEB(要依据浏览器URL中的类和方法寻找相应的类和方法)

MyTestFileAction.java

@Namespace("/pm/myFile")

        public String myfunc() throws Exception {

        initMyList();

        setDefaultNamedTemplate(MYFILE_MYFUNC);

        return SUCCESS;

}

 

    private void initMyList() {

        myList = new ArrayList<KeyValue>();

        Map<String, String> myMap = XXX.MY_MAP2;

        Set<String> keyList = myMap.keySet();

        for (Iterator<String> it = keyList.iterator(); it.hasNext();) {

            String key = it.next();

            String value = myMap.get(key);

            myList.add(new KeyValue(key, value));

        }

        xiaLaDtoList myRuleExtBiz.queryXiaLaInfo().getXiaLaDtoList();

}

或者

 

 public String queryXiaLasInfo() throws Exception {

        com.my.myproject.web.Page page1 = new com.my.myproject.web.Page ();

        page1.setPageSize(1000);

        page1.setCurrentPage(1);

        System.out.println("queryXiaLasInfo()");

        //保存结果返回

      

        List<XiaLaDto> xiaLasInfoList = myRuleExtBiz.queryXiaLaInfo().getXiaLaDtoList();

        setDefaultNamedTemplate(MYFILE_MYFUN);

        rootJson.put("xiaLasInfoList", xiaLasInfoList);

        return JSON;

}

 

3BIZ(需要依据上一层的myRuleExtBiz.queryXiaLaInfo().getXiaLaDtoList())

 

3.1 biz接口 (在MyRuleExtBiz.java中)

/**

     * 查询所有信息

     */   
public MyResult queryXiaLaInfo();

3.2 biz实现 (在MyRuleExtBizImpl.java中)

@ServiceAnnotation

    public MyResult queryXiaLaInfo() {

        MyResult myResult = new MyResult();

        List<XiaLaDto> dtoList = new ArrayList<XiaLaDto>();

        List<XiaLa> list = null;

        try {

            list = xiaLaService.queryAllXiaLa();

        } catch (Exception e) {

            logger.debug("查询所有-调用查询服务异常,错误信息:{}", e.getMessage());

            logger.error("查询所有-调用查询服务异常", e);

            myResult.fail("query all XiaLas had exception""调用查询所有服务异常");

            return myResult;

        }

        if (CollectionUtils.isNotEmpty(list)) {

            for (XiaLa xiaLa : list) {

                dtoList.add(changeXiaLaToXiaLaDto(xiaLa));

            }

        }

        myResult.setCompanyChangeDate(DateUtil.getDefinableDateStr(companyChangeDate));

        myResult.setXiaLaDtoList(dtoList);

        return myResult;

}

 
3.3 Service(根据上面的 xiaLaService.queryAllXiaLa() 


3.3.1 
声明(在MyRuleExtBizImpl.java中)

public class MyRuleExtBizImpl implements MyRuleExtBiz {

@Autowired

 private XiaLaService     xiaLaService;

}

3.3.2 实现( XiaLaService.java中)

@Service("xiaLaService")

public class XiaLaService {

 

    @Autowired

    XiaLaDao xiaLaDao;

    public List<XiaLa> findAllOnlineXiaLa() {

        return this.xiaLaDao.queryAllOnlineXiaLa();

}

 

(4)DAO(根据上一层的 xiaLaDao.queryAllOnlineXiaLa() 


4.1
接口 (在XiaLaDao.java中)

public interface XiaLaDao extends GenericDao<XiaLa> {

    List<XiaLa> queryAllOnlineXiaLa();

}

 

4.2 实现 (在XiaLaDaoHibernate.java

@SuppressWarnings("unchecked")

    public List<XiaLa> queryAllOnlineXiaLa() {

        String hql = this.queryBuilder.getQueryString("hqlQueryAllXiaLa"null);

        return super.queryListByHql(hql);

}

 

5.xml文件中看(ctrl+H)找hqlQueryAllXiaLa.xml

 <bean id="hqlQueryAllXiaLa" class="java.lang.String">  ,即 beans-pp-hql.xml文件

       <constructor-arg>

           <value><![CDATA[

         from XiaLa xiaLa where xiaLa.parentId=50 and xiaLa.my='1' order by xiaLa.sortId asc

        ]]></value>

       </constructor-arg>

    </bean>

6.4.2中的return super.queryListByHql(hql); 处操作完依次返回 


注:找数据库的表名字可以再在DMO,如myproject-my-dmoXiaLa.java中开头有注解

@Entity

@Table(name = "T_CHANNEL")



 


只有注册用户登录后才能发表评论。


网站导航: