用于所有dao里边会有许多相同的方法,例如save,update等等。应此设计一个basedao,所有dao都继承它。这样可以省去许多工作量。

basedao如下

  1. package cn.itcast.oa.base;
  2.  
  3. import java.util.List;
  4.  
  5. public interface BaseDao<T> {
  6.  
  7. /**
  8. * 保存实体
  9. *
  10. * @param entity
  11. */
  12. void save(T entity);
  13.  
  14. /**
  15. * 删除实体
  16. *
  17. * @param id
  18. */
  19. void delete(Long id);
  20.  
  21. /**
  22. * 更新实体
  23. *
  24. * @param entity
  25. */
  26. void update(T entity);
  27.  
  28. /**
  29. * 按id查询
  30. *
  31. * @param id
  32. * @return
  33. */
  34. T getById(Long id);
  35.  
  36. /**
  37. * 按id查询
  38. *
  39. * @param ids
  40. * @return
  41. */
  42. List<T> getByIds(Long[] ids);
  43.  
  44. /**
  45. * 查询所有
  46. *
  47. * @return
  48. */
  49. List<T> findAll();
  50.  
  51. }

  basedaoimpl如下

  1. package cn.itcast.oa.base;
  2.  
  3. import java.lang.reflect.ParameterizedType;
  4. import java.util.List;
  5.  
  6. import javax.annotation.Resource;
  7.  
  8. import org.hibernate.Session;
  9. import org.hibernate.SessionFactory;
  10.  
  11. @SuppressWarnings("unchecked")
  12. public abstract class BaseDaoImpl<T> implements BaseDao<T> {
  13.  
  14. @Resource
  15. private SessionFactory sessionFactory;
  16. private Class<T> clazz;
  17.  
  18. public BaseDaoImpl() {
  19. // 使用反射技术得到T的真实类型
  20. ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型
  21. this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型
  22. System.out.println("clazz ---> " + clazz);
  23. }
  24.  
  25. /**
  26. * 获取当前可用的Session
  27. *
  28. * @return
  29. */
  30. protected Session getSession() {
  31. return sessionFactory.getCurrentSession();
  32. }
  33.  
  34. public void save(T entity) {
  35. getSession().save(entity);
  36. }
  37.  
  38. public void update(T entity) {
  39. getSession().update(entity);
  40. }
  41.  
  42. public void delete(Long id) {
  43. Object obj = getById(id);
  44. if (obj != null) {
  45. getSession().delete(obj);
  46. }
  47. }
  48.  
  49. public T getById(Long id) {
  50. return (T) getSession().get(clazz, id);
  51. }
  52.  
  53. public List<T> getByIds(Long[] ids) {
  54. return getSession().createQuery(//
  55. "FROM User WHERE id IN (:ids)")//
  56. .setParameterList("ids", ids)//
  57. .list();
  58. }
  59.  
  60. public List<T> findAll() {
  61. return getSession().createQuery(//
  62. "FROM " + clazz.getSimpleName())//
  63. .list();
  64. }
  65.  
  66. }

  

从0开始学习ssh之basedao的更多相关文章

  1. 从0开始学习ssh之搭建环境

    ssh即struts+spring+Hibernate,从头开始学习这个框架. struts环境配置,首先在apps目录下找到struts2-blank-xxx.war这个文件,这是已经发布好的war ...

  2. 从0开始学习ssh之资源分类

    更目录下面,新建config用于放配置文件,新建test用于放置测试文件.src目录用于放置源代码.由于ssh是三层,因此新建三层包(dao,service,view).其中dao和service还有 ...

  3. 从0开始学习ssh之岗位管理

    岗位应该有如下属性,id.名称.说明.新建role.java.添加id,name,description并增加三个的get set方法. 之后建立Role.hbm.xml 并加入到applicatio ...

  4. 从0开始学习ssh之日志工具与配置log4j

    添加slf4j-api-1.6.1,slf4j-log4j12-1.6.1,log4j-1.2.15三个jar包到lib文件夹下就可以使用log4j日志文件.具体配置在log4j.properties ...

  5. 学习SSH框架

    1.SSH框架的认知 在做相关的java的网页的开发制作时,良好的层次分解是十分有比要的,所以我们在云涌第三方的框架之下来简化还有名了我们相关的网站的开发. SSH框架实则为Struct + spri ...

  6. 从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】

    本文转载自:http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  7. 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」

    之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作 ...

  8. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  9. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

随机推荐

  1. 靠谱助手 BlueStacks

    靠谱助手  BlueStacks 安卓虚拟机

  2. MAMP 安装 php 扩展

    1.官网下载所对应的php 版本http://php.net/get/php-5.3.29.tar.gz/from/a/mirror 2.解压 找到需要的扩展目录 例如我要的是shmopcd ~/Do ...

  3. Docker的镜像 导出导入

    查看当前已经安装的镜像 vagrant@vagrant:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7.22 ...

  4. [JZOJ3235] 数字八

    题目 题目大意 给你一个二维的图,其中.代表完好,*代表有缺陷. 现在要在图上刻一个数字\(8\),满足: 由两个矩形组成. 每个矩形中必须有空隙在内部,也就是说,至少为\(3*3\)的矩形. 上矩形 ...

  5. spring整合Quartz框架过程,大家可以参考下

    这篇文章详细介绍了spring集成quartz框架流程,通过示例代码进行了详细说明,对学习或任务有参考学习价值,并可供需要的朋友参考. 1.quartz框架简介(m.0831jl.com) quart ...

  6. SpringBoot入门到出家

    SpringBoot的Actuator监控 Actuator:对系统的监控 是SpringBoot提供的对应用系统监控的集成功能,可以对系统进行配置查看,相关功能统计等,在Spring Cloud中, ...

  7. python定时任务模块APScheduler

    一.简单任务 定义一个函数,然后定义一个scheduler类型,添加一个job,然后执行,就可以了 5秒整倍数,就执行这个函数 # coding:utf-8 from apscheduler.sche ...

  8. Objective-C 中的 Meta-class 是什么?

    在这篇文章中,我关注的是 Objective-C 中的一个陌生的概念-- meta-class.在 Objective-C 中的每个类都有一个相关联的 meta-class,但是你很少会直接使用 me ...

  9. error LNK2001: unresolved external symbol _main解决办法(zz)

    error LNK2001: unresolved external symbol _main解决办法   解决外部符号错误:_main,_WinMain@16,__beginthreadex -!t ...

  10. iOS开发之SceneKit框架--SCNNode.h

    1.SCNNode简介 SCNNode是场景图的结构元素,表示3D坐标空间中的位置和变换,您可以将模型,灯光,相机或其他可显示内容附加到该元素.也可以对其做动画. 2.相关API简介 初始化方法 // ...