在ssh框架中抽取BaseDao简单的CRUD

SSH全注解整合demo 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),演示搭建项目架构原型。 项目架构原型:Struts2.3.16+Spring4.1.1+Hibernate4.3.6。 此外,还有:log4j、slf4j、ehcache等知识点。 参考文档:(感谢下边的两位原创作者,另外我在结合两个优点的基础之上,把所有的配置换成了注解的配置方案。) http://blog.youkuaiyun.com/songanling/article/details/22454973 http://1194867672-qq-com.iteye.com/blog/1522906 立即下载

        在SSH框架中抽取BaseDao简单的CRUD

   在开发采用Struts2+Spring+hibernate这三大框架的项目时,我们需要一个抽取一个BaseDao。这个Dao里面CRUD都给封装好, 后续的其他Dao直接用它的功能就可以。Spring里面有个HibernateDaoSupport的类,这个类需要给他一个SessionFactory。 有了SessionFactory后, 他就可以做各种操作;最强大的功能是它可以getHibernateTemplate来获取一个HibernateTemplate。有了HibernateTemplate,就有了各种CRUD方法。废话不多说,下面直接看代码

一、BaseDao接口及实现的代码

     (1)BaseDao接口的代码
   
  1. package com.tax.core.dao;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. /**
  5. * BaseDao
  6. * @author qu.pei.jun
  7. * @date 2018年1月26日 上午10:30:44
  8. * @version v1.0
  9. */
  10. public interface BaseDao<T> {
  11. /**
  12. * 新增
  13. * @param entity
  14. */
  15. public void save(T entity);
  16. /**
  17. * 更新
  18. * @param entity
  19. */
  20. public void update(T entity);
  21. /**
  22. * 根据id删除
  23. * @param id
  24. */
  25. public void deleteById(Serializable id);
  26. /**
  27. * 通过id查找
  28. * @param id
  29. * @return 实体
  30. */
  31. public T findById(Serializable id);
  32. /**
  33. * 查找所有
  34. * @return List集合
  35. */
  36. public List<T> findAll();
  37. }
    
    (2)BaseDaoImpl的代码
    
  1. package com.tax.core.dao.impl;
  2. import java.io.Serializable;
  3. import java.lang.reflect.ParameterizedType;
  4. import java.util.List;
  5. import org.hibernate.HibernateException;
  6. import org.hibernate.Query;
  7. import org.hibernate.Session;
  8. import org.hibernate.SessionFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
  11. import com.tax.core.dao.BaseDao;
  12. /**
  13. * BaseDaoImpl
  14. * @author ZENG.XIAO.YAN
  15. * @date 2017年6月29日 下午12:23:16
  16. * @version v1.0
  17. */
  18. public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
  19. private Class<T> clazz;
  20. // 按照类型自动注入SessionFactory; 在实例化的时候,Spring按照形参的类型自动注入
  21. @Autowired
  22. public void setMySessionFactory(SessionFactory sessionFactory){
  23. setSessionFactory(sessionFactory);
  24. }
  25. public BaseDaoImpl() {
  26. //this表示当前被实例化的对象;如UserDaoImpl
  27. ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
  28. clazz = (Class<T>)pt.getActualTypeArguments()[0];
  29. }
  30. /**
  31. * 获取session
  32. * @return session
  33. */
  34. public Session getCurrentSession(){
  35. Session session = null;
  36. try {
  37. session = getSessionFactory().getCurrentSession();
  38. } catch (HibernateException e) {
  39. throw new RuntimeException("getCurrentSession error", e);
  40. //session = getSessionFactory().openSession();
  41. }
  42. return session;
  43. }
  44. @Override
  45. public void save(T entity) {
  46. getHibernateTemplate().save(entity);
  47. }
  48. @Override
  49. public void update(T entity) {
  50. getHibernateTemplate().update(entity);
  51. }
  52. @Override
  53. public void deleteById(Serializable id) {
  54. getHibernateTemplate().delete(findById(id));
  55. }
  56. @Override
  57. public T findById(Serializable id) {
  58. return getHibernateTemplate().get(clazz, id);
  59. }
  60. @Override
  61. public List<T> findAll() {
  62. Session session = getCurrentSession();
  63. Query query = session.createQuery("FROM "+ clazz.getSimpleName());
  64. return query.list();
  65. }
  66. }

    (3)对BaseDaoImpl的说明
            使用HibernateDaoSupport需要注入SessionFactorytory,这个注入的动作其实可以交给BaseDaoImpl的子类去完成的。
            如:StudentImpl继承了BaseDaoImpl。那么在Spring的xml文件按照下面配置即可
                    
            但是:我觉得这样很麻烦,而且我Dao层我想直接用注解。我不想在每个Dao里都去写这个注入的动作。
            所以就准备在BaseDaoImpl里面去完成这个注入动作。
            下面开始了我的探索之路:
             方案一: 在BaseDaoImpl里面定义SessionFactory的属性,然后属性用注解把它注入。
                            最后在构造器里把这个SessionFactory通过set给HibernateDaoSupport。
                            具体的如下图:
                            
                            结果:虽然想法没问题,但是后面发现在实例化的时候,这个sessionFactory还没注进来。
                                       在项目启动的是时候就报错了,因为我给别人的SessionFactory个设置为null了;所以失败了。
                            后面通过百度发现,原来 Spring容器管理的类中,这个@Autowired注入是在对象实例化完成之后。
                            所以对Spring容器对bean的实例化过程的还是需要掌握的,笔者在这块掌握得不好。
                            参考链接: http://blog.youkuaiyun.com/xia744510124/article/details/51273576

             方案二:  在BaseDaoImpl中定义一个方法,在方法上加个注解。然后方法中把注解注入的形参(sessionFactory)
                                 通过set给HibernateDaoSupport。
                           具体如下图:
                           
                            结果: 注入成功,这个注解是根据形参的类型自动注入的。sessionFactory会在Spring实例化这Dao后注入。
                           参考链接: http://blog.youkuaiyun.com/tsingheng/article/details/8847047

            通过这个探索,发现了自己对Spring的知识掌握得不够,不知道用注解来注入是在对象实例化之后。
                    

 二、使用写好的BaseDao和BaseImpl

        (1)Dao接口直接继承BaseDao即可,下面以StudentDao接口为例
                 
       (2)Dao的实现类,需要继承BaseDaoImpl,下面以StudentDaoImpl为例
                 

