




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaEE企业级软件开发Hibernate入门2014洛阳师范学院吕延庆本节内容提要ORM和Hibernate简介数据库、SQL回顾与Mysql的使用MyEclipse对Hibernate开发的支持Hibernate的配置(Hibernate.cfg.xml)Hibernate映射文件(*.hbm.xml)ORM简介对象/关系映射ORM(Object-RelationMapping)用于将对象与对象之间的关系对应到数据库表与表之间的关系的一种模式。简单地说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。对象和关系数据是业务实现的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在着关联和继承关系。而在数据库中,关系数据无法直接表达多对多关联和继承关系。什么是关系模型(RelationalModel)?关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。所谓联系就是指实体之间的关系,即实体之间的对应关系。1:11:nm:n关系数据库:表、字段、主键、外键什么是面向对象(ObjectOriented)?面向对象三大特征:封装、继承(一般与特殊)、多态(覆盖与重载)类、对象、属性关系一般与特殊关系(isa):继承(extends)、实现(implement)组成(hasa):成员属性与成员方法关联及其多重性1:11:nm:n双向关联与单向关联ORM系统的一般构成ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。一般的ORM包括四个部分:对持久类对象进行CRUD操作的API用来规定类和类属性相关查询的语言或API规定mappingmetadata的工具可以让ORM实现同事务对象一起进行dirtychecking、lazyassociationfetching和其他优化操作的技术。Hibernate概述Hibernate体系结构Hibernate是一个开源ORM框架,一般作为模型层/数据访问层。它通过配置文件(hibernate.cfg.xml或perties)和映射文件(*.hbm.xml)把Java对象或持久化对象(PersistentObject,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作,其中PO就是POJO(普通Java对象)加映射文件。Hibernate的体系结构如图所示。图Hibernate体系结构Mysql简介Mysql是一个开源数据库服务器,应用十分广泛。数据库核心服务图形管理界面(不是必须):MySQLFront或Eclipse自带的DBBrowserJDBC驱动程序准备工作:MySQL中建表createdatabasemytest;usemytest;createtablebook(idINTnotnullauto_increment,nameVARCHAR(32)notnullunique,authorVARCHAR(64),priceDOUBLEnotnull,createtimeTIMESTAMPprimarykey(id)
);上述步骤也可在MyEclipse环境中以图形界面完成JDBC实现查询//JDBC实现Class.forName("com.mysql.jdbc.Driver");//driverclassConnectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest","root","lysfxy");//JDBCurl,username,passwordStringsql="select*frombook";PreparedStatementpstmt=conn.prepareStatement(sql);ResultSetrs=pstmt.executeQuery();if(rs!=null){ rs.last(); System.out.println(rs.getRow());}Hibernate配置(快速入门)在MyEclipse环境中为工程添加Hibernate支持(AddHibernateCapabilities)实质上做了两步,即添加了Hibernate所需的jar库文件建立Hibernate.cfg.xml配置文件为Books表建立Hibernate支持文件(HibernateReverseEngineering,反向工程)Book.javaBook.hbm.xmlBookDAO.java(非必须的)Hibernate的核心类和接口Configuration类管理Hibernate的配置信息SessionFactory接口负责创建Session的实例Session接口提供了持久化方法,如save,update,delete,query等。
Transaction接口在Hibernate中进行事务操作的接口Query接口Hibernate中用于执行HQL查询Hibernate实现(数据插入)//Hibernate实现Configurationcfg=newConfiguration().configure();SessionFactorysf=cfg.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();Bookb=newBook();b.setName("JavaEEProgramming");b.setAuthor("lyq");b.setPrice(18.0);b.setCreatetime(Calendar.getInstance().getTime());session.save(b);mit();session.close();sf.close();Hibernate配置技巧1:自动创建表hibernate.cfg.xml的配置中加入:
<property
name="hbm2ddl.auto">update</property>
可以实现根据映射文件自动建表,可能的取值有create,update,validate和create-drop。
注意,用create时,每次创建表会把数据清空。Hibernate配置技巧2:在日志中打印SQL语句hibernate.cfg.xml的配置中加入:
<property
name=“show_sql">true</property>
会在日志中打印SQL语句,有助于理解Hibernate底层工作原理,便于调试。Hibernate实现(查询)//Hibernate实现Configurationcfg=newConfiguration().configure();SessionFactorysf=cfg.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();Queryquery=session.createQuery("fromBook");List<Book>list=query.list();for(Bookb:list){System.out.println("name="+b.getName());System.out.println("author="+b.getAuthor());}mit();session.close();sf.close();Hibernate的映射文件*.hbm.xml<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.model.Student"table="student"catalog="hibernatetest">
<idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass=“native”/></id><propertyname="name"type="java.lang.String"><columnname="name"length="100"/></property><propertyname="theclass"type="java.lang.String"><columnname="theclass"length="100"/></property></class></hibernate-mapping>主键(id)生成方式<generator>标签的class值指定主键(id)生成方式,常用的有:native:
由数据库对主键赋值,由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。例如,MySQL的自增字段,SQLServer的自增字段;assigned:由应用程序对主键赋值,无需Hibernate参与,一般需要写一个id生成器Java类来保证不重复;foreign:使用外部表的字段作为主键,例如在一对一映射中;
主键(id)的其他生成方式sequence:
在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用
生成器(generator)。返回的标识符是long,short或者int类型
hilo:通过hi/lo算法实现的主键生成机制,需要额外的表保存主键生成历史状态seqhilo:
与hi/lo类似,只是主键历史状态保存在sequence中,使用于支持sequence的数据库,如Oracleidentity:
采用数据库提供的主键生成机制。如DB2、SQLServer、MySQLincrement:
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持将此值加1作为主键。这种方式可能产生的问题是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赔偿安葬协议书
- 机动车转让过户协议书
- 稻田调解协议书
- 苏州电子协议书
- 股份变卖协议书
- 芯片合资协议书
- 美团电子协议书
- 开发商房屋拆迁协议书
- 男方抚养协议书
- 药店清场协议书
- 2025年农村个人果园承包合同
- 湖北省武汉市2025届高三年级五月模拟训练试题数学试题及答案(武汉五调)
- 医师挂证免责协议书
- DL∕T 5210.6-2019 电力建设施工质量验收规程 第6部分:调整试验
- 2023年科技特长生招生考试试卷word
- GB/T 34560.1-2017结构钢第1部分:热轧产品一般交货技术条件
- GB/T 29318-2012电动汽车非车载充电机电能计量
- VSTi音源插件列表
- 安全文明施工措施费清单五篇
- 医院感染暴发报告处理流程图
- 中等职业学校学生实习鉴定表
评论
0/150
提交评论