Hibernate框架分析

合集下载

跟我学Hibernate框架技术——在Hibernate中实现二进制和mem类型的字段的数据访问(MySQL数据库)

跟我学Hibernate框架技术——在Hibernate中实现二进制和mem类型的字段的数据访问(MySQL数据库)

目录1.1在Hibernate中实现二进制和mem类型的字段的数据访问 (2)1.1.1数据库系统的二进制数据和大文本数据 (2)1.1.2编程项目相关的POJO类 (7)1.1.3构建数据库表和POJO类之间的映射配置文件 (12)1.1.4编程相关的DAO类程序代码 (15)1.1.5应用单元测试用例测试本示例的应用效果 (21)1.1.6执行单元测试用例 (26)1.1.7java.sql包中的Blob和Clob接口 (29)1.1在Hibernate中实现二进制和mem类型的字段的数据访问1.1.1数据库系统的二进制数据和大文本数据1、二进制数据和大文本数据的存储对数据库中涉及“mem”类型的字段,一般在设计时定为V ARCHAR2类型,但其最大长度为4000 bytes,即可以支持两千汉字以内的长度,而我们在实际的应用中,可能往往会超过两千汉字,从而导致超出的部分不能写入数据库中,因此我们有必要改为大字段类型。

另外的一个问题是,就是在数据库中V ARCHAR和V ARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。

通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据表中保存文件的路径即可。

这种做法不必处理clob(Character Large Object),blob (Binary Large Object)等格式的字段类型,但不易做transaction的控制,而且增加了对文件的处理操作,不算是较佳的一个方案。

另一个做法是使用clob, blob等字段类型。

下面给出实现的说明和过程。

2、设计一个数据库表(1)本示例的数据库表结构如下其中所应该注意的是image类型和ntext类型的含义。

