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> {
 6     /**
 7      * 根据id查询实体对象
 8      * @param id
 9      * @return
10      */
11     public T findById(Long id);
12     /**
13      * 根据ids查询实体对象集合
14      * @param ids
15      * @return
16      */
17     public List<T> findByIds(Long[] ids);
18     /**
19      * 查询所有
20      * @return
21      */
22     public List<T> findAll();
23     /**
24      * 保存实体对象
25      * @param entity
26      */
27     public void save(T entity);
28     /**
29      * 更新实体对象
30      * @param entity
31      */
32     public void update(T entity);
33     /**
34      * 根据id删除实体对象
35      * @param id
36      */
37     public void delete(Long id);
38 }

BaseDao.java

三 在该包下继续写一个BaseDao的实现类BaseDaoImpl.java,实现所有的方法,具体内容如下:

 1 package cn.clear.oa.base;
 2
 3 import java.lang.reflect.ParameterizedType;
 4 import java.util.Collections;
 5 import java.util.List;
 6
 7 import javax.annotation.Resource;
 8
 9 import org.hibernate.Session;
10 import org.hibernate.SessionFactory;
11
12
13 @SuppressWarnings("unchecked")
14 public abstract class BaseDaoImpl<T> implements BaseDao<T> {
15
16     @Resource
17     private SessionFactory sessionFactory;//引入SessionFactory
18     private Class<T> clazz;//具体对象
19
20     public BaseDaoImpl(){
21         //获取泛型父类
22         ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
23         //获取最终的具体实体对象
24         this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
25         //测试拿到的是否所需对象
26         System.out.println("clazz---> "+clazz);
27     }
28     /**
29      * 获取Session对象,使用protected,子类可以直接使用
30      * @return
31      */
32     protected Session getSession(){
33         return sessionFactory.getCurrentSession();
34     }
35
36     public T findById(Long id) {
37         if(id == null){
38             return null;
39         }
40         return (T) getSession().get(clazz, id);
41     }
42
43     public List<T> findByIds(Long[] ids) {
44
45         if(ids == null &&  ids.length == 0){
46             return Collections.emptyList();
47         }
48
49         return getSession().createQuery(//
50                 "FROM "+clazz.getSimpleName()+" WHERE id IN(:ids)")//
51                 .setParameter("ids", ids)//
52                 .list();
53     }
54
55     public List<T> findAll() {
56
57         return getSession().createQuery(//
58                 "FROM "+clazz.getSimpleName())//
59                 .list();
60     }
61
62     public void save(T entity) {
63
64         getSession().save(entity);
65     }
66
67     public void update(T entity) {
68         getSession().update(entity);
69     }
70
71     public void delete(Long id) {
72
73         Object obj = findById(id);
74         if(obj!=null){
75             getSession().delete(obj);
76         }
77
78     }
79
80 }

BaseDaoImpl.java

四 我们使用我们已有的实体类来测试一下Dao的功能。

  1.在Dao层写一个UserDao.java的接口类,继承BaseDao.java,内容如下:

1 package cn.clear.oa.dao;
2
3 import cn.clear.oa.base.BaseDao;
4 import cn.clear.oa.domain.User;
5
6 public interface UserDao extends BaseDao<User>{
7
8 }

UserDao.java

  2.在DaoImpl层写userdao的实现类UserDaoImpl.java,内容如下:

 1 package cn.clear.oa.dao.impl;
 2
 3 import org.springframework.stereotype.Repository;
 4
 5 import cn.clear.oa.base.BaseDaoImpl;
 6 import cn.clear.oa.dao.UserDao;
 7 import cn.clear.oa.domain.User;
 8 @Repository
 9 public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
10
11 }

UserDaoImpl.java

五 我们在tset层写一个TestBaseDao.java的类,用来测试dao功能:

 1 package cn.clear.oa.test;
 2
 3 import org.junit.Test;
 4 import org.springframework.stereotype.Service;
 5
 6 import cn.clear.oa.dao.RoleDao;
 7 import cn.clear.oa.dao.UserDao;
 8 import cn.clear.oa.dao.impl.RoleDaoImpl;
 9 import cn.clear.oa.dao.impl.UserDaoImpl;
10
11 @Service
12 public class TsetBaseDao {
13     @Test
14     public void test() throws Exception {
15         UserDao userDao = new UserDaoImpl();
16
17     }
18 }

TsetBaseDao.java

  执行单点测试,如果控制台打印出下面的信息,说明成功:

  clazz---> class cn.clear.oa.domain.User

至此,我们将最基本的Dao数据操作已经写完了。

      

时间: 2024-10-13 17:22:23

OA项目4:BaseDao设计的相关文章

OA项目之权限设计②

1.接着昨天的今天到了设计怎样成功的实现权限分配的功能,首先我们看下这些功能的过程例如以下图: 首先是从user的list页面看到设置权限的button,点击进去进入设置权限的页面 进入设置权限页面,看到的是权限的数据例如以下图: 分析这当中有几个请求:点击设置权限进入权限页面,这都是在Role的Action中做的跟他的改动感觉几乎相同,可是须要注意的是从设置权限进入到分配权限传递的是id.进入页面后我们须要回显,而且将全部的权限数据都显示在分配权限的页面中,这都是要准备的. 以下就在RoleA

OA项目之权限设计③

1.接着上一篇来,上一篇我们写好了基本的要求,还需要加上的有回显数据的方法,我们需要知道其实在页面传递的都是id显示的是id对应实体的name,所以想要回显就是需要得到privilegeIds,如果像上一篇在jsp利用checkbox来显示的话,虽然能显示但是不方便不好换行,显示树状结构也很麻烦,所以我们改善一下利用自己在jsp中写一段代码来实现同样的功能,代码Jsp代码如下: <%@ page language="java" import="java.util.*&q

OA项目15:权限管理实体设计及映射

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 实体设计: 1.权限实体设计: 1)属性设计: 主键:id 关联属性:Set<Role> roles,Set<Privilege> privileges,Privilege parent,Set<Privilege> children 一般属性:name,url 特殊属性:暂无 2)涉及到3个实体:User(用户),Role(

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

12天OA项目

OA(Office Automation):办公自动化--辅助管理,提高办公效率的系统. OA的功能: 文字处理,申请审批,办公用品管理,公文管理,会议管理,资料管理,知识管理,电子邮件等... 根据用户实际需求确定实际项目的功能. BBS--论坛 CRM--客户关系管理系统 CMS--内容管理系统 1.软件开发的简单步骤: <1.需求分析 <2.分析设计 <3.编码实现 <4.测试验证(修改) <5.部署与后期维护 2.每个步骤具体要做什么,谁来做? 3.我们要做什么? 设

OA项目12:系统管理之用户管理

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 之前在第8节时已经将User实体及映射文件建立好了,所以设计实体已经完成了,下面来做功能了. 二 我们对照静态页面看用户管理页面分析发现,增删改查功能跟之前一样,多了一个初始化密码的请求.当然,这不是问题,下面开始做功能吧! 三 开发: 1.写action及struts2映射,具体如下: 1)UserAction.java: 1 package cn.

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项目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

【Java EE 学习第58-67天】【OA项目练习】【JBPM工作流的使用】

OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就是一个java 框架. 学习JBPM最重要的就是学习数据库中的18张表,只要熟练掌握了这18张表,学习JBPM就大功告成了. 一.JBPM框架搭建 1.到JBPM官方网站上下载需要的jar包.源代码.文档等等 http://www.jbpm.org/ 比较流行的JBPM版本是JBPM4.4,本次使用