Hibernate学习
Hibernate学习系列之一(Hibernate配置)
现在我们已经有了一个持久化类和它的映射文件,该是配置Hibernate的时候了。在此之前,我们需要一个数据库。 HSQL DB是种基于Java
的SQL数据库管理系统(DBMS),可以从HSQL DB的网站上下载。实际上,你只需下载的包中的hsqldb.jar文件,并把这个文件放在开发文件夹的lib/目录下即可。
在开发的根目录下创建一个data目录 - 这是HSQL
DB存储数据文件的地方。此时在data目录中运行java -classpath ../lib/hsqldb.jar
org.hsqldb.Server就可启动数据库。你可以在log中看到它的启动,及绑定到TCP/IP套结字,这正是我们的应用程序稍后会连接的地方。如果你希望在本例中运行一个全新的数据库,并删除data/目录下的所有文件,再重新启动HSQL数据库。
Hibernate是你的应用程序里连接数据库的那层,所以它需要连接用的信息。连接(connection)是通过一个也由我们配置的JDBC连接池(connection
pool)来完成的。
Hibernate学习系列之二(大小写敏感性问题)
除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于 org.hibernate.eg.Foo 并且 foo.barSet 也不等价于 foo.BARSET。
本手册中的HQL关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强,
但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。
Hibernate学习系列之三(HQL中join 语法的形式)
HQL支持两种关联join的形式:implicit(隐式) 与explicit(显式)。
上一节中给出的查询都是使用explicit(显式)形式的,其中form子句中明确给出了join关键字。这是建议使用的方式。
implicit(隐式)形式不使用join关键字。关联使用"点号"来进行“引用”。implicit join可以在任何HQL子句中出现.implicit join在最终的SQL语句中以inner join的方式出现。 from Cat as cat where cat.mate.name like '%s%'
Hibernate学习系列之四(HQL中多态查询)
一个如下的查询语句:from Cat as cat
不仅返回Cat类的实例, 也同时返回子类 DomesticCat的实例. Hibernate 可以在from子句中指定任何 Java 类或接口.
查询会返回继承了该类的所有持久化子类 的实例或返回声明了该接口的所有持久化类的实例。下面的查询语句返回所有的被持久化的对象: from java.lang.Object o
接口Named 可能被各种各样的持久化类声明: from Named n, Named m where n.name = m.name
注意,最后的两个查询将需要超过一个的SQL SELECT.这表明order by子句 没有对整个结果集进行正确的排序. (这也说明你不能对这样的查询使用Query.scroll()方法.)
Hibernate学习系列之四(Session和事务范围)
SessionFactory对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建。
Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的
工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象
才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。
此外我们还要考虑数据库事务。数据库事务应该尽可能的短,降低数据库中的锁争用。
数据库长事务会阻止你的应用程序扩展到高的并发负载。因此,假若在用户思考期间让数据库事务开着,直到整个工作单元完成才关闭这个事务,这绝不是一个好的设计。
Hibernate学习系列之四(集合外键)
集合实例在数据库中依靠持有集合的实体的外键加以辨别。此外键作为集合关键字段(collection key
column)(或多个字段)加以引用。集合关键字段通过<key>
元素映射。
在外键字段上可能具有非空约束。对于大多数集合来说,这是隐含的。对单向一对多关联来说,外键字段默认是可以为空的,因此你可能需要指明 not-null="true"。
<key column="productSerialNumber" not-null="true"/>
外键约束可以使用ON DELETE CASCADE。
<key column="productSerialNumber" on-delete="cascade"/>
现在我们已经有了一个持久化类和它的映射文件,该是配置Hibernate的时候了。在此之前,我们需要一个数据库。 HSQL DB是种基于Java
的SQL数据库管理系统(DBMS),可以从HSQL DB的网站上下载。实际上,你只需下载的包中的hsqldb.jar文件,并把这个文件放在开发文件夹的lib/目录下即可。
在开发的根目录下创建一个data目录 - 这是HSQL
DB存储数据文件的地方。此时在data目录中运行java -classpath ../lib/hsqldb.jar
org.hsqldb.Server就可启动数据库。你可以在log中看到它的启动,及绑定到TCP/IP套结字,这正是我们的应用程序稍后会连接的地方。如果你希望在本例中运行一个全新的数据库,并删除data/目录下的所有文件,再重新启动HSQL数据库。
Hibernate是你的应用程序里连接数据库的那层,所以它需要连接用的信息。连接(connection)是通过一个也由我们配置的JDBC连接池(connection
pool)来完成的。
Hibernate学习系列之二(大小写敏感性问题)
除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于 org.hibernate.eg.Foo 并且 foo.barSet 也不等价于 foo.BARSET。
本手册中的HQL关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强,
但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。
Hibernate学习系列之三(HQL中join 语法的形式)
HQL支持两种关联join的形式:implicit(隐式) 与explicit(显式)。
上一节中给出的查询都是使用explicit(显式)形式的,其中form子句中明确给出了join关键字。这是建议使用的方式。
implicit(隐式)形式不使用join关键字。关联使用"点号"来进行“引用”。implicit join可以在任何HQL子句中出现.implicit join在最终的SQL语句中以inner join的方式出现。 from Cat as cat where cat.mate.name like '%s%'
Hibernate学习系列之四(HQL中多态查询)
一个如下的查询语句:from Cat as cat
不仅返回Cat类的实例, 也同时返回子类 DomesticCat的实例. Hibernate 可以在from子句中指定任何 Java 类或接口.
查询会返回继承了该类的所有持久化子类 的实例或返回声明了该接口的所有持久化类的实例。下面的查询语句返回所有的被持久化的对象: from java.lang.Object o
接口Named 可能被各种各样的持久化类声明: from Named n, Named m where n.name = m.name
注意,最后的两个查询将需要超过一个的SQL SELECT.这表明order by子句 没有对整个结果集进行正确的排序. (这也说明你不能对这样的查询使用Query.scroll()方法.)
Hibernate学习系列之四(Session和事务范围)
SessionFactory对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建。
Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的
工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象
才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。
此外我们还要考虑数据库事务。数据库事务应该尽可能的短,降低数据库中的锁争用。
数据库长事务会阻止你的应用程序扩展到高的并发负载。因此,假若在用户思考期间让数据库事务开着,直到整个工作单元完成才关闭这个事务,这绝不是一个好的设计。
Hibernate学习系列之四(集合外键)
集合实例在数据库中依靠持有集合的实体的外键加以辨别。此外键作为集合关键字段(collection key
column)(或多个字段)加以引用。集合关键字段通过<key>
元素映射。
在外键字段上可能具有非空约束。对于大多数集合来说,这是隐含的。对单向一对多关联来说,外键字段默认是可以为空的,因此你可能需要指明 not-null="true"。
<key column="productSerialNumber" not-null="true"/>
外键约束可以使用ON DELETE CASCADE。
<key column="productSerialNumber" on-delete="cascade"/>
热门话题 · · · · · · ( 去话题广场 )
- 歌手2024直播 4.4万次浏览
- 我的内地电视剧十佳 33.1万次浏览
- 我们的职业安全感来自哪里? 30.7万次浏览
- 哪一刻你体会到了平等的可贵? 13.8万次浏览
- 我第一次献血的经历 18.7万次浏览
- 你的读书体系 33.8万次浏览