在Oracle中如何表示?在MySQL 中如何表示?(为longblob和longtext)(2)对应的SQL语句如下DROP TABLE IF EXISTS `tuser`;CREATE TABLE `tuser` (`id` int(11) NOT NULL,`name` varchar(50) DEFAULT NULL,`age` int(11) DEFAULT NULL,`picture` longblob,`resume` longtext,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;-- ------------------------------ Records of tuser-- ----------------------------INSERT INTO `tuser` V ALUES ('1', '张三', '20', 0xFFD8FFE000104A46494600010101004800480000FFDB004300070404040504070505070A070 5070A0C090707090C0D0B0B0C0B0B0D110D0D0D0D0D0D110D0F1011100F0D141416161414 1E1D1D1D1E22222222222222222222FFDB0043010807070D0C0D181010181A1511151A20202 02020202020202020202021202020202020212121202020212121212121212122222222222222222 2222222222222FFC0001108003F00C403011100021101031101FFC4001C0001000105010100000 000000000000000000402030506070801FFC400411000010303020405010504050D000000000102030400051106120713213114223241516108234271811516249137527275B13336434462638492B 2B3B4C1E1FFC4001A010100020301000000000000000000000000030401020506FFC4002B1101 000201030303030305000000000000000102030411210512312232410651611314427181B1D1F0F FDA000C03010002110311003F00F481ED41F12B41594839527D43E282AA05044B8DC99861B 49CAA43EAD8C329F52D5FFA007527D856264486C39B46FC6EC79B1DB35915D028140A050 28140A05028140A05028140A05028141F1690A494A86527A11F4A0D4B51DAB50D99DFDBD A5FEFD31D2BF156370FDDBCDF7FE1D5D4B4B1DF6FA4FB0F9D278172C7C52D1F75D22E6 AB12B916E8DD2707461C8EBCED287123A83B8D67BB813E46B8D30CE92735778C42AC0D B25F1293D9481D3CBDBA93D00F9ACEF031FC3D5DCEEB6FF00DEBBDB7C89B724EF8B14 FF00AB43272D23FB4A1E657FF2B4A57E46D29502323B1ED520AA8140A05028140A0502814 0A05028140A05028140A0B7210A7185A12B2DA94920389C6E4E7DC672323F2A0E61AAB59 EA1D017103F6B0D4715C3972D7212D3335947BA9121A0868FF65C40CFCD55CDABA639DA 657F4BD2F36A2B36A4711FF70E37AD756459B22F17BB0FF0F6EBC32A66F36B6C942DA59E CE29B57AC157A8A463DC5578CB36B7D9B6AB474A56369DEDF3131B4C29B48B86A3D216 7B53118C87220F395AC88DE4C8694E63D581D4213EFDEAB66CB14BDA667CAF697166CF8 EB5DA2B4AFCCFCFFB6C91E1DEA135E0EF124BD18F6E4B8B43493F1CB4F41F438AA56C F3E2378877F1692BEFF75FF31FE17AD3C57D41A3AE296DA94E5CAD591CD87255BCA53FE ED5DC1F8AB5A6D65EBFD11EB7A362CF5DF6EDB7E1DF74DEA0B6EA0B3C7BBDB97BE2 C94EE4FC83EE93F515DBC7922D1BC3C56A305B15E6B6F30C956E88A05028140A05028140 A05028140A05028140A0D6388BAC3F766CEDBED6152E4381A651EE73DCFE954BA86A2D8 E9E9F32E8F48D07EE72EDFC63CB92BB6D81710FC9BB2CC99CF12A53CB3F8B3EC3B015E 7AD333CCF97B3ACCD36AD3DB1F08B72B4E9B7596D298C848491BFE4803B63EB5B562598 EE9F772B8F5F22B310331D0965B40E884F4159AD0FD3E79E5ABDD751AC950DDD2A5AE3 4DDD10D4674F53AF9567353D71A2B66777FB2E5D249B3CCB63B92CA55CE673ED9F50AB DA1B7330F31D7A9BED7FECE957DDEABF5A23F31C430F97C3A96DC5A02B6345433B08F7 AE8B808303505CD018888FE216F4894D4790BEBB9A63AA3F120127B77A093FBC3744C98C CC86911D0FF291CDFF002C9E72CF99B250BF2F4F4D042B76A0BB8B446119A4ADE71A94E 0F2BAF6E5B4E94A518DFB8027F1134175ED4B7D61D909750C7F0C6205A762C13E2BD43D640DA6825EA9764226DB12C174F35D7029A6DD535BF0D9201208F7A04399764DD05AD92D8 65A659795CEDEB770A5E1682BDDDC0EC714119BD59715C666425B6F6CA625BCD270ACB 7E1BB6FF37981C7D282CBBABAF4D4471F2860ED891E601B57D9E50494FABDBE6836C141 F68140A05028140A050718FB43CB7D172B76CF430824FE6AAE2F53E6F0F5FF004B563B2DF 973E1AA4168051C2BDEB9F157A0B561065EA94A73EF52D6AD27662266A8796309A92B447 6B43132EE0E38327B9A9AB557BE4458E14EBC3F3A93655B5DE85FB3B33CA90EA523A06C E6A5D247ADC7EAF3E86C9ACB8BDA52C973762DEB4FDCDFF0CE725133C1B4B614A50E CD38E389CE6BA4E0B296ED6F61BC697B8DDA4D926C4B7DA1A5BCB8D708ADB6B525A6 CB9F7482A524F41D3A8A0CBE9A9F64D456685A82145D8CCB6C38D735080EA53E900EDD DEDF068309A964E9787AAAD1A79F8A7C45D9B79B889432DA986F679D6A3E64292A3F201 A0D923D82D2D474B2A8EDB984A52A5B884A94AE58C24A8E3A91ED4129D8711D5B6E3C CA16B6BAB4A524129FECE7B5013162A6419096D024286D53A00DE47C1577A0A05BADE37 E186C73461CF28F303DC1F9A0A0D9ED18C784671808C72D1E949C81DBB023*********C00 3091D00A0AA8140A05028140A050732E3A598C88D1A62539032DA8FF0085733A8E3E625E8 3E9ED46DBD5C0EED0D6CA8E2A8D61E9E72B0B27998A962A82F950D7CCA962156F91486 944F5ACA29B3236D63EF451ABD27C02B23B1ED0EDC5C180EE108FD3BD59D155C5EAD9 39ED57F68EFF0031A1FF007A45FF0005D5D729B6711BFA3DD45FDD733FF1D741C4556C6B 4FF0AB4EEB9B4DCA4FEF187DA6908E71285A77AC18C1ACE309DBD7F5F9A0E85C40FE99 7427FC77FDAA089A8612758F195FD2B7C94FB363816E4C98B05974B21F75446E70EDC13B3 71FE541F3879A82F70B4B6B6851E43970674EB92D16694E9E62941B6D6A4B5BBF16D281FC E8343BFDBE344E0CC1D591EF52CDFEEAF8F1C4C9594BEADEBDC828CFFA2DBDFF003F9 A0F45BB2A2B2B6DB79D436E3A70D254A00ACFC241EA7BD0732D55013ABB8CC349DEA4 BED58A35ABC5C78ACBAA683CF97305676E376013FF002FE74131CBBAEC1C17B9C9D3F7 A37C7EDCDBADB3713E65A09501D719CF242F23E941A95C6D4DE92D35A5B5958AE72A46 A1B9C88899616F975338494153A828248E8AE9F4F7EB8A0D8F89309EBAF1874AD9552E447 833234BF1223BAA694A4A1A714465247A80DA7E868347469C0BD2BAE16AB84EE56979EF3 76567C42F633CB748DD8CF994768EFF00A77A0ED9A42EDBF42D96E7739090EC8B7C575F7 DE504EE71C652A2493EE4D06A7C5F7644ED59A4F4B3D25E8B63BB3EF78E532B2D174B694F2DA2A1ECA52B18A0CD70E2D366B1BF77B2DB2F4AB9351A46EF02E2F7AA0EE07EEB7 124E0E3DFE0FD6838E42B3BEFF02646B27AE13557AB7CA1E057CF5ED68192D34404F639D E4E4F5A0F42D99F7A4D9E1487705D763B4B593FD65201341F2FB668D78B6BB0640F2AC74 3F07DAA3CB8FBABB25C19E71DE2D1F0F3F710343CDB3495B4FB7E4FC0E7B115C7BE29A CF2F5DA4D5D72D7873D990B6935984D663D6C62A4857B290DD65A371E17E85B96ACBF22 2C649115A20CA93F8509FAFF00B47D856D5A774ECADA8D4462AEF3E5EA7B45AE2DAED CCDBE2276B0C242123F2F73F9D74A94ED8D9E7325E6D3BCA3EA3D2F63D470510EF2C788 8ADB897D08DCB461C47A5594149E99AD9AA5DC6DF12E16F916E9A8E64394D2D87DBCA 86E6DC4ED52729208C83EC7341AC42E0CF0DA0DCA2CF8B6A4A1F87831C731D520293D96 50A514A943A7522833970D2F62B85E60DEA5C7E65CED9BFC13DBD6397CC1857952A09564 7C8A085AB3877A4355A9A72F50F9AFB030CC84294D3A949EE9DE82938EB412AD5A62D96 1B02ACFA7996E134942F9391BD216A1EB5E7AAFAF7C9A0E3CFF0005F55DC91FB2DCD3D 6BB6AE4484AE7DF63BEB3BDA4AB38663A8A8B5BBA640C0FA0A0EC777D2F63BC4C813 AE4C73A55B1CE7427372D3CB70E32AC20807D23A1A087AB7879A4B5616577C87CF7A3F4 69E4AD6D38907B8DC820E0E7B504FB4E99B15A6C89B2408A866D49414786EE92957AB76E C9567DF34183B2707F87B65BBA6EF6FB6844C6C9531BD6E38868ABB96D0B514A7E9D3A7 B5066A6696B1CCBFC2D41218DF77B7A5C44391BD7E40EA4A57E40A08390A3DC50444F0F B49261DD61261FF0D7B714FDD11CC77EF9C5AB72959DF94E49FC381415DCF43698BA69B 634D4E8BCDB2464B48663F31C1B43030DF992A0B3803DCD05DD51A3F4F6A880205F23092 C215BDA395256858ECA4AD24281FD6829D2DA2F4DE9682B83638DE1DA755B9D3B94B5A D5F2A5AC951FE74119AE1BE8C6F4A3BA51107160797CC762F35EEAADE1CCEFDFCCF5A 41F550671888CC78EDC7646D65A484369EF84A4600C9C9ED4174D041BCD92DB7986A893D B0E347F98FCAB4C98E2D1B4A4C19AD8E77AB8DEB5E015EDB5A9FB1A9B96C1ECDAC86 DC1FA9C24D50BE9263C3B9A7EAF5B47AB896947823C4E90F7299B6A064FA8C8631FF005E 6B15C16497EA346D7A53ECB57275C4BFAA6E28699CF58B0BCCA23E0B8B000FD01AB15D 328E6EA9F676BD37A6ACDA76DA8B6DA23A63C56FD93DC9FEB28FB93566B48AF872F264 9BCEF2C956CD4A05028140A05028140A05028140A05028140A0507FFD9, '这是用户的个人简历的文本信息字符串.....');1.1.2编程项目相关的POJO类1、设计TUser表相匹配的PO类——添加PO类2、在该PO类中添加如下的成员属性private Integer id; // private int id; private String name;private Integer age;private Blob picture;private Clob resume;private InputStream userPictureIOStream; private String userResumeText;3、为这些成员属性添加get/set方法4、添加hashcode/equals方法5、POJO类最终的代码package com.px1987.sshwebcrm.dao.pobject; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException; import java.io.InputStream;import java.sql.Blob;import java.sql.Clob;public class TUser {@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((age == null) ? 0 : age.hashCode());result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());result = prime * result + ((picture == null) ? 0 : picture.hashCode());result = prime * result + ((resume == null) ? 0 : resume.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;TUser other = (TUser) obj;if (age == null) {if (other.age != null)return false;} else if (!age.equals(other.age))return false;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (name == null) {if ( != null)return false;} else if (!name.equals())return false;if (picture == null) {if (other.picture != null)return false;} else if (!picture.equals(other.picture)) return false;if (resume == null) {if (other.resume != null)return false;} else if (!resume.equals(other.resume)) return false;return true;}public Integer getId() {return id;}private void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Blob getPicture() {return picture;}public void setPicture(Blob picture) {this.picture = picture;}public Clob getResume() {return resume;}public void setResume(Clob resume) {this.resume = resume;}private Integer id; // private int id; private String name;private Integer age;private Blob picture;private Clob resume;private InputStream userPictureIOStream;private String userResumeText;public String getUserResumeText() {return userResumeText;}public void setUserResumeText(String userResumeText) {erResumeText = userResumeText;}public void setUserPictureIOStream(InputStream userPictureIOStream) {erPictureIOStream = userPictureIOStream;}public InputStream getUserPictureIOStream() {return userPictureIOStream;}public TUser() {}}1.1.3构建数据库表和POJO类之间的映射配置文件1、针对上面的TUser数据库表的映射文件为(TUser.hbm.xml)——添加TUser.hbm.xml文件2、设计该文件的内容<?xml version='1.0' encoding='gb2312'?><!DOCTYPE hibernate-mappingPUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.px1987.sshwebcrm.dao.pobject.TUser" table="TUser"> <id name="id"><column name="id"></column><generator class="increment"></generator></id><property name="name"></property><property name="age"></property><property name="picture"></property><property name="resume"></property></class></hibernate-mapping>或者采用下面的配置<?xml version="1.0"?><!DOCTYPE hibernate-mappingPUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.px1987.sshwebcrm.dao.pobject.TUser" table="TUser"> <id name="id" type="ng.Integer" ><column name="id" not-null="true"/><generator class="increment"/></id><property name="name" type="ng.String" column="name"/><property name="age" type="ng.Integer" column="age"/><property name="picture" type="java.sql.Blob" column="picture"/><property name="resume" type="java.sql.Clob" column="resume"/> </class></hibernate-mapping>3、在hibernate.cfg.xml中添加对TUser.hbm.xml文件的引用。

无纸化考试系统中Struts,Spring,Hibernate框架整合的分析与研究

无纸化考试系统中Struts,Spring,Hibernate框架整合的分析与研究
方案。 本文 将在开 发 一个无 纸化考试 系统的基 础上分 析 研究 Srt S r g和 Hien t t s pi u 。 n b rae三个 框架 在应 用
中 ,开 发者必 须 明确 系统 的体 系结构 。体 系结构是 复 杂事 物的一 种抽象 化 。好 的体 系结构 受 到普遍 的
运用 。 能有效 地处理 各种 各样 的特殊 的需求 。 并
对 于本 文 所涉 及 到 的无 纸化 考 试 系统 而言 。 由
于系 统是 建 立 在 We b上 的 。所 有 的 功 能可 以通过
b t r ba piain w ihh sgo itia it n xe d it. et p l t hc a od manan blya de tn a ly e we c o i b i
Ke o d J E S r t; p ig Hi e ae MVC p e e t t n ly r b s e sl gc ly r p ni n e ly r y W r : 2 E; tus S r ; b r t; n n ; r s na i e ; u i s o i e , e te c a e o a n a
2 1 年 6月 01 第 3 2卷第 3期
江 西 教 育 学 院学 报 ( 合 ) 综 J un l f i g i n tue f d c t n C mpe e s e o ra o a x Is tt o u a o ( o rh n i ) Jn i E i v
ds e t t n iv sia e e i tg ain o r e ̄au w r s b s d o a e e s e a n t n s se i r e o d v p is r i n e t t s t n e r t f t e / /e o k a e n p p d s x mi a o y tm o d r t e do ao g h o h ' i n

Struts、Spring、Hibernate三大框架的原理和优点

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等。

三大框架

三大框架
• • • • 1.属性文件(Hibernate.properties) 调用代码: Configuration conf = new Configuration(); 2.Xml文件(Hibernate.cfg.xml) 调用代码: Configuration conf = new Configuration().configure();
Hibernate常用的接口
1.Configuration接口 configuration对象用于加载解析配置文件启动Hibernate,然后创建 SessionFactory实例 2.SessionFactory接口 一个SessionFactory实例对应一个数据存储源,应用从 SessionFactory中获取Session实例 。SessionFactory有以下特点: 1.它是线程安全的,这意味着它的同一个实例可以被应用的多个线程 共享。 2.它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用 只访问一个数据库,只需要创建一个SessionFactory实例,在应用初 始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每 个数据库创建一个单独的SessionFactory实例。 之所以称SessionFactory是重量级的,因为它需要一个很大的缓存, 用来存放预定义的SQL语句及映射元数据等。用户还可以为 SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的 二级缓存,该缓存用来存放被工作单位读过的数据,将来其他工作单 元可能会重用这些数据,因此这个缓存中的数据能被所有的工作单元 共享。一个工作单元通常对应一个数据库事务。
Hibernate配置文件的书写
Hibernate.cfg.xml
Hibernate映射文件的书写

JavaWeb开发框架的对比与应用案例

JavaWeb开发框架的对比与应用案例

JavaWeb开发框架的对比与应用案例JavaWeb开发框架是当前Web应用开发中非常重要的一环。

随着互联网的发展,JavaWeb开发框架的种类也越来越多,其中比较知名的有Spring、Struts、Hibernate等,本文将对这些框架进行对比,并给出一些开发案例。

一、Spring框架Spring是一款轻量级的Java开发框架,它是目前最为流行的框架之一。

Spring提供了一系列可重用代码,让JavaWeb应用的开发更加容易和高效。

Spring的主要特点包括控制反转、依赖注入、面向切面编程等。

Spring框架可以被用于开发各种类型的Web应用,如社交网络、企业应用等。

Spring的优点在于它所提供的灵活性和可扩展性,同时也支持多个不同的程序设计模式。

举个例子,Spring MVC框架可以支持Web应用程序的开发,并且提供多种不同的视图技术,如JSP和Thymeleaf模板等。

Spring的使用可以大大简化JavaWeb应用程序的开发难度,并且降低代码的复杂性。

此外,开发者可以很容易地使用Spring提供的工具来管理和维护应用程序。

二、Struts框架Struts是一款基于MVC模式的开发框架,它是最早的JavaWeb框架之一。

Struts的特点在于它所提供了应用程序组件的相对简单易用性,从而使得应用的开发变得更加快速和高效。

Struts的核心是其控制器,它可以将Web请求分配给各个组件,并且可以自动地处理必要的转换和数据验证。

对于大部分JavaWeb应用程序来说,Struts是一个理想的开发框架。

Struts的优点在于它所提供的模板功能,这可以让开发者通过简单地定义模板和组件的形式,来开发应用程序。

三、Hibernate框架Hibernate是一款完全由Java编写的Object-RelationalMapping(ORM)框架。

它允许Java开发人员使用对象方式访问数据,这意味着开发者不需要编写复杂的SQL查询,并且可以使用Hibernate进行简单的数据库操作。

hibernate框架的工作原理

hibernate框架的工作原理

hibernate框架的工作原理Hibernate框架的工作原理Hibernate是一个开源的ORM(Object-Relational Mapping)框架,它将Java对象映射到关系型数据库中。

它提供了一种简单的方式来处理数据持久化,同时也提供了一些高级特性来优化性能和可维护性。

1. Hibernate框架的基本概念在开始讲解Hibernate框架的工作原理之前,需要先了解一些基本概念:Session:Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。

SessionFactory:SessionFactory是一个线程安全的对象,它用于创建Session对象。

通常情况下,应用程序只需要创建一个SessionFactory对象。

Transaction:Transaction是对数据库操作进行事务管理的接口。

在Hibernate中,所有对数据库的操作都应该在事务中进行。

Mapping文件:Mapping文件用于描述Java类与数据库表之间的映射关系。

它定义了Java类属性与数据库表字段之间的对应关系。

2. Hibernate框架的工作流程Hibernate框架主要分为两个部分:持久化层和业务逻辑层。

其中,持久化层负责将Java对象映射到数据库中,并提供数据访问接口;业务逻辑层则负责处理业务逻辑,并调用持久化层进行数据访问。

Hibernate框架的工作流程如下:2.1 创建SessionFactory对象在应用程序启动时,需要创建一个SessionFactory对象。

SessionFactory是一个线程安全的对象,通常情况下只需要创建一个即可。

2.2 创建Session对象在业务逻辑层需要进行数据访问时,需要先创建一个Session对象。

Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。

2.3 执行数据库操作在获取了Session对象之后,就可以执行各种数据库操作了。

java三大框架是什么

java三大框架是什么

java三大框架是什么Java三大框架是什么一、介绍Java是一种广泛使用的编程语言,由于其跨平台性和丰富的类库支持,成为了企业级应用开发的首选语言。

在Java开发中,框架是非常重要的组成部分,它们提供了一套结构化的工具和方法来简化开发流程并提高代码的重用性和可维护性。

在众多Java框架中,有三个最重要、最流行且被广泛使用的框架,它们分别是Spring框架、Hibernate框架和Struts框架。

二、Spring框架1. 简介Spring框架是一个轻量级的Java开发框架,最初用于解决企业级应用开发中的复杂性和耦合性问题。

Spring提供了一系列的模块和组件,为开发者提供了全面的解决方案,例如依赖注入、AOP(面向切面编程)、IoC(控制反转)等。

Spring框架的核心是IoC容器,它通过管理对象的生命周期和控制对象之间的依赖关系,简化了开发流程。

2. 主要特点和优势(1)松耦合:Spring框架通过IoC容器管理对象之间的依赖关系,使得应用程序的各个组件之间变得松散耦合,便于维护和升级。

(2)面向切面编程:Spring框架支持AspectJ规范,可以通过AOP实现横切关注点的模块化,并将其与业务逻辑分离,提高了代码的可维护性和重用性。

(3)可扩展性:Spring框架采用模块化的设计,开发者可以根据需要选择性地使用各个模块,使得框架具有很高的可扩展性和灵活性。

(4)测试支持:Spring框架提供了对单元测试的支持,可以方便地对代码进行单元测试和集成测试。

3. 使用场景Spring框架广泛应用于企业级应用开发,特别是在大规模和复杂度高的项目中表现出色。

由于其完善的设计和优秀的生态系统,Spring框架不仅可以用于开发Web应用程序,还可以用于开发移动应用、分布式系统、大数据系统等各种类型的应用。

三、Hibernate框架1. 简介Hibernate框架是一个优秀的Java持久化框架,它简化了对象与数据库之间的映射和操作,提高了开发效率和代码的可维护性。

Java框架性能比较

Java框架性能比较

Java框架性能比较Java作为一种强大的编程语言,广泛应用于各种软件开发领域。

而在Java开发中,框架的选择对于项目的成功与否起着至关重要的作用。

不同的框架在性能上有着各自的优势和劣势。

本文将对几种常见的Java框架进行性能比较,以帮助读者在实际开发中做出明智的选择。

一、Spring框架Spring框架是目前广泛应用的Java开发框架之一。

它提供了一个轻量级的容器,可以管理对象的生命周期并且解决了常见的依赖关系问题。

Spring的模块化设计使得开发者可以按需选择所需的功能模块,从而减小了内存消耗和启动时间。

Spring框架的优势在于其灵活性和可扩展性,能够满足各种复杂的开发需求。

然而,由于Spring框架的庞大复杂性,其性能在一定程度上受到了影响。

相比于其他框架,Spring框架的启动时间较长,对于一些对性能要求较高的系统可能不太适用。

此外,Spring框架还需要依赖其他核心库,增加了项目的复杂度。

二、Hibernate框架Hibernate框架是用于Java与数据库交互的重要工具。

它提供了一个面向对象的数据访问层,将Java对象映射到数据库表格中。

Hibernate框架的优势在于其简化了数据的持久化操作,并且提供了一套灵活的查询语言(HQL)。

然而,Hibernate框架在性能上存在一定的问题。

由于其ORM(对象关系映射)特性,Hibernate在数据读取和写入方面的性能相对较低。

同时,对于较复杂的对象关系,Hibernate的查询性能也有一定影响。

三、Spring Boot框架Spring Boot框架是基于Spring框架的增强版本,旨在简化开发过程。

它提供了一种快速构建独立应用程序的方式,并且自动配置了大部分常用的功能和组件。

Spring Boot的优势在于其简单易用的特点,它减少了开发者的配置工作,提高了开发效率。

然而,Spring Boot框架相对于Spring框架来说,在性能上存在一定的劣势。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hibernate小试牛刀1、概述Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了封装,Hibernate提供了强大,高性能的对象到关系型数据库的持久化服务,利用Hibernate,开发人员可以按照Java的基础语言进行持久层开发。

Hibernate提供的HQL是面向对象的查询语言,它在对象型数据和关系型数据库之间,构建了一条快速,高效,便捷的沟通渠道。

我们在本次课中要掌握持久化以及对象-关系映射等概念,并且掌握如何配置HIbernate,理解Hibernate的基础语义和配置文件中的各个元素。

我们要了解Hibernate的体系结构,和Hibernate中的事物管理,以及简单了解HQL语言。

最后要学会使用Hibernate开发应用程序。

2、Hibernate框架简介开发程序使用HIbernate框架的好处由于开发的多数软件产品都是基于数据库的,也就是说我们在一个软件中的操作多数都是对数据库中的数据进行的操作。

我们对数据库大量操作就会导致数据访问层的代码变得非常繁琐,并且直接降低了我们开发效率,想想我们之前写的Dao类,假如我们要操作好多表,每个表又有很多很多的字段,假如我们查询几个表的信息,是不是我们这里的DAO层代码就非常繁琐了。

我们把大把的时间放在编写DAO类,而且我们手动编写这些代码很容易出错,这也会为调试工作带来麻烦。

这和企业要求高效率开发相违背,那么有没有一套更好的访问数据库框架,使我们可以摆脱DAO层的困境呢?很显然,我们要学习的HIbernate框架就是这样一个框架。

3、理解持久化瞬时状态在程序运行的时候有些程序数据保存在内存当中,当程序退出后,这些数据就不复存在了。

所以我们称这些数据的状态为瞬时的。

持久状态就是我们在使用一些软件的时候,有些数据在程序退出以后,还以文件等形式保存在硬盘中,那么我们称这些数据的状态是持久的。

持久化就是将程序中的数据在瞬时状态和持久状态之间转换的机制,JDBC就是一种持久化机制,将程序数据直接保存成文件也是持久化机制的一种实现。

但我们常用的是将程序数据保存在数据库中,所以持久化通常是将数据保存在数据库中或是将数据库中的数据读取出来。

4、ORM概述对象-关系映射(ORM)我们现在所编写的程序都是基于面向对象的思想设计的,那么瞬时的数据,也就是程序运行时放在内存中的数据也是以对象的形式存在的,而持久的数据多数保存在关系型数据库中,或者把关系型数据库中的数据读取出来,以对象的形式封装,所以我们持久化的工作主要在对象和关系型数据之间完成。

也就是说我们在编写程序的时候以面向对象的方式处理数据,而保存数据的时候却以关系型数据库的形式存储到数据库中,所以,我们需要一种能在两者之间进行数据转换的机制,我们就将这种机制称为对象-关系映射机制,简称ORM。

我们使用这个机制保存对象和关系型数据库表的映射信息,当数据在对象和关系数据库中转换的时候,协助正确的完成转换接下来我们了解一下能够实现ORM的框架HIbernate。

ORM就是对象关系映射。

Hibernate框架:能够实现ORM的框架对于Hibernate的称呼有很多种,比如工具,技术,框架以及解决方案等,在这里我们习惯性的称它为框架。

但是最重要的是大家一定要知道它的作用,就是能够实现对象关系映射。

Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationMapping)工具。

