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() list list.jsp
删除 delete() toList
添加页面 addUI() addUI addUI.jsp
添加 add() toList
修改页面 editUI() editUI editUI.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;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值