要有效地使用Hibernate,扎实地理解关系模型和SQL是前提条件。你需要理解关系模型,以及像保证数据完整性的标准化这样的话题,还要利用你的SQL知识调优Hibernate应用程序的性能。Hibernate让许多重复的编码任务自动化,但是如果要利用现代SQL数据库的全部功能,你的持久化技术必须扩充至超越Hibernate本身。记住,根本的目标是稳健、高效的持久化数据管理。
要有效地使用Hibernate,扎实地理解关系模型和SQL是前提条件。你需要理解关系模型,以及像保证数据完整性的标准化这样的话题,还要利用你的SQL知识调优Hibernate应用程序的性能。Hibernate让许多重复的编码任务自动化,但是如果要利用现代SQL数据库的全部功能,你的持久化技术必须扩充至超越Hibernate本身。记住,根本的目标是稳健、高效的持久化数据管理。
回顾一些本书中用到的SQL术语。你用SQL作为数据定义语言(Data Definition Language,DDL),用CREATE和ALTER语句创建数据库Schema。创建了表(和索引、序列等)之后,又用SQL作为数据操作语言(Data Manipulation Language,DML)来操作和获取数据。操作数据的操作包括插入(insertion)、更新(update)和删除(deletion)。通过限制(restriction)、投影(projection)和联结(join)操作(包括笛卡儿积,Cartesian
product)执行查询来获取数据。为了有效地生成报表,可视需要使用SQL对数据进行分组(group)、排序(order)和统计(aggregate)。甚至可以相互嵌套SQL语句:这种技术使用了子查询(subselect)。
在过去的15年里,开发人员一直在谈论范式不匹配的问题。这种不匹配解释了为什么都要在每一个企业项目中与持久化相关的问题上付出如此巨大的努力。这里所说的范式(paradigm)是指对象模型和关系模型,或者可能是面向对象编程(Object-Oriented Programming,OOP)和SQL。
在这幅图中,可以看到一个User有许多BillingDetails。可以从两个方向遍历类之间的关系。表示这些实体的类可能极为简单:
public class User { private String username; private String name; private String address; private Set billingDetails; // Accessor methods (getter/setter), business methods, etc. }
public class BillingDetails { private String accountNumber; private String accountName; private String accountType; private User user; // Accessor methods (getter/setter), business methods, etc. }可以很容易地给这个例子想出一个好的SQL Schema设计:
create table USERS( USERNAME varchar(15) not null primary key, NAME varchar(50) not null, ADDRESS varchar(100) ); create table BILLING_DETAILS( ACCOUNT_NUMBER varchar(10) not null primary key, ACCOUNT_NAME varchar(50) not null, ACCOUNT_TYPE varchar(2) not null, USERNAME varchar(15) foreign key references USER );这两个实体之间的关系表示为外键(foreign key),如BILLING_DETAIL中的USERNAME。对于这个简单的领域模型,对象/关系的不匹配几乎不明显;编写JDBC代码来插入、更新和删除关于用户和帐单明细的信息很简明。
Hibernate实战_笔记1,布布扣,bubuko.com
原文:http://blog.csdn.net/com185272358/article/details/20623299