Spring的HibernateDaoSupport类详解
SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
Spring的HibernateTemplate

使用spring的hibernateTemplate的方法分类:Struts+Hibernate+Spring2009-05-22 15:486178人阅读评论(6)收藏举报使用spring的hibernateTemplate的方法- [spring]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logs/24775065.html1.管理SessionFactory使用Spring整合Hibernate时我们不需要hibernate.cfg.xml文件。
首先,在applicationContext.xml中配置数据源(dataSource)bean和session工厂(sessionFactory)bean。
其中,在配置session工厂bean 时,应该注入三个方面的信息:●数据源bean●所有持久化类的配置文件●Hibernate的SessionFactory的属性Hibernate的SessionFactory的属性信息又包括两个内容,一,Hibernate的连接方法;二,不同数据库连接,启动时的选择。
2.为HibernateTemplate注入SessionFactory对象,通过HibernateT emplate来持久化对象Spring提供了HibernateTemplate,用于持久层访问,该模板无需打开Session及关闭Session。
它只要获得SessionFactory的引用,将可以只能地打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操作(如对数据库中数据的增,删,改,查)则有HibernateTemplate完成。
HibernateTemplate有三个构造函数,不论是用哪一种构造,要使HibernateTemplate能完成持久化操作,都必须向其传入一个SessionFactory的引用。
HibernateTemplate的用法有两种,一种是常规的用法,另一种是复杂的用。
Spring试题及答案

Spring考试试题1)下面关于Spring的说话正确的是()(选择两项)A)Spring是一个重量级的框架B)Spring是一个轻量级的框架C)Spring是一个IOC和AOP容器D)Spring是一个入侵式的框架2)下面关于IOC的理解,正确的是()(选择两项)A)控制反转B)对象被动的接受依赖类C)对象主动的去找依赖类D)一定要用接口3)下面关于AOP的理解,正确的是()(选择两项)A)面向纵向的开发B)面向横向的开发C)AOP关注是面D)AOP关注的是点4)Spring的组成一共有()块组成。
A)1 B)3 C)5 D)75)Spring各模块之间关系()(选择两项)A)Spring各模块之间是紧密联系的,相互依赖的B)Spring各模块之间可以单独存在C)Spring的核心模块是必须的,其他模块是基于核心模块D)Spring的核心模块不是必须的,可以不要6)Spring核心模块的作用()A)做AOP的B)做IOC的,用来管理Bean的C)是用来支持HiberneteD)是用来支持Struts的7)对Hibernate的支持主要用到Spring的那个模块()A)Spring核心模块B)Spring ORM模块C)Spring MVC模块D)Spring Web模块8)对Struts的支持主要用到Spring的那个模块()A)Spring核心模块B)Spring ORM模块C)Spring MVC模块D)Spring Web模块9)Spring的通知类型有()(多项选择)A)Before通知B)After return通知C)Throws通知D)Around通知10)下面关于切入点的说法正确的是()(多项选择)A)是AOP中一系列连连接点的集合B)在做AOP时定义切入点是必须的C)在做AOP时定义切入点不是必须的D)可以用正则表达式来定义切入点11)Spring包装Hibernate之后的Hibernate的DAO应该继承那个类()A)HibernateDAOB)SessionFactoryC)HibernateDAOSuportD)Session12)下面对Spring包装Struts1.2的说法正确的是()(选择两项)A)Spring包装Struts的ActionServletB)Spring包装Struts的ActionC)主要是利用Spring的依赖注入D)主要利用Spring的面向方面的编程13)Spring包装Struts时那些Spring模块是必须的()(选择两项)A)Spring核心模块B)Spring AOP模块C)Spring MVC模块D)Spring WEB模块14)Spring中Before通知的目标对象要实现的接口是()A)MethodBeforeAdviceB)ThrowsAdviceC)AfterReturningAdviceD)MethodInterceptor15)Spring中around通知的目标对象要实现的接口是()A)MethodBeforeAdviceB)ThrowsAdviceC)AfterReturningAdviceD)MethodInterceptor16)Spring中Before通知的目标对象要实现的接口中before方法中的三个常用的参数依次是()A)方法,方法的参数,目标对象B)方法的参数,方法,目标对象C)目标对象,方法,方法的参数D)方法的参数,目标对象,方法17)Spring中around通知的目标对象要实现的接口中invoke中方法的参数是()A)方法B)目标对象C)方法执行参数D)Exception18)下面是Spring依赖注入方式的是()(选择两项)A)set方法注入B)构造方法的注入C)get方法的注入D)接口的注入19)下面关于在Spring中配置Bean的id属性的说法正确的是()(选择两项)A)id属性是必须,没有id属性就会报错B)id属性不是必须的,可以没有C)id属性的值可以重复D)id属性的值不可以重复20)下面关于在Spring中配置Bean的name属性的说法正确的是()(选择两项)A)name属性是必须,没有name属性就会报错B)name属性不是必须的,可以没有C)name属性的值可以重复D)name属性的值不可以重复21)下面是IOC自动装载方法的是()(选择两项)A)byNameB)byTypeC)constructorD)byMethod22)下面关于在Spring中配置Bean的init-method的说法正确的是()A)init-method是在最前面执行的B)init-method在构造方法后,依赖注入前执行C)init-method在依赖注入之后执行D)init-method在依赖注入之后,构造函数之前执行23)下面关于Spring配置文件说话正确的是()(选择两项)A)Spring配置文件必须叫applicationContext.xmlB)Spring配置文件可以不叫applicationContext.xmlC)Spring配置文件可以有多个D)Spring配置文件只能有一个24)看下面的代码,说法正确的是()<bean id="userTable" class="erTable"><property name="userName"><value>ACCP</value></property></bean>A)其中<property name="userName">的userName是UserTable中的属性,可以不要get、set方法。
Struts+Spring+Hibernate整合入门详解

