码迷,mamicode.com
首页 > Web开发 > 详细

OA项目笔记-从建立接口 dao impl action jsp等框架实现crud

时间:2016-08-02 13:03:11      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

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 { save(entity : T) : void delete(id : Serializable) : void update(entity : T) :void getById(id : Serializable) : T getByIds(ids : Serializable[]) : List findAll() : List } 3,说明: 1,使用泛型的技术,可以在使用时更方便,如:User user = userDao.getById(1L); // 不需要强制转型 2,getById(id : Long) 与 getByIds(ids : Long[]) 不要合并为一个有可变参数的方法, 因为那个用起来就不方便了,比如要经常使用的根据一个id获取一个对象时就很不方便: List list = userDao.getByIds(1L); User user = list.size() > 0 ? list.get(0) : null。 3,以后再有Dao接口就可以继承这个 BaseDao,以拥有基本的增删改查方法,如: UserDao extends BaseDao RoleDao extends BaseDao 2,设计实现类 BaseDaoImpl 1,每个Dao的接口还要有相应的实现类才可以,在每个DaoImpl中都要实现Dao接口中定义的所有方法, 当然也包括公共的增删改查方法(BaseDao中定义的6个基本方法)。 2,每个DaoImpl中都实现一遍公共方法显然是重复的,所以也可以抽取出来为一个父类BaseDaoImpl, 在BaseDaoImpl中实现了BaseDao接口的所有方法,我们的DaoImpl只需要继承他就可以不用重复的写公共方法的实现了。 声明如下: public class BaseDaoImpl implements BaseDao { @Resource private SessionFactory sessionFactory; // 让Spring注入sessionFactory private Class 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 getByIds(Long[] ids) { } public List 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() list list.jsp 删除 delete() toList 添加页面 addUI() addUI addUI.jsp 添加 add() toList 修改页面 editUI() editUI editUI.jsp 修改 edit() toList role_list -------------------------------------------------------------------------------------------------------- 笔记: 设计公共接口及其实现类 公共接口中有公共方法(增删改查),使用泛型,不指定类型 实现类implements公共接口,实现公共接口中的方法增删改查(class BaseDaoImpl implements BaseDao) 设计实体/表 设计实体 --> 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; }

OA项目笔记-从建立接口 dao impl action jsp等框架实现crud

标签:

原文地址:http://www.cnblogs.com/x201509/p/5728716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!