能够实现对象-关系映射的框架有很多,Hibernate可以说是这些框架中最流行,最受开发者关注的,那么Hibernate这么流行的原因是什么呢?首先我们假设在理想情况下,我们在程序中需要获得任何Java对象并将它保存在数据库中都应该是很轻松的,不应该为此编写特殊的代码,也不会有性能的损失,而程序是完全可移植的,也就说,如果不发生特殊的情况,我们就不需要为类或者数据库表的关联做任何额外的工作,那么这就是我们假设的理想状态,而Hibernate框架已经非常接近这个目标了,现在我们了解一下Hibernate框架。

Hibernate对JDBC进行了封装,简化了数据访问层我们知道之前我们学习的课程都是针对JDBC编程的,然而Hibernate对JDBC进行了封装,简化了数据访问层。

我们使用Hibernate框架将会大大减少数据访问层繁琐的重复性代码。

使得程序员可以随心所欲的使用面向对象编程思维来操纵数据库,Hibernate可以应用在任何使用JDBC的场合,即可以在Java的客户端程序使用,也可以在Servlet或JSP的WEB应用中使用。

那么在Hibernate中类与数据库中的表是如何关联的呢?在Hibernate中我们使用XML格式的配置文件来存储映射信息6、Hibernate框架的下载及配置使用Hibernate首先下载并配置它,它的官方主页是,我们需要的Hibernate框架的jar包可以从官方网站上下载,一般我们配置Hibernate框架的时候IDE首选为MyEclipse。

