分层构建项目

原创 2015年11月18日 23:46:24

分层构建WEB项目

如何分层

···sequence

Created with Raphaël 2.1.0WEB客户端WEB客户端ServletServlet业务逻辑业务逻辑持久化逻辑持久化逻辑JSPJSP客户端客户端request取得页面数据调用业务逻辑方法调用持久化逻辑方法返回返回渲染页面输出页面

每一层只依赖于下一层,不能跨层依赖

每层作用

  • WEB客户端

    该层只负责提交表单到后台的Servlet,通过request取得数据等,打印输出到表格显示

  • Servlet层
    关键的一层,接收到表单数据,调用业务逻辑,处理业务。
    相同的servlet可以先抽象出来一个 抽象类 继承使用,比如对于物料的 增,删,改,查 ,都需要使用业务逻辑 Manager 类,可以 在 init()时即取得该 类的对象,其他类直接继承
    即该层可以需要创建业务逻辑层对象

抽象类

package com.houlu.drp.basedata.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import com.houlu.drp.basedata.dao.ItemDao;
import com.houlu.drp.basedata.manager.ItemManager;
import com.houlu.drp.basedata.manager.ItemManagerImpl;
import com.houlu.drp.util.BeanFactory;


/**
 * 物料servlet抽象
 * @author Administrator
 *
 */
public abstract class AbstractItemServlet extends HttpServlet {

    protected ItemManager itemManager;

    public AbstractItemServlet(){

        System.out.println("AbstractItemServlet-----------Construct");
    }

    @Override
    public void init() throws ServletException{

    //  itemManager = (ItemManager)BeanFactory.getInstance().getServiveObject("itemManager");

        BeanFactory beanFactory = (BeanFactory)this.getServletContext().getAttribute("beanFactory");
        itemManager = (ItemManager)beanFactory.getServiveObject(ItemManager.class);
    }
}

继承类

package com.houlu.drp.basedata.web;

import java.io.IOException;

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

import com.houlu.drp.basedata.domain.Item;
import com.houlu.drp.basedata.manager.ItemManager;
import com.houlu.drp.basedata.manager.ItemManagerImpl;
import com.houlu.drp.datadict.domain.ItemCategory;
import com.houlu.drp.datadict.domain.ItemUnit;

public class AddItemServlet extends AbstractItemServlet {

    private ItemManager itemManager;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //取得表单数据
        String itemNo = request.getParameter("itemNo");
        String itemName = request.getParameter("itemName");
        String spec = request.getParameter("spec");
        String pattern = request.getParameter("pattern");
        String category = request.getParameter("category");
        String unit = request.getParameter("unit");

        //构造item对象
        Item item = new Item();
        item.setItemNo(itemNo);
        item.setItemName(itemName);
        item.setSpec(spec);
        item.setPattern(pattern);


        //构造物料类别
        ItemCategory itemCategory = new ItemCategory();
        itemCategory.setId(category);
        item.setItemCategory(itemCategory);

        //构造物料单位
        ItemUnit itemUnit = new ItemUnit();
        itemUnit.setId(unit);
        item.setItemUnit(itemUnit);

    //  itemManager = new ItemManagerImpl();