三、结束语

        通过抽取这个BaseDao,后续的CRUD就很方便了。
python + QXDM5高通平台通过自动化截取log方法及代码 阅读详情

相关推荐

【HALCON 25.11 + C#】 01:2026年工业机器视觉实战详解(从入门到精通)

2026年机器视觉市场规模将突破230亿美元,HALCON 25.11的革命性更新与C#的工业集成优势形成黄金技术栈。本文作为付费专栏开篇序章,聚焦“为什么现在必须学25.11+C#”的核心问题,通过真实工业案例、五项核心技术突破、联合编程架构优势及30篇系统学习路线,全方位论证其投资价值。读者将掌握持续学习、深度OCR加速等关键技能,获得可直接上产线的工业级代码资产与架构设计思维,解决柔性生产、边缘部署等核心痛点,成为具备技术溢价的机器视觉工程师。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1230

使用HibernateDaoSupport抽取BaseDao

在开发采用Struts2+Spring+hibernate这三大框架的项目时,我们需要一个抽取一个BaseDao。这个Dao里面CRUD都给封装好,后续的其他Dao直接用它的功能就可以。Spring里面有个HibernateDaoSupport的类,这个类需要给他一个SessionFactory。有了SessionFactory后,他就可以做各种操作;最强大的功能是它可以...

260

项目模块提取生成jar包上传到nexus供其他项目使用