但是MyEclipse集成度太高,对于初学者,为了更好的了解Hibernate工作原理,我们还是先使用Eclipse,下面我们学习一下配置Hibernate框架的步骤◆首先下载3.3.2版本的Hibernate框架的压缩文件,然后解压,我们看一下解压后的目录结构我们用到的是lib目录下所有的jar包文件和hibernate3.jar包,但是我们下载的Hibernate压缩包下有几个开源的jar包是没有的,还需要我们手动下载,其中包括comments-lang-2.3.jar、slf4j-api-1.5.8.jar、log4j-1.2.16.jar,我们要链接Oracle数据库还需要Oracle数据库的jar包,怎么找这个之前已经学习了接下来我们创建一个Java项目,要有如下目录结构其中hib是我们项目的名称,src是源文件的存放目录,WebRoot目录下的WEB-INF目录是我们存放编译后的文件和第三方jar包的目录。

编译后的文件存放在classes目录,第三方jar包放在lib目录下。

我们创建好项目之后,将我们需要的jar包都放在lib目录下,Hibernate配置文件设置我们已经做好了编写hibernate程序的准备,下面我们首先来加载jar包,我们首先将lib下的jar包都加载到项目中,然后我们在新建的工程项目hib 的根目录(src)下创建一个名为hibernate.cfg.xml的文件,这是hibernate的配置文件,这个文件中主要存放链接数据库的配置信息,我们在这里把它放在src 的根目录下,大家可以看一下这个文件的内容:这个文件很简单,主要记录数据库的url地址,数据库的用户名,密码,JDBC驱动的位置,这些是配置文件的主要内容,稍后还会添加其他的配置信息。

