最新hibernate技术课程讲解
- 格式:ppt
- 大小:597.50 KB
- 文档页数:29


目录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文件的引用。
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是一个开源的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"元素来指定实体类的映射文件。
Hibernate SQL拼接原理1. 什么是HibernateHibernate是一个开源的Java持久化框架,它提供了一个对象关系映射(Object-Relational Mapping,ORM)的解决方案,用于将Java对象与关系数据库进行映射。
通过Hibernate,我们可以使用面向对象的方式来操作数据库,而不需要直接编写SQL语句。
Hibernate采用了一种称为“延迟加载”的机制,它会在需要访问数据时才去执行SQL查询。
这种机制可以提高性能,并且使得开发者可以将更多的精力放在业务逻辑上。
2. Hibernate SQL拼接原理在使用Hibernate时,我们通常使用HQL(Hibernate Query Language)或者Criteria API来查询数据。
这些查询语言会被转换成对应的SQL语句,并由Hibernate执行。
2.1 HQL和SQLHQL是一种面向对象的查询语言,它类似于SQL但具有更高级的特性。
例如,HQL支持继承、多态、关联等概念,并且可以直接操作Java对象而不需要关心底层数据库表结构。
当我们使用HQL进行查询时,Hibernate会将HQL语句转换成对应的SQL语句,并通过JDBC驱动执行SQL查询。
这个过程包括两个阶段:解析和执行。
2.2 解析阶段在解析阶段,Hibernate会对HQL语句进行语法分析,并根据查询条件生成对应的SQL查询。
这个过程包括以下几个步骤:2.2.1 解析HQL语句首先,Hibernate会将HQL语句解析成一个抽象的查询树(Query Tree)。
这个查询树表示了HQL语句的结构和含义。
例如,对于以下的HQL语句:String hql = "from Employee e where = :deptName";Hibernate会解析成如下的查询树:SELECTeFROMEmployee eWHERE = :deptName2.2.2 解析实体和属性接下来,Hibernate会解析查询树中的实体和属性,并将它们映射到数据库表和列。