        try {
            itemManager.addItem(item);
        } catch (Exception e) {
            request.setAttribute("add_message", "添加物料失败,失败代码 ["+itemNo+"]");
        }
        //重定向
        //response.sendRedirect(requset.getContextPath()+"/basedata/item_maint.jsp");
        request.setAttribute("add_message", "添加成功");
        //转发
        request.getRequestDispatcher("/basedata/item_maint.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
  • 业务逻辑
    该层只与业务逻辑打交道,该层创建DAO层的connection
    业务逻辑层创建固定接口,然后不同类实现。

业务逻辑接口

package com.houlu.drp.basedata.manager;

import java.sql.Connection;

import com.houlu.drp.basedata.domain.Item;
import com.houlu.drp.util.PageModel;

/**
 * 物料业务逻辑层接口
 * @author Administrator
 *
 */
public interface ItemManager {

    /**
     * 添加物料
     * @param conn
     * @param item
     */
    public void addItem(Item item);

    /**
     * 根据物料代码集合删除
     * @param conn
     * @param itemNos
     */
    public void delItem(String[] itemNos);

    /**
     * 修改物料
     * @param conn
     * @param item
     */
    public void modifyItem(Item item);

    /**
     * 根据物料代码查询
     * @param conn
     * @param itemNo
     * @return
     */
    public Item findItemById(String itemNo);

    /**
     * 根据条件分页查询
     * @param pageNo
     * @param pageSize
     * @param condation
     * @return
     */
    public PageModel findItemList(int pageNo, int pageSize, String condation);
}

实现类

package com.houlu.drp.basedata.manager;

import java.sql.Connection;

import com.houlu.drp.basedata.dao.ItemDao;
import com.houlu.drp.basedata.dao.ItemDaoFactory;
import com.houlu.drp.basedata.dao.ItemDaoFactory4SqlServer;
import com.houlu.drp.basedata.domain.Item;
import com.houlu.drp.util.ApplicationException;
import com.houlu.drp.util.BeanFactory;
import com.houlu.drp.util.DbUtil;
import com.houlu.drp.util.PageModel;
import com.houlu.drp.util.XmlConfigReader;

/**
 * 物料管理接口实现
 * @author Administrator
 *
 */
public class ItemManagerImpl implements ItemManager {

    private ItemDao itemDao = null;

    public ItemManagerImpl(){
        //System.out.println("new------------------------ItemManagerImplClass");
        itemDao = (ItemDao)BeanFactory.getInstance().getDaoObject(ItemDao.class);
    }

    public void addItem(Item item) {
        Connection conn = null;

        try {
            conn = DbUtil.getConnection();
                if(itemDao.findItemById(conn, item.getItemNo())!=null){
                    throw new ApplicationException("该代码物料已经存在");
                }
            itemDao.addItem(conn, item);
        } finally{
            DbUtil.close(conn);
        }

    }

    @Override
    public void delItem(String[] itemNos) {
        // TODO Auto-generated method stub

    }

    @Override
    public void modifyItem(Item item) {
        // TODO Auto-generated method stub

    }

    @Override
    public Item findItemById(String itemNo) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public PageModel findItemList(int pageNo, int pageSize, String condation) {
        Connection conn = null;
        PageModel pageModel = null;
        try {
            conn = DbUtil.getConnection();
            pageModel = itemDao.findItemList(conn, pageNo, pageSize, condation);
        } finally{
            DbUtil.close(conn);
        }

        return pageModel;
    }


}
  • 持久化层
    该层与数据库打交道,取得业务逻辑层的connection进行sql操作

上层接口

package com.houlu.drp.basedata.dao;

import java.sql.Connection;

import com.houlu.drp.basedata.domain.Item;
import com.houlu.drp.util.PageModel;

/**
 * 物料数据访问接口
 * @author Administrator
 *
 */
public interface ItemDao {

    /**
     * 添加物料
     * @param conn
     * @param item
     */
    public void addItem(Connection conn,Item item);

    /**
     * 根据物料代码集合删除
     * @param conn
     * @param itemNos
     */
    public void delItem(Connection conn,String[] itemNos);

    /**
     * 修改物料
     * @param conn
     * @param item
     */
    public void modifyItem(Connection conn,Item item);

    /**
     * 根据物料代码查询
     * @param conn
     * @param itemNo
     * @return
     */
    public Item findItemById(Connection conn,String itemNo);

    /**
     * 根据条件分页查询
     * @param pageNo
     * @param pageSize
     * @param condation
     * @return
     */
    public PageModel findItemList(Connection conn,int pageNo, int pageSize, String condation);

}

具体实现

package com.houlu.drp.basedata.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.houlu.drp.basedata.domain.Item;
import com.houlu.drp.datadict.domain.ItemCategory;
import com.houlu.drp.datadict.domain.ItemUnit;
import com.houlu.drp.util.ApplicationException;
import com.houlu.drp.util.DbUtil;
import com.houlu.drp.util.PageModel;

public class ItemDao4SqlServerImpl implements ItemDao {

    @Override
    public void addItem(Connection conn, Item item) {
        StringBuffer sb = new StringBuffer();
        sb.append("INSERT INTO T_ITEMS ");
        sb.append("(ITEM_NO, ITEM_CATEGORY_ID, ITEM_UNIT_ID, ITEM_NAME, SPEC, PATTERN) ");
        sb.append("VALUES (?,?,?,?,?,?)");
        String sql = sb.toString();

        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, item.getItemNo());
            pstmt.setString(2, item.getItemCategory().getId());
            pstmt.setString(3, item.getItemUnit().getId());
            pstmt.setString(4, item.getItemName());
            pstmt.setString(5, item.getSpec());
            pstmt.setString(6, item.getPattern());
            pstmt.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
            throw new ApplicationException("添加物料失败");
        } finally{
            DbUtil.close(pstmt);
        }

    }

    @Override
    public void delItem(Connection conn, String[] itemNos) {
        // TODO Auto-generated method stub

    }

    @Override
    public void modifyItem(Connection conn, Item item) {
        // TODO Auto-generated method stub

    }