现在假设在数据库(没有特别提示都是Oracle)中,有一个记录用户登录信息的表login表中有两个字段:username和password,那么接下来我们将使用Hibernate 框架针对login表实现增删改查的功能搭建Hibernate项目环境添加可持久化类以及配置文件在这里,可持久化类就是使用普通的Java对象就可以,习惯上我们叫做POJO,持久化类叫什么不重要,关键我们要知道它是什么,一个POJO很像JavaBean,例如:它的属性是通过getter和setter方法来访问的,也就是说它对外隐藏了实现细节,然后我们来添加一个对象和关系型数据表的映射文件,文件名为Login.hbm.xml,先看一下这个文件中的代码:在这个文件中,我们可以看到对象与数据库表的对应关系,首先class标签中用于指定Login类与login表的映射,然后接下来是id 标签,这代表主键,因为这个表有两个字段—username和password,在这里我们把usename 当做主键,在id标签里的name 表示Login类中的属性名字,type是类型,然后再看column标签,它里面的name表示表中字段的名字,generator标签定义主键的生成方式,此处的设置表示主键是指派的,就是由用户自行管理,然后看id标签下的property标签,这个标签中的内容表示Login类中与表中其他字段的映射,如果我们还有其他的字段,那么就要再增加property标签,用于其他字段的标签配置与id标签基本类似,但是在这里有一个not-null属性,用它来控制该字段是否为空,我们在添加完这个映射文件后,还要在hibernate.cfg.xml里添加这个映射文件的声明,也就是声明Login.hbm.xml文件是一个映射配置文件。

