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
时间: 2024-10-14 12:54:58
OA项目笔记-从建立接口 dao impl action jsp等框架实现crud的相关文章
OA项目---笔记
userAdd.jsp中---------岗位add<s:select name="roleIds" multiple="true" size="10" list="#roleList" listKey="id" listValue="name"></s:select> 按住Ctrl键可以多选或取消选择 部门add<s:select name="d
《BI项目笔记》历年感官评吸质量均值变化分析Cube的建立
原文:<BI项目笔记>历年感官评吸质量均值变化分析Cube的建立 分析主题主要维度:烟叶级别.烟叶级别按等级信息.烟叶级别按分级标准(标准维度)产地(父子维度)检测时间(时间维度,以Tqc_Raw_SmokingTest .CheckTime字段派生CheckDate字段)样品维度 主要指标: 香气特征_清香_平均值香气特征_甜香_平均值香气特征_焦香_平均值烟气特征_浓度_平均值烟气特征_劲头_平均值质量特征_香气质_平均值质量特征_香气量_平均值质量特征_杂气_平均值质量特征_刺激_平均值
《BI项目笔记》历年理化指标分析Cube的建立
原文:<BI项目笔记>历年理化指标分析Cube的建立 该系统属于数据仓库系统,与传统的管理信息系统有本质差别,是“面向主题”设计的.“面向主题”的方式,既有利于数据组织和利用,又有利于用户的理解和使用. 分析主题主要维度:烟叶级别.烟叶级别按等级信息.烟叶级别按分级标准(标准维度) 产地(父子维度) 检测时间(时间维度,以Tqc_Raw_Chemistry .CheckTime字段派生CheckDate字段) 样品维度增加按样品来源.按打叶计划层次结构 主要指标:总糖% TotalSugar还
OA项目的计划和开发和开发流程
1 建立界面原型 center.jsp main.jsp left.jsp -. 2 建立相关文件文件 定义包名:com.oa.(model(模型层), dao(数据访问层), service() ,Action -) 确定Model 层的实体类(有共同属性的实体应该继承同一个父类(共同属性放在父类中)) (Company,Department, Position,Person,父类Party) 确定Service接口方法() 确定Dao接口定义方法() Struts.xml applicati
OA项目4:BaseDao设计
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 为什么要设计BaseDao? 为了减少代码量,用最少的代码实现最多的功能. 二 建立一个cn.clear.oa.base包,在包下写一个接口类,有最基本的增删改查功能,具体内容如下: 1 package cn.clear.oa.base; 2 3 import java.util.List; 4 5 public interface BaseDao<T> {
OA项目11:部门列表树状显示功能及其他代码优化
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 使用递归使部门列表树状显示: 1.写一个工具类,实现通过顶级部门查询所有,具体如下: 1 package cn.clear.oa.util; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.List; 6 7 import cn.clea
OA项目12:系统管理之用户管理
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 之前在第8节时已经将User实体及映射文件建立好了,所以设计实体已经完成了,下面来做功能了. 二 我们对照静态页面看用户管理页面分析发现,增删改查功能跟之前一样,多了一个初始化密码的请求.当然,这不是问题,下面开始做功能吧! 三 开发: 1.写action及struts2映射,具体如下: 1)UserAction.java: 1 package cn.
OA项目5:系统管理之岗位管理
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 设计实体和表 1.建立javabean,建立角色类Role.java,具体如下: 1 package cn.clear.oa.domain; 2 3 public class Role { 4 5 private Long id; 6 private String name; 7 private String description; 8 public Long
OA项目7:系统管理之部门管理
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 根据需求,根据前台页面功能设计实体,创建javabean.Department.java,内容如下(先不处理上下级部门): 1 package cn.clear.oa.domain; 2 3 public class Department { 4 5 private Long id; 6 private String name; 7 private String