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;
 }

OA项目笔记-从建立接口 dao impl action jsp等框架实现crud的更多相关文章

  1. OA项目笔记

    一.创建项目构架 1.创建一个Maven的web工程 1.1修改编译器版本 <properties> <project.build.sourceEncoding>UTF-8&l ...

  2. ASP.Net MVC OA项目笔记<六>

    1.1.1 开始写业务,先写业务的实现再写业务的接口 业务类中也是有写增删改查公用的方法 引用Model,IDAL,DALFactory BLL添加两个类 UserInfoService,BaseSe ...

  3. ASP.Net MVC OA项目笔记<五>

    1.1.1  抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解 ...

  4. ASP.Net MVC OA项目笔记<二>

    1.1.0 创建数据层 1.1.1 CZBK.ItcastOA.IDAL 引用 CZBK.ItcastOA.Model 1.2.1 给IDAL添加一个接口IUserInfoDal 里面写增删改查分页的 ...

  5. ASP.Net MVC OA项目笔记<四>

    1.1.1 EF线程唯一 在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类 1.1.2 为了防止相互引用,循环引用,所以这个工 ...

  6. ASP.Net MVC OA项目笔记<三>

    1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...

  7. ASP.Net MVC OA项目笔记<一>

    1.1.1 新建空白解决方案CZBK.ItcastOA 1.2.1 添加类库 1.2.2 同上添加多个类库 生成的 class1.cs先不用删除,删了的后,后面可能没办法直接点引用 1.3.1 添加表 ...

  8. 05传智_jbpm与OA项目_部门模块中增加部门的jsp页面增加一个在线编辑器功能

    这篇文章讲的是在线编辑器功能,之前的部门模块中,增加部门的功能jsp页面起先是这么做的.

  9. Django商城项目笔记No.10用户部分-登录接口

    Django商城项目笔记No.10用户部分-登录接口 添加url路由 接下来第二步,增加返回内容: 增加结果如下: 配置:上边的方法定义了返回的内容都有哪些,那这个方法jwt还不知道,需要配置: 修改 ...

随机推荐

  1. 学习SVG系列(2):SVG图形系列

    SVG形状: 矩形 <rect> 圆形 <circle> 椭圆 <ellipse> 线 <line> 折线 <polyline> 多边形 & ...

  2. Java面向对象基础知识汇总

    OOP:Orient Object Programe AOP:Aspect Orient Programe 封装:Encapsulation 继承:Inheritance 多态:Polymorphmi ...

  3. 后缀名“.dll .obj .lib”和“ .so .o .a”文件的区别含义

    (1) .dll .obj .lib使用在windows平台下.        .dll:动态链接库,作为共享函数库的可执行文件.        .obj:目标文件,相当于源代码对应的二进制文件,未经 ...

  4. Ansible-Tower快速入门-7.配置实时事件【翻译】

    配置实时事件 在tower的菜单中,在接近用户菜单处有一个带有颜色的小点,这个带颜色的小点显示tower的实时事件功能的状态 如果这个小点是绿色的,表示运行正常,如果这个小点是红色或橙色,表示实时事件 ...

  5. Javascript 事件对象(四)一个事件绑定多个不同的函数

    给一个对象绑定多个事件处理函数: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-T ...

  6. (利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节

    说明:这个不是在进行微信公众号开发,也就是说在不能获取用户openid的前提下做的下面操作 1.动机:最近有个微信活动(关注了服务号的可以免费领取礼品),要做这么一个功能,活动的入口在微信服务号的菜单 ...

  7. jQuery:cookie插件的使用

    Jquery插件就是在Jquery基础之上,开发的基于Jquery的javascript库. 在Jquery中,引入cookie插件后,可以很方便的定义某个cookie的名称,并设置cookie值.通 ...

  8. 控制面板中java设置项如何删除

    卸载jdk或者jre后,如果控制面板中仍然有java项,重新安装可能仍然无法设置,提示找不到"javacpl.exe" 解决办法:删除C:\windows\system32\下的j ...

  9. 使用 itext、flying-saucer 实现html转PDF(转)

    转自 http://blog.csdn.net/mhouwei62/article/details/51394804 表示感谢 itext-2.1.7高于此版本已经更新为AGPL授权,不建议使用. 添 ...

  10. FTP应答码&响应码

    2016-06-16 00:57:25 110: 重新启动标记应答. 120: 在n分钟内准备好 125: 连接打开准备传送 150: 打开数据连接200: 命令成功202: 命令失败211: 系统状 ...