这条声明语句添加在session-factory的结束标签之前就可以了。

Hibernate的工作原理大家看一下这个图片,这个图就是hibernate 的工作原理,中间部分就是hibernate,左边部分是我们的java程序,右边部分就是数据库,在没有中间的hibernate之前,java程序是通过JDBC操作数据库的,JDBC就是直接通过SQL语句操作面向关系的数据库表,这有什么缺点呢?java是面向对象的,数据库表是面向关系的,我们以面向对象的语言来操作面向关系的数据库,那么在JDBC中我们就要不断的进行数据的来回转换,非常的麻烦,那么我们看Hibernate怎么有效的解决了这个问题,在Hibernate中会为每一个数据库表建立一个持久化类,然后,还要通过一个映射文件,说明两者的映射关系,比如哪一个持久化类和哪一个表对应,这个持久化类的哪一个属性分表对应数据库表中的哪一个字段,当我们把持久化类,配置文件,映射文件创建好之后,我们就可以使用Hibernate的API,以面向对象的思想,对这个持久化类进行操作,注意这个时候我们不再使用SQL语句,而是使用HQL语句、或者其他语句来对持久化类进行操作,而Hibernate的内部机制可以保证我们对持久化类进行的增删改查操作他都会持久化到这个数据库表中,这么一来,在程序员的眼里面,它还能不能看到数据库表,当然看不见啦,因为它面对的就是一个又一个持久化类。

