![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hibernate
文章平均质量分 70
sunxing007
这个作者很懒,什么都没留下…
展开
-
Hibernate学习笔记:第一例
重学hibernate,决定分享学习笔记。新建一个project,名字叫做hibernate, 普通的java project就可以了。导入jar包,hibernate依赖很多jar包,我把用上的jar包都列出来,包括但不限于这些。这些jar包作什么用我就不一一解释了。因为我用到了sqlserver 2000,所以数据库驱动msbase.jar, mssqlserver.jar, msutil.j原创 2009-08-19 18:12:00 · 1582 阅读 · 0 评论 -
Hibernate学习笔记:继承映射之每个子类一张表,使用辨别标志
继承映射之每个子类一张表,使用辨别标志:父类和子类分放在不同的表中,子类通过父类id与父类关联,父类有一个字段来标名该纪录是哪个子类。只有父类有配置文件,父类中通过subclass -> join标识子类。以前面的每个子类一张表为基础,表关系保持不变,给animal1表添加一个字段animal_type: alter table animal1 add animal_type varchar(10原创 2009-08-31 10:10:00 · 2032 阅读 · 1 评论 -
Hibernate学习笔记:理解一级缓存和session清理
[本文大多数内容都来自互联网]Session执行一些sql语句把内存中的对象的状态同步到数据库,这个过程被称为session清理.在默认情况下,Session会在下面的时间点清理缓存。1 当应用程序调用net.sf.hibernate.Transacation的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。 2 当应用程序调用Session的find()或原创 2009-08-31 17:38:00 · 3809 阅读 · 0 评论 -
Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表
先分析一下为什么要混合使用. 假如有这样一个情况: tiger有很多专属字段:tiger(animal_id,kind, weigth, body_len, tail_len, body_high),而monkey专属的字段就一个monkey(animal_id, age),如果只采用每个子类一张表, 则对于monkey来说,效率太低,因为为了一个字段却要跨表; 如果只采用一个继承结构一张表, 则原创 2009-08-31 10:41:00 · 1215 阅读 · 0 评论 -
Hibernate学习笔记:每个具体的类一张表
这种做法是不再有父类表,每个子类一个表,子类除了专有字段,还有父类的字段,只有父类有配置文件,父类配置文件通过union-subclass标识子类。为了不和以前的demo产生冲突,新建表monkey1, tiger1;monkey1(id, name, zoo_id, age);tiger1(id, name, zoo_id, kind);需要注意的是:因为hibernate通过id辨别对象,为了原创 2009-08-31 13:28:00 · 1445 阅读 · 0 评论 -
Hibernate学习笔记:对象生命周期
学到这里我想谈一下自己的感受:在hibernate的世界里,要转换一下思维方式,那就是面向对象;在使用hibernate的时候,要忘记关系表,头脑中存在的就是对象以及对象之间的关系.当配置文件编写完毕之后,对象和对象之间的关系也就确定了.由hibernate掌握所有对象的生命周期. hibernate中的对象具有3种状态:1. Transient Objects临时对象Objects inst原创 2009-08-31 17:17:00 · 1102 阅读 · 0 评论 -
Hibernate学习笔记:检索策略
[注: 文中用到的例子对象和配置文件都在前面Hibernate学习笔记系列中提到过, 包含域对象,dao, 映射文件,DML语句.如果有看不明白,请参看前面的文章]hibernate检索策略是指hibernate加载关联对象的策略,hibernate3抓取关联对象有3种方式:连接抓取(join fetching):fetch="join", 在获取主对象的同时,通过外连接的方式获得关联对象,不原创 2009-09-08 11:16:00 · 1324 阅读 · 0 评论 -
Hibernate学习笔记:级联操作
级联操作是指对一个对象的操作(增删该)将传播到关联对象。hibernate是通过关联关系的元素(比如,, )的cascade属性来控制级联风格。Hibernate提供了以下几种级联风格:cascade="none": 默认值, 忽略关联性;cascade="all": save, update, delete时都执行关联;cascade="save-update": save, update时执行原创 2009-09-08 14:00:00 · 1279 阅读 · 0 评论 -
Hibernate学习笔记:使用native sql查询
只想看一个例子, getSession().createSQLQuery("select * from dbo.member").addEntity(Member.class).list(); Session通过createSQLQuery创建Native SQL Query接口,参数是一句sql, addEntity是添加返回的持久类,SQLQuery仍然会按照Member.hbm.xml的配置原创 2009-09-08 14:22:00 · 1313 阅读 · 0 评论 -
Hibernate学习笔记:配置hibernate日志
hibernate使用apache的common-logging记录日志,关于log4j的配置不是hibernate学习的主要内容,但是观察日志的活动有利于调试, 查错,了解底层.hibernate提供了详细的日志分类,我的配置文件中基本都提到了它们.#配置根logger,输出到console.##############################################log4原创 2009-09-08 14:35:00 · 3664 阅读 · 0 评论 -
Hibernate学习笔记:hibernate二级缓存攻略
hibernate二级缓存对系统的性能影响巨大, 我没有这方面的经验,所以不打算写文章, 但是我看到了一篇好文章, 可以拿来学习.[原贴地址:http://www.javaeye.com/topic/18904] 很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了。 我的经验主要来自hibernate2.1版本,基转载 2009-09-08 15:58:00 · 1104 阅读 · 0 评论 -
Hibernate学习笔记:session操作对象
Session提供了基本的crud操作, 事务控制, 一级缓存。save(): 保存一个新对象到数据库。对应插入数据库中的一条记录, 这里要注意的是,如果该对象的主键配置为identity, increment, forgign,sequence等等,则在save的时候不能指定id,如果id generator配置为assigned,则必须指定id.update(): 更改一个对象,对原创 2009-08-21 11:24:00 · 1392 阅读 · 0 评论 -
Hibernate学习笔记:集合映射之映射List
List与前面用过的Set不同之处是List是有序的,所以在用List作影射的时候, 需要维护一个顺序信息。给images1表加一个字段image_index, 用来标示同一个Product的图片的排列顺序:alter table images1 add image_index int。填上测试数据.映射值类型假如Product的images里面只需要放image_file, 则修改一下P原创 2009-08-25 10:22:00 · 1462 阅读 · 0 评论 -
Hibernate学习笔记:继承映射之每个子类一张表
继承映射之每个子类一张表:父类和子类分放在不同的表中,子类通过父类id与父类关联。只有父类有配置文件,父类中通过joined-subclass标识子类.以前面的Animal为例,这种做法需要3个关系表,animal(id, name, zoo_id);monkey(animal_id, age);tiger(animal_id, kind);monkey 和 tiger通过animal_id和an原创 2009-08-25 18:04:00 · 2319 阅读 · 0 评论 -
Hibernate学习笔记:HQL
前一例中BookHibernateDao的list方法用到了getSession().createQuery("HQL statement"); 返回一个Query, 这个Query是面向对象查询的最重要的接口.相当于jdbc中的statement,Query通过HQL和数据库交互.最简单的HQL: from Book 列出所有的Book对象. select到哪儿去了?这句话隐含select,可以原创 2009-08-21 09:18:00 · 1402 阅读 · 0 评论 -
Hibernate学习笔记:多对多的关联关系(many-to-many)
多对多的关系现实中也有很多, 学生选课程,订单和产品,老师和学生。继续复用前面的类Order,新加一个Product类, 并以订单和产品的关系来分析多对对关系。多对多表现的比较特殊的地方是需要中间表,我们已经有了order(订单)表,添加一个product(产品)表,为了实现order(订单)和product(产品)的多对多关系, 还需要一个中间表,叫做order_line(暂且就叫做订单流水线表原创 2009-08-24 11:22:00 · 1861 阅读 · 0 评论 -
Hibernate学习笔记:用Query作分页
Query提供了两个方法以实现分页:query.setFirstResult(int) 设置第一条记录开始的位置query.setMaxResults(int) 设置返回的纪录总条数在前面的BookDao的接口和实现类中添加一个方法:public List pagedList(int pageBegin, int pageSize){ Query query = getSession().cr原创 2009-08-21 14:50:00 · 10778 阅读 · 0 评论 -
Hibernate学习笔记:Criteria条件查询
除了Query, hibernate还提供了另外一种查询方式,Criteria, 先看一个例子,这个例子就是查询书名以"ww"开头的书。public List findByName1(String name){ //创建一个对Book进行条件查询的实例. Criteria criteria = getSession().createCriteria(Book.class); //对原创 2009-08-21 17:24:00 · 1930 阅读 · 0 评论 -
Hibernate学习笔记:一对一的关联关系(one-to-one)
今天开始学关联关系,在关系数据库中,表和表之间通过键关联,而对象与对象之间有继承,拥有的关系,那么hibernate怎么把关系数据库的关系映射到对象之间的关系呢?今天开始学这个主题的第一种,one-to-one一对一的关联关系.一对一的关系很常见,比如:人和他的身份证, 员工和他的联系方式,hibernate中one-to-one的关联关系有两种做法,一种是以主键关联,就是有两个表他们的主键一致;原创 2009-08-21 23:21:00 · 2001 阅读 · 0 评论 -
Hibernate学习笔记:组件映射
当第一次听到组件映射的时候,我觉得很难,以至于前几次学习hibernate的时候都没有看它,但是当我看过一遍之后,才知道它比关联关系映射更简单。为了不改动前面的demo的配置文件,打算引入新的关系表和对象。组件(component)就是被包含的对象,它和它的所有者存储在一个表中。考虑有这样一个表 customer(id, sex, firstName, lastName, nickName, pe原创 2009-08-24 14:58:00 · 1512 阅读 · 0 评论 -
Hibernate学习笔记:集合映射之映射Map
容器Map, List, Set, Bag都不仅可以映射值(String, Integer,FLoat, Double ...)类型, 还可以映射实体(我们自定义的pojo,有实体标记ID)类型.映射值类型考虑前面的Product对象,假如每个Product都配有几个图片(这通常是必需的),新建一个表images (product_id, image_name, image_file) ,原创 2009-08-24 16:41:00 · 3465 阅读 · 2 评论 -
Hibernate学习笔记:list和iterate
Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,1:返回的类型不一样,list()返回List, iterate()返回Iterator,2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这原创 2009-08-21 15:53:00 · 1384 阅读 · 0 评论 -
Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
对多的关联关系也是最常见的对象之间的关系, 比如一个班级有很多个学生, 一个公司有很多部门,一个部门有很多雇员,一份债务(Credit)对应多个现金流(Cashflow),一个人有多个小孩, 一个客户有多张订单等等。为了演示one-to-many,继续重用前面的对象Member会员,一个Member对象可以下多个订单Order,先添加一个订单类:package model;import j原创 2009-08-22 21:49:00 · 2506 阅读 · 2 评论 -
Hibernate学习笔记:集合映射之映射Set, Bag
前面已经有很多例子用到Set映射实体, 现在只是简单的提一下怎么用Set映射值类型, 其实他和List一样, 只是List需要维护顺序信息.修改一下Product的images为Set, 修改一下product映射文件Product.hbm.xml:原创 2009-08-25 10:56:00 · 1578 阅读 · 0 评论 -
Hibernate学习笔记:继承映射之每个类继承结构一张表
对象之间除了拥有,使用的关系,还有继承关系。Hibernate在作继承关系映射的时候有多种做法,今天学习第一种:每个类继承结构一张表,也就是说父类和子类在一张表中, 通过额外字段区分子类型。为了演示这种映射关系的做法,本文引入了四个对象,Animal, Monkey, Tiger,Zoo. Monkey和Tiger继承自Animal. 每个Animal都归属一个动物园Zoo,关系表animal(i原创 2009-08-25 13:49:00 · 1448 阅读 · 0 评论 -
Hibernate学习笔记:难点,常见面试题
无论多复杂,hibernate终究是一个和数据库打交道的框架,与jdbc功能一样。所以没有理由畏惧hibernate. hibernate的难点我觉得有两方面:一是性能优化,二是session管理。性能优化是个经验活; 关于session管理,单纯的hibernate可以使用ThreadLocal来解决, 如果和spring结合,使用spring提供的session管理方案很不错。hibern原创 2009-09-16 06:38:00 · 12680 阅读 · 1 评论