3、运行eclipse,选择一个空目录作为工作区(工程结构如下:其中我们要写的Java代码在Java Resource: src(以后直接称src)下,网站根目录内容在WebContent下,类所在根目录是WEB-INF/classes,Eclipse 会自动将build/classes里面已经编译的类同步过去。
向WEB-INF下的lib目录添加如下所列的jar包。
(1)这些包在下载解压后Spring,Struts,Hibernate的lib目录或者dist/module目录下面(如果不在,可以到网上google一把。
列表中mysql-*.jar包是MySQL数据库的JDBC Driver)。
也可以把所有lib和dist 下的jar包拷贝过来(可以在系统复制这些jar包,然后到Eclipse里面选中WEB-INF里面的lib包,然后粘帖就可以了)。
但要注意全拷贝可能会存在冲突,如struts*plugin.jar等包不能引入,否则不能运行。
(2)这些Jar包是:antlr-2.7.2.jarcglib-nodep-2.1_3.jarcommons-beanutils-1.6.jarcommons-chain-1.1.jarcommons-collections-2.1.1.jarcommons-dbcp.jarcommons-digester.jarcommons-logging-1.0.4.jarcommons-logging-api-1.1.jarcommons-pool.jarcommons-validator-1.3.0.jardom4j-1.6.1.jarel-api.jarel-ri.jarfreemarker-2.3.8.jarhibernate3.jarjsf-api.jarjta.jarmysql-connector-java-3.0.14-production-bin.jarognl-2.6.11.jaroro-2.0.8.jarspring-hibernate3.jarspring.jarstruts-config.xmlstruts-core-1.3.5.jarstruts2-codebehind-plugin-2.0.9.jarstruts2-config-browser-plugin-2.0.9.jarstruts2-core-2.0.9.jarstruts2-jasperreports-plugin-2.0.9.jarstruts2-jfreechart-plugin-2.0.9.jarstruts2-jsf-plugin-2.0.9.jarstruts2-pell-multipart-plugin-2.0.9.jarstruts2-plexus-plugin-2.0.9.jarstruts2-sitegraph-plugin-2.0.9.jarstruts2-sitemesh-plugin-2.0.9.jarstruts2-spring-plugin-2.0.9.jarstruts2-struts1-plugin-2.0.9.jarstruts2-tiles-plugin-2.0.9.jartiles-api-2.0.4.jartiles-core-2.0.4.jartiles-jsp-2.0.4.jarindex.jsp的内容如表,我们暂时不分析。
SpringBoot框架中各层(DTO、DAO、Service、Controller)理解

SpringBoot框架中各层(DTO、DAO、Service、Controller)理解1.粗略理解View层 Controller层(响应⽤户请求) Service层(接⼝ 接⼝实现类) DAO层,即Mapper层(抽象类:xxxMapper.java⽂件,具体实现在xxxMapper.xml) Model层(实体类:xxx.java)2.VO,DTO,DO,PO理解2.1解释VO:View Object,视图层,其作⽤是将指定页⾯的展⽰数据封装起来。
DTO:Data Transfer Object,数据传输对象DO:Domain Object,领域对象PO:Persistent Object,持久化对象2.2模型⽤户发出请求(填写表单),表单的数据被展⽰层匹配为VO展⽰层把VO转换为服务层对应⽅法所要求的DTO,提交给服务层服务层先将DTO的数据构造(或重建)⼀个DO,调⽤DO的业务⽅法完成具体业务服务层再将DO转换为持久层对应的PO,调⽤持久层的持久化⽅法,把PO传递持久化⽅法,完成持久化操3.PO,VO,BO,DTO,JavaBean,JavaBeans,POJO,DAOPO:持久对象 (persistent object),po(persistent object)就是在Object/Relation Mapping框架中的Entity,po的每个属性基本上都对应数据库表⾥⾯的某个字段。
完全是⼀个符合Java Bean规范的纯Java对象,没有增加别的属性和⽅法。
持久对象是由insert数据库创建,由数据库delete删除的。
基本上持久对象⽣命周期和数据库密切相关。
VO:表现层对象(View Object),主要对应展⽰界⾯显⽰的数据对象,⽤⼀个VO对象来封装整个界⾯展⽰所需要的对象数据,数据脱敏,去掉⽤户隐私数据。
BO:业务对象层的缩写(Business Object),封装业务逻辑的java对象,通过调⽤DAO⽅法,结合PO,VO进⾏业务操作。
dao层使用的注解

dao层使用的注解在Java开发中,DAO(Data Access Object)层承担着与数据库交互的任务。
为了简化和优化DAO层的编写,我们可以使用一些注解来简化代码的撰写和理解。
以下是关于DAO层使用的一些常见注解:1. @Repository:用于标注DAO层的类。
这个注解用于将DAO实现标记为Spring的组件,方便程序的组织和管理。
通过这个注解,我们可以将DAO实例纳入到Spring容器中,并将其作为依赖进行注入。
2. @Autowired:用于自动装配DAO层的对象。
当我们在DAO层需要使用其他对象时,可以使用@Autowired注解自动将需要的对象注入进来。
这样可以省去手动创建对象和设置依赖的工作,减少了代码的冗余和错误。
3. @Transactional:用于控制事务的注解。
在DAO层的数据操作中,我们经常会遇到需要开启事务、提交事务或回滚事务的情况。
通过@Transactional注解,我们可以将整个方法或者类标记为需要进行事务管理的操作。
这样,在方法执行时,Spring会自动为其开启事务,并根据业务逻辑的成功与否来决定是提交事务还是回滚事务。
4. @Query:用于自定义查询的注解。
在DAO层的查询方法中,我们经常需要定义一些复杂的查询语句。
通过使用@Query注解,我们可以直接在方法上面编写SQL语句或者JPQL语句,从而实现我们所需要的查询功能。
这样可以提高开发效率,同时也可以避免对数据库进行频繁的访问,提升查询的性能。
5. @Modifying:用于更新操作的注解。
在DAO层的更新方法中,我们经常会遇到更新数据的情况。
通过@Modifying注解,我们可以标记该方法为更新操作,并且在方法上面编写相应的更新语句。
这样,Spring会根据方法的返回值来判断更新操作是否成功,并且可以自动将更新操作放入到事务中进行管理。
以上是DAO层常用的一些注解,使用这些注解可以使DAO层的编写更加简洁、易读和易维护。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HibernateDaoSupport:
(创建一个子类对象的时候,会先创建一个父类对象)。
当LogDAOImpl继承HibernateDaoSupport的时候,程序执行报错,原因是必须要注入SessionFactory或者HibernateTemplate。
因为HibernateDaoSupport是abstract类,所以无法生成HibernateDaoSupport对象来实现注入;那我们只能生成其子类LogDAOImpl的对象,在调用HibernateDaoSupport类中的set方法进行注入,但这个方法还是不行,因为HibernateDaoSupport类中的set方法为final方法。
总之,我们无法使用annotation方式在HibernateDaoSupport中注入SessionFactory或者HibernateTemplate。
,那么我们的LogDAOImpl类就不能使用annotation的方式生成了,我们只能(暂且,以后会有其他方法)在beans.xml中进行注入如下:
使用这种方式进行注入,我们又会有另外一个问题:假如现在有很多的DAO的实现需要继承HibernateDaoSupport,那么我们在beans.xml文件中就需要配很多的<bean……>,这样仅配置文件就非常庞大了。
到现在,我们已经知道了HibernateDaoSupport怎么使用了。
使用上面的方法直接继承HibernateDaoSupport比较复杂,现在介绍一种简便的方法:我们可以把DAO抽象处理,写一个抽象类,让它去继承HibernateDaoSupport,如下:
如下修改beans.xml文件,将sessionFactory注入给它:
然后在DAO实现中继承,如下:
这样,如果我们再有一个DAO的实现,我们只要再写一个实现类即可,而无须在beans.xml文件中再进行一个配置。
综上,如果要使用HibernateDaoSupport的话,就采用这样的方法:抽象出DAO,让它去继承HibernateDaoSupport,所有DAO实现继承这个抽象的DAO,在beans.xml只要将这个抽象的DAO,也就是顶层的DAO初始化bean则可。
这样,在DAO实现中又可以使用annotation。
但这种方式经过实验不行,运行的时候还是无法配置一次就可以在很多DAO实现中使用,仍然会报错说需要SessionFactory或者HibernateTemplate。
原因是:当我们在调用DAO 实现的时候,确确实实会初始化父类DAO对象,这个初始化过程Spring确实也能帮我们管理起来,但是,现在的问题是由于我们在DAO实现中使用的是annotation,而父类的初始化用的是beans.xml方式,所以子类和父类的初始化方式不匹配。
怎么证明呢?现在我们的父类DAO我们不使用xml方式,而是采用annotation方式来初始化。
但是,使用annotation 方式,父类DAO是继承HibernateDaoSupport,上面已经分析了,继承自HibernateDaoSupport 我们又无法注入SessionFactory或者HibernateTemplate。
最后,我们干脆不要HibernateDaoSupport了。
继承自HibernateDaoSupport抽象类是因为我们可以不用在每个DAO实现类里面写HibernateTemplate,然而继承自HibernateDaoSupport,我们却又无法注入SessionFactory或者HibernateTemplate,程序报错。
那现在我们干脆就不继承自HibernateDaoSupport了,而是我们自己抽象出父类DAO,我们在父类DAO中自己实现注入HibernateTemplate(annotation方式,与子类初始化方式一致)。
如下:
父类DAO实现了HibernateTemplate注入,那么我们在DAO实现类中就可以直接使用HibernateTemplate了,如下:
总结:HibernateDaoSupport不重要,不需要。
继承HibernateDaoSupport可以使我们不用在每个子类(DAO实现)中注入HibernateDaoSupport,但HibernateDaoSupport只能在beans.xml文件中配置,当子类使用annotation注入方式,则会出现父类和子类注入方式不匹配的错误。
所以我们不要继承自HibernateDaoSupport了,而是抽象出一个父类DAO,在父类DAO中使用annotation方式注入HibernateTemplate,这样,子类(同样使用annotation 方式注入)继承自父类DAO,就同时拥有了父类DAO已经注入的HibernateTemplate,可以直接使用this.getHibernateTemplate().save(user),这样就不用再每一个DAO实现中都注入HibernateTemplate,既完成了HibernateDaoSupport的功能,有免去了HibernateDaoSupport 所带来的麻烦。
最后得出结论,HibernateDaoSupport没有用。