    @Override
    public Item findItemById(Connection conn, String itemNo) {
        StringBuffer sb = new StringBuffer();
        sb.append("select i.ITEM_NO,i.ITEM_NAME,I.SPEC,I.PATTERN,i.ITEM_CATEGORY_ID as category_id, d1.NAME as category_name,i.ITEM_UNIT_ID as unit_id, d2.NAME as unit_name ");
        sb.append("from T_ITEMS i,T_DATA_DIC d1, T_DATA_DIC d2 ");
        sb.append("where i.ITEM_CATEGORY_ID = d1.ID and i.ITEM_UNIT_ID = d2.ID and i.ITEM_NO = ?");
        String sql = sb.toString();

        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Item item = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, itemNo);
            rs = pstmt.executeQuery();
            if(rs.next()){
                item = new Item();
                item.setItemNo(rs.getString("item_no"));
                item.setItemName(rs.getString("item_name"));
                item.setSpec(rs.getString("spec"));
                item.setPattern(rs.getString("pattern"));

                //构造ItemCategory
                ItemCategory ic = new ItemCategory();
                ic.setId(rs.getString("category_id"));
                ic.setName(rs.getString("category_name"));
                item.setItemCategory(ic);

                //构造ItemUnit
                ItemUnit iu = new ItemUnit();
                iu.setId(rs.getString("unit_id"));
                iu.setName(rs.getString("unit_name"));
                item.setItemUnit(iu);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApplicationException("根据物料代码查询出错");
        }finally{
            DbUtil.close(rs);
            DbUtil.close(pstmt);
        }

        return item;
    }

    @Override
    public PageModel findItemList(Connection conn,int pageNo, int pageSize, String condation) {
        StringBuffer sb = new StringBuffer();
        sb.append("select * from( ");
        sb.append("select ROW_NUMBER() over(order by i.ITEM_NO) as r2,* from( ");
        sb.append("select ");
        sb.append("ROW_NUMBER() over(order by a.ITEM_NO) as r1,a.ITEM_NO,a.item_name,a.SPEC,a.PATTERN,a.ITEM_CATEGORY_ID,b.NAME as item_category_name,a.ITEM_UNIT_ID,c.NAME as item_unit_name ");
        sb.append("from T_ITEMS a,T_DATA_DIC b,T_DATA_DIC c where a.ITEM_CATEGORY_ID=b.ID and a.ITEM_UNIT_ID = c.ID ");
        if(condation!=null&&!"".equals(condation)){
            sb.append("and a.ITEM_NAME like '"+ condation +"%' ");
        }
        sb.append(") i where i.r1<= ? ");
        sb.append(")o where o.r2 > ? ");

        String sql = sb.toString();

    //  System.out.println(sql);
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        PageModel pageModel = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, pageNo*pageSize);
            pstmt.setInt(2, (pageNo-1)*pageSize);
            rs = pstmt.executeQuery();
            List<Item> itemList = new ArrayList<Item>();
            while(rs.next()){
                Item item = new Item();
                item = new Item();
                item.setItemNo(rs.getString("item_no"));
                item.setItemName(rs.getString("item_name"));
                item.setSpec(rs.getString("spec"));
                item.setPattern(rs.getString("pattern"));

                //构造ItemCategory
                ItemCategory ic = new ItemCategory();
                ic.setId(rs.getString("item_category_id"));
                ic.setName(rs.getString("item_category_name"));
                item.setItemCategory(ic);

                //构造ItemUnit
                ItemUnit iu = new ItemUnit();
                iu.setId(rs.getString("item_unit_id"));
                iu.setName(rs.getString("item_unit_name"));
                item.setItemUnit(iu);

                itemList.add(item);
            }
            pageModel = new PageModel();
            pageModel.setPageNo(pageNo);
            pageModel.setPageSize(pageSize);
            pageModel.setList(itemList);

            //根据条件取得记录数
            int totalRecorders = getTotalRecords(conn, condation);
            pageModel.setTotalRecords(totalRecorders);

        } catch (Exception e) {
            e.printStackTrace();
            throw new ApplicationException("分页查询失败");
        }finally{
            DbUtil.close(rs);
            DbUtil.close(pstmt);
        }

        return pageModel;
    }

    /**
     * 根据条件取得记录数
     * @param conn
     * @param condation
     * @return
     * @throws SQLException
     */
    private int getTotalRecords(Connection conn,String condation)throws SQLException{
        String sql = "select count(*) from t_items ";
            if(condation!=null&&!"".equals(condation)){
                sql += "where ITEM_NAME like '"+ condation +"%' ";      
            }
        //System.out.println(sql);
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        int temp=0;
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            rs.next();
            temp = rs.getInt(1);
        }finally{
            DbUtil.close(rs);
            DbUtil.close(pstmt);
        }
        return temp;
    }


    public static void main(String[] args){
        Connection conn = DbUtil.getConnection();
        ItemDao itemDao = new ItemDao4SqlServerImpl();
        itemDao.findItemList(conn, 1, 5, "当");
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

学习总结以及项目中的运用二:分层模型与协同开发

MVC 分层模型对于协作开发的便利性

多module pom项目 构建 maven

  • 2017-03-28 16:52
  • 629KB
  • 下载

maven分层项目

上一篇记录了maven项目的创建,由于现在项目都是分层搭建,这次记录一篇maven分层项目的创建。参考的http://www.cnblogs.com/xdp-gacl/p/4242221.html。感...

一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)

最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA。 有点挑战,做完了,会有很大进步。 本篇,以我亲自画的3个图,阐述一下架构设计。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)