这么做我们的操作统一啦,都是面向对象的,我们的设计也统一啦,全部采用面向对象表的设计思想。

7、通过Hibernate实现增加功能我们已经搭建好了一个Hibernate,下面我们学习怎么用Hibernate实现增删改查的功能。

实现对数据库的操作,也就是要实现DAO层,那么我们添加一个LoginDAO类,在这类中我们要用到Session对象和Transaction对象,但是这里的Session对象不是我们以前学习的Session对象,这个Session对象是hibernate3.jar 包中的Session对象,我们对数据库中的所有操作都是通过Session来完成的,Transaction对象在这里用来处理对数据库操作的事物,例如提交功能,然后我们在构造方法中实例化Session对象实例化的过程是首先找到Hibernate的配置,然后从配置中取出SessionFactory,也就是Session工厂,最后从SessionFactory中取出Session,我们接下来添加一个们用try-catch结构来捕获异常,然后我们对login表进行增加的操作,首先我们来实例化Transaction对象,大家知道Transaction对象是用来处理事务的,那么实例化它就是开启事务,然后调用session对象的save方法,并将login对象传入该方法,然后提交到数据库,并关闭session对象,当然如果在这个过程中如果出现异常我们就会将事务回滚,大家可以看到我们没有编写sql 语句,就完成了增加记录的功能。

相关文档
最新文档