zoukankan      html  css  js  c++  java
  • OA项目笔记-从建立接口 dao impl action jsp等框架实现crud

    1,设计 BaseDao 与 BaseDaoImpl
    1,设计接口 BaseDao
    1,每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作。例
    实体Dao接口实现类
    ========================================================
    User--> UserDao--> UserDaoImpl
    Role--> RoleDao--> RoleDaoImpl
    Department--> DepartmentDao--> DepartmentDaoImpl
    Article--> ArticleDao--> ArticleDaoImpl
    ...
    2,在每个Dao接口中都应有一个基本的增删改查的方法,
    但每个Dao接口中都写一遍就是重复的代码,可以把这些方法抽取到一个父接口中,定义为:
    public interface BaseDao<T> {
    save(entity : T) : void
    delete(id : Serializable) : void
    update(entity : T) :void
    getById(id : Serializable) : T
    getByIds(ids : Serializable[]) : List<T>
    findAll() : List<T>
    }
    3,说明:
    1,使用泛型的技术,可以在使用时更方便,如:User user = userDao.getById(1L); // 不需要强制转型
    2,getById(id : Long) 与 getByIds(ids : Long[]) 不要合并为一个有可变参数的方法,
    因为那个用起来就不方便了,比如要经常使用的根据一个id获取一个对象时就很不方便:
    List<User> list = userDao.getByIds(1L); User user = list.size() > 0 ? list.get(0) : null。
    3,以后再有Dao接口就可以继承这个 BaseDao,以拥有基本的增删改查方法,如:
    UserDao extends BaseDao<User>
    RoleDao extends BaseDao<Role>
    2,设计实现类 BaseDaoImpl
    1,每个Dao的接口还要有相应的实现类才可以,在每个DaoImpl中都要实现Dao接口中定义的所有方法,
    当然也包括公共的增删改查方法(BaseDao中定义的6个基本方法)。
    2,每个DaoImpl中都实现一遍公共方法显然是重复的,所以也可以抽取出来为一个父类BaseDaoImpl,
    在BaseDaoImpl中实现了BaseDao接口的所有方法,我们的DaoImpl只需要继承他就可以不用重复的写公共方法的实现了。
    声明如下:
    public class BaseDaoImpl<T> implements BaseDao<T> {
    @Resource private SessionFactory sessionFactory; // 让Spring注入sessionFactory 
    private Class<T> clazz; // 要想办法得到T的Class
     
    public void save(T entity) { }
    public void delete(Long id) { }
    public void update(T entity) { }
    public T getById(Long id) { }
    public List<T> getByIds(Long[] ids) { }
    public List<T> findAll() { }
    }
    在实现方法时,获取Session的代码为:sessionFactory.getCurrentSession()
    3,在获取clazz时有两种方法
    1,方法一:
    1,把clazz声明成protected修饰符的,这样子类中就可以访问了,
    2,在每个子类的构造方法中传递这个属性的值,如:
    public RoleDaoImpl() { clazz = Role.class; }
    public UserDaoImpl() { clazz = User.class; }
    2,方法二:使用反射的方式:
    1,在BaseDaoImpl的默认构造方法中写如下代码就可以了:
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    clazz = (Class) pt.getActualTypeArguments()[0];
    2,说明:BaseDaoImpl不能直接使用,只能使用他的子类,否则这段代码就无效了。
     
    1,设计实体/表
    设计实体 --> JavaBean --> hbm.xml --> 建表
     
    2,分析有几个功能,对应几个请求。
     
    3,实现功能:
    1,写Action类,写Action中的方法,确定Service中的方法。
    2,写Service方法,确定Dao中的方法。
    3,写Dao方法。
    4,写JSP
     
    ============================
     
    请求数量地址栏
    转发1  不变
    重定向2  变化
     
     
     
    增删改查共4个功能,需要6个请求。
    所以需要相应的6个Action方法,每个Action方法处理一种请求。
     
     
    作用方法名返回值对应的页面
    ----------------------------------------------------
    列表list()listlist.jsp
    删除delete()toList
    添加页面addUI()addUIaddUI.jsp
    添加add()toList
    修改页面editUI()editUIeditUI.jsp
    修改edit()toList
     
    <result name="toList" type="redirectAction">role_list</result>
    --------------------------------------------------------------------------------------------------------
    笔记:
    设计公共接口及其实现类
    公共接口中有公共方法(增删改查),使用泛型,不指定类型
    实现类implements公共接口,实现公共接口中的方法增删改查(class BaseDaoImpl<T> implements BaseDao<T>)
    设计实体/表
    设计实体 --> JavaBean --> hbm.xml ---> 建表
    分析有几个功能,对应几个请求。
    实现功能:
    1,写Action类,写Action中的方法,确定Service中的方法。
    2,写Service方法,确定Dao中的方法。
    3,写Dao方法。
    4,写JSP
     
    将对象放到值栈的map中(jsp中用#获取值):ActionContext.getContext().put("roleList", roleList);
    添加信息方法:
          //1,封装到对象中
    Role role=new Role();
    role.setName(model.getName());
    role.setDescription(model.getDescription());
    //2,保存到数据库
    roleService.save(role); //或直接保存
    return "toList";
    编辑信息页面保存方法:
    将对象保存到对象栈中:ActionContext.getContext().getValueStack().push(role);
    获取栈对象:
     public Role getModel(){
    return model;
     }
  • 相关阅读:
    Visual Studio 2010 Ultimate敏捷利剑:详解Scrum
    Microsoft .Net Micro Framework 3.0 and BIC Survey(2008 WinHEC)
    Visual Studio 2010 Ultimate开发与测试敏捷特性
    博客园开发征途又添新书《.NET软件设计新思维——像搭积木一样搭建软件》出版
    《运用Microsoft Visual Studio 2010落实敏捷软件开发》CSDN大会我的Session(PPT已上传)
    北京微软.Net和博客园俱乐部Open Party两本新书交流活动(已圆满结束)
    使用ASP.Net 3.5 的Ajax与Web服务开发实例
    WCF服务在JavaScript中使用ASP.NET的AJAX方法
    浅谈MVP与ModelViewViewModel(MVVM)设计模式
    荣获“微软2009最有影响力开发者”称号
  • 原文地址:https://www.cnblogs.com/zy2009/p/5728716.html
Copyright © 2011-2022 走看看