项目场景: 微服务项目当中的某一个模块其他项目进行复用,资源管理搭建的有私服 nexus。 问题描述: 如果把功能用到其他项目,代码重复量太大,不想些重复的代码。 原因分析: 如果把这个模块单独提取出来进行复用,至于操作数据库的功能,使用远程调用进行数据库操作,这样就能解决相同模块重复编写的工作。量。 解决方案: 首先对模块代码进行封装提取,把一些用到的参数提取出来,以传参的形式来对参数进行传递。这个需要根据具体的情况进行代码提取,提取之后把这个模块的代码进行打包,打包可以借助开发工具进行打包(记得使用 d

lierjun 的专栏 451

java实现dao层基本crud操作_BaseDao基类实现基础CRUD操作

原标题:BaseDao基类实现基础CRUD操作 在现实开发中,我们会碰到大量的CRUD的sql语句,我们将最常用的重复性的基础sql语句抽象成一个基类,以便于代码的复用,具体代码如下代码清单:package cn.itsource.base;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetExcepti...

weixin_42421331的博客 340

Python二级考试题目及答案解析(含刷题软件)

答案:A 解析:print()函数可以在屏幕上输出指定的字符串或变量,input()函数用于从键盘获取用户输入,int()函数可以将指定的字符串或浮点数转换为整数,float()函数可以将指定的字符串或整数转换为浮点数。答案:A 解析:int()函数可以将字符串转换为整数,float()函数可以将字符串转换为浮点数,str()函数可以将任意类型的变量转换为字符串,bool()函数可以将任意类型的变量转换为布尔值。

YOLO 1万+

【个人成长笔记】在Ubuntu中安装RTL8188GU USB无线网卡驱动(Driver for Linux RTL8188GU)

这篇笔记提供了在Ubuntu系统中安装RTL8188GU无线网卡驱动的完整指南。主要内容包括:驱动程序的官方来源(Github链接)、详细安装步骤(通过git下载、编译安装等命令),以及将设备转换为USB网卡模式的关键指令。特别提醒每次开机都需要执行模式转换命令,因为设备默认会以U盘模式启动。文章以简洁的技术文档形式呈现,适合Linux用户快速查阅和操作。

yuhuasheng1997的博客 1827

【SSH】SSH框架BaseDao、BaseService

代码未完善,后期再补 代码未完善,后期再补1. 通过数据库访问层BaseDao1. 接口BaseDao1.2 实现类BaseDaoImpl1.3 条件分页简单例子 1. 通过数据库访问层BaseDao 1. 接口BaseDao package com.dao; import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.c

Duson 487

UNet改进(54):当医学图像分割遇上频域学习与自监督

本文提出了一种改进U-Net的方法,通过频域增强模块和代理任务模块提升医学图像分割性能。频域增强模块在傅里叶空间对特征图进行可学习的频率调制,重点增强高频细节特征;代理任务模块通过图像重建约束编码器保留关键信息。两个模块协同工作,在仅增加5%参数量的情况下,形成空间域、频域和重建约束三条互补的信息路径。该方法特别适用于需要精细边缘分割的医学图像任务,预期能提升5%-10%的边缘分割精度,在小样本场景效果更显著。部署时可移除代理任务模块,不影响推理效率。未来可探索空间自适应频域调制和更丰富的代理任务设计。

2501_91516851的博客 227

BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>中获得T的类型代码

private Class clazz;//用于接受运行是的泛型 public BaseDaoImpl() { //获得当前类型的父类 (带有泛型类型的父类) // 这个类在运行的时候实际上是被DaoImpl所继承的 也就是说 这个方法所得到的父类 就是BaseDaoImpl // 得到的实际上是ParameterizedType 即参数化的类型 也就是说是带有泛型类...

qq_41009846的博客 598

《ATF(TF-A)专题精讲》目录——146篇,完整覆盖整个ATF的官方文档

本文摘要介绍了Trusted Firmware-A (TF-A)项目的技术文档体系。主要内容包括:项目概述、组件解析(如ARM RAS/RME/CCA等安全技术)、系统设计(启动流程、中断管理、信任链等)、开发指南(构建环境、移植策略)、性能分析、平台支持(涵盖NXP、Marvell、Xilinx等主流芯片厂商)、开发流程规范以及安全通告(CVE漏洞分析)。文档体系全面覆盖了ARM安全固件的技术实现、硬件适配和开发实践,为开发者提供了从理论到实践的完整参考。

Linux内核架构师 1115

Agentic AI商业化落地指南:提示工程架构师的7步优化法

Agentic AI(具备自主感知、决策与行动能力的智能体系统)是未来AI商业化的核心方向,其价值在于将大模型的“认知能力”转化为“实际行动”,解决复杂商业场景中的自动化与个性化需求。而提示工程(Prompt Engineering)作为连接人类意图与智能体行为的“翻译器”,直接决定了智能体的可控性、效率与用户体验,是Agentic AI商业化落地的关键支撑。本文结合第一性原理与工程实践,提出提示工程架构师的“7步优化法”,覆盖从“商业目标定义”到“规模化推广”的全流程。通过理论框架推导架构设计拆解。

AI架构全栈开发实战笔记 1万+

对HibernateDaoSupport进行二次封装:hibernate增删改查组件

本组件继承了HibernateDaoSupport,并完成对HibernateDaoSupport进行二次封装。提取平时开发常用的底层操作方法,并根据个 人习惯,定义自己的编码规范。根据sun官方的最新开发规范,使用了jdk的新特性——泛型。所有的操作对象以泛型指定。 定义接口规范:IBaseDao.java [java] view plaincopyprint?

AD921012的博客 670

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java basedao mysql_java SSH三大框架整合,实现了泛型baseAction,泛型baseService,泛型baseDao...

SSH三大框架整合,实现了泛型baseAction,泛型baseService,泛型baseDaostruts2的版本为2.3,hibernate为3.6.10,spring为3.2,用的数据库是mysql5.0BaseAction抽取了公共代码,比如UserService,StudentService等,还有ModelDriver,request,session,application,para...

weixin_39756192的博客 127

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java SSH三大框架整合,实现了泛型baseAction,泛型baseService,泛型baseDao

SSH三大框架整合,实现了泛型baseAction,泛型baseService,泛型baseDao struts2的版本为2.3,hibernate为3.6.10,spring为3.2,用的数据库是mysql5.0 BaseAction抽取了公共代码,比如UserService,StudentService等,还有ModelDriver,request,session,appl

kite30的博客 3127

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

BaseDao的抽取

在ssh整合开发中,会创建多个不同的dao层对数据库里的数据进行crud操作,其实每个里面用到的方法几乎都一样,只是传递的参数类型不同.我们可以抽取出一个BaseDao类.由于开发中的高内聚低耦合的思想,所以定义为一个接口,再创建实现类继承即可.在接口上定义传递类型的泛型,通过反射技术及Class类中的方法获取.package cn.itcast.util;import ja...

weixin_34375233的博客 135

SSH与SSM学习之SSH实现CRM练习07——BaseDao封装

SSH与SSM学习之SSH实现CRM练习07BaseDao封装 一抽取BaseDao 二BaseDao设计思路 三BaseDao接口书写 四BaseDao的实现类 五业务Dao中的应用 1 CustomerDao 2 CustomerDaoImpl 六源码下载SSH与SSM学习之SSH实现CRM练习07——BaseDao封装一、抽取BaseDao我们的每个DAO其实都是 CRUD 操作,其中很多代码

qiwenmingshiwo的专栏 419

SSH中DAO层抽取

Background: HibernateTemplate开发dao层。 每个业务对象都具有CRUD操作 最初实现最初为每个业务对象开发相应的DaoImpl,自然出现大量重复代码,想要抽取到一个BaseDao中,以实现代码重用性和整洁度实现思路每个业务对象DaoImpl的不同之处唯在于其业务对象,比如,查询Customer时,就传入Customer.class 。完成向上抽取,最好的办法就是创建泛型

L_Cyline的博客 542

SSH框架:抽取dao层公共接口和父类

因为dao层功能比较固定大部分是在增删改查,所以可以抽取父类被继承,以此简化代码。因为是面向接口编程,所以我们新建一个接口文件BaseDao.java和一个实现类BaseDaoImpl.java,重点讲实现类怎么写 BaseDaoImpl.java public class BaseDaoImpl&lt;T&gt; extends HibernateDaoSupport implement...

moyu的博客 597

【SSH项目实战】国税协同平台-23.抽取BaseService

接下来我们开始整顿我们的Service层,我们每一个Service基本上都有下面几个方法(拿info举例子): [java] view plaincopy //新增   public void save(Info entity);   //更新   public void update(Info enetity);   //根据id删除   p

逸轩 602

SSH企业案例_CRM客户管理系统(四):联系人管理&抽取通用Dao

文章目录   1、CRM综合练习_联系人管理   2、CRM综合练习_抽取通用的DAO

oZuoShen123的博客 281

系统学习javaweb-12-SSH整合开发demo

javaweb学习笔记-SSH整合开发demo链接:https://csxiaoyaojianxian.github.io/javaweb_study06 名称:SSH整合开发demo,实现CRUD和登陆验证 版本说明: struts - 2.3.4.1 spring - 3.2.5 hibernate - 3.6 【知识点】1 模型驱动1.1 实现接口 implemen

禅林阆苑 603

ssh整合(3)dao层建设思想

众所周知,我们dao层的操作就是为了完成数据库操作,但是针对不同的对象完成查询的代码往往只是因为操作对象的不同而需要我们重新大量的crud代码。这就造成了大量的代码重复。如何来解决这个问题呢?            如果我们能够将crud的代码抽取出来作为一个模板来用那就好了。然而我们的对象是不同的,因此我们是不是能把对象作为一个参数传入呢?            首先先分析我们的程序设计模型

XiaoqiangNan的博客 457

SSH纳税服务项目重点细节归纳1

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

weixin_42839338的博客 170

借助net.sunniwell.core封装BaseManager&&EntityDao

借助net.sunniwell.core封装BaseManager&&EntityDao

日拱一卒,功不唐捐 796

java通用分页(SSH2框架下)和基于Hibernate的BaseDao接口

1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{      //省略了其他的代码      /** *//**    * 分页查询    * @param hql 查询的条件    * @param offset 开始记录    * @param length 一次查询几条记录    * @r

Augus6的点点滴滴 1719
上一篇: MyBatis的逆向工程
下一篇: ssh 分页查询
Java_funds
博客等级 码龄9年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值