hibernate
文章平均质量分 68
shizhan1881
这个作者很懒,什么都没留下…
展开
-
第一个简单的hibernate程序
目前主流的数据库一般都是关系型的数据库,而我们目前的高级程序语言都支持面向对象等特性,数据库的编程语言之间存在的一条鸿沟。在面向对象的数据库还没有得到普及的时候,ORM(对象,关系,映射)都将作为一种简化编程的工具存在。 下面就演示一个简单的利用hibernate(一个orm框架)框架写的一个小程序。 首先我们写一个javabean,Userbean,我们的类最好不要设置原创 2012-07-20 23:22:02 · 653 阅读 · 0 评论 -
hibernate映射list类型
当属性为list类型的时候,我们该怎样生成映射文件呢? 我们知道List最重要的特性就是它是有序的,那么我们的问题就集中在了如何维持这个有序性?最简单的方法就是每个在list集合中的元素,他自己有一个编号,能告诉list他是第几个元素,这样是不是就能解决了呢?hibernate映射list集合确实是这样子做的。 就像上面的这张表一张,xx在teamid为1中,他是第1个元原创 2012-08-12 10:38:13 · 932 阅读 · 0 评论 -
select属性
只select属性的时候,结果保存在object[]数组中。 代码: Session session = DBUtil.getSession(); String hql = "select d.deptid,d.deptname from Deptment as d"; Query query = session.createQuery(hql);原创 2012-08-10 21:17:10 · 823 阅读 · 0 评论 -
hibernate map映射(value为类类型)
map中value如果为简单类型的话,我们可以用element标签来进行映射,且只需要一份配置文件,但是如果map中的value为类类型的话,我们就不能用element标签进行映射了,我们可以用one-to-many标签进行映射。 下面看一个简单例子。 一个team里面有多个member,team中用map保存了他里面的members。 Team类:原创 2012-08-11 15:41:25 · 910 阅读 · 0 评论 -
hibernate 联合主键
我们知道某些表的主键并不是某个字段唯一确定的,而是由多个字段确定,这叫做联合主键,那么hibernate怎样帮我们实现联合主键呢? 要想实现联合主键,实体类必须有两个约束条件: 1:实体类必须实现Serializable接口。 2:实体类必须实现equals方法和hashCode方法。实现这两个方法的原因是帮助hibernate判断这个实体对象是否已经在表中存在原创 2012-08-12 15:53:40 · 791 阅读 · 0 评论 -
hibernate映射继承关系三
hibernate映射继承关系的第三种方式: 继承关系的每个类对应一张表,在关系数据模型中用外键参照关系来表示继承关系。 其实就是 父类的属性存在一张表中,子类的属性存在另外一张表中,那么如何维护子类和父类的关系呢,在子类的表中有一个外键字段引用了父类。 如下的表结构: employee表(父类(employee)的属性存放在employee表中):原创 2012-08-12 20:50:49 · 1390 阅读 · 0 评论 -
hibernate排序
查询排序包括内存排序和数据库排序。 数据库排序使用order-by属性,sql语句中有order by 子句。 内存排序使用sort属性,他有三个属性值(unsorted,natural,自定义排序名), natural指的是按照自然的升序排序。自定义的排序类必须实现comparator接口。 内存排序sql语句不变。原创 2012-08-12 14:58:45 · 925 阅读 · 0 评论 -
组件关联关系的映射
有的时候,我们的某个类中含有一个复杂属性,我们不想这个属性自己又占用一张表,这时候我们可以使用组建映射方式。 比如现在有个用户类(Usermessage),他里面包含了一个Name属性,这时候我们就可以使用组件方式配置xml了。 Usermessage类: package com.shizhan.po;import java.util.Date;publ原创 2012-08-09 16:51:43 · 576 阅读 · 0 评论 -
hibernate映射继承关系一
类之间具有继承关系,但是数据库中的关系模型并不支持继承和多态。 那么hibernate如何支持类之间的继承关系呢? 有一种最简单的映射方式是 继承关系树的每个具体类对应一个表:关系数据模型完全不支持域模型中继承关系和多态。 下面有三个类:员工类(Employee),小时工(HourEmployee),薪资员工(SalaryEmployee)。小时工和薪资员工继承原创 2012-08-12 19:09:11 · 555 阅读 · 0 评论 -
hibernate继承关系映射二
hibernate映射继承关系的第二种方式: 继承关系树的根类 对应一个表:对关系数据模型进行非常规设计,在数据库表中加入额外的字段区分子类型的字段。通过这种方式,可以使关系数据模型支持继承关系和多态。 还是之前的Employee(子类),SalaryEmployee,HourEmployee。 通过这种方式配置继承关系,只需要一个配置文件,Employee.hbm原创 2012-08-12 20:00:26 · 1163 阅读 · 0 评论 -
hibernate性能细节
Hibernate的cache管理Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用。Cache对于大量依赖数据读取操作的系统而言尤其重要。在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销是显而易见的,频繁的网络舆,数据库磁盘的读写操作都会大大降低系统的性能。此时如果能让数据库在本地内存中保留一个镜像,下次访问的时候只需原创 2012-11-09 17:55:21 · 743 阅读 · 0 评论 -
Hibernate:悲观锁和乐观锁
Hibernate支持两种锁机制: 即通常所说的“悲观锁(Pessimistic Locking)”和 “乐观锁(OptimisticLocking)”。 悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。Hibernate的加锁模式有: Ø LockM转载 2013-01-07 22:02:34 · 537 阅读 · 0 评论 -
hibernate map映射(value为简单类型)
有时候我们的类中属性的类型会是map类型的,那么map类型的值如何映射到数据库中呢? hibernate映射map类型的值时,map中的key和value是保存在另外一张表中的,且表里有外键引用了他所属类的主键。 看看下面的标签: map标签指明了要原创 2012-08-11 15:04:26 · 1344 阅读 · 0 评论 -
内连接,迫切内连接,左外连接,迫切左外连接
内连接: 查询出来的每一项为 object[]数组,左表存在object[0]中,右表存在object[1]中,object[0]和object[1]的关联关系有没有设置,取决于你的配置文件中,关联的配置时候lazy的值,如果lazy=false,则马上维护关系,lazy=true,先不维护关系,等用到关联关系维系的值时才查询。 Session session = DBU原创 2012-08-10 21:14:54 · 2782 阅读 · 0 评论 -
Hibernate中Criteria的完整用法
最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 Hibernate的Criteria 的用法进行总结:Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和De转载 2012-07-21 22:35:30 · 625 阅读 · 0 评论 -
hibernate对象状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被jvm垃圾回收器回收,一般是new出来且与session没有关联的对象。 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。 脱管(detached):数据原创 2012-07-21 15:14:19 · 565 阅读 · 0 评论 -
一对一主键生成策略
人和身份证的关系是一对一的,下面是他们的表关系: id_card的主键id是引用person表的id字段的,这种叫做基于主键的1-1关系。 建表sql: create tale person( id number(10) primary key, name varchar2(20));create table idcard( id原创 2012-08-09 10:50:37 · 519 阅读 · 0 评论 -
单向多对一
多个员工属于一个部门,员工可以知道他属于哪个部门,部门不能得到他的员工 员工一端保存了部门的引用,配置文件中用many-to-one配置。 cascade属性的值设置为save-update表示存储员工的时候,如果他的部门不存在或者更新了,级联保存或者更新。 部门类 public原创 2012-08-08 16:32:43 · 512 阅读 · 0 评论 -
双向一对多
一个部门有多个员工,部门知道他有哪些员工,员工属于一个部门,他知道他的部门信息。 部门类中有一个集合属性set,用来保存他部门类的员工 private Set employees = new HashSet(); 配置文件中配置怎么填充这个属性,相当于去Employee对应的表中查找deptid和自己相等的员工,把它加入到set中。原创 2012-08-08 16:48:34 · 507 阅读 · 0 评论 -
一对一基于外键生成策略
设计人和身份证的关系的时候,也可以使用外键维护他们的关系,只不过这样的话多个身份证可以引用一个身份证,就会造成多对一这种情况,我们可以把多对一增加一个unique=“true",这样的话就可以变成一对一关系了。基于外键的一对一关系,idcard的主键不再由person帮他生成,他有自己的主键生成策略。 sql语句: create table per原创 2012-08-09 11:32:04 · 708 阅读 · 0 评论 -
session的几个主要方法
session的几个主要方法: 1:sava,persist保存数据,persist没有开启事务的情况下,是不会产生insert语句。 2:delete,删除对象 3:update,更新对象,如果数据库中没有记录,则会发生异常。 4:get,根据id查,如果缓存有,从缓存取,否则会立刻访问数据库。如果没有查找到对应的记录,get返回null 5:load,根据i原创 2012-07-21 15:14:55 · 1098 阅读 · 0 评论 -
session缓存
1:减少访问数据库的频率。应用程序从内存中读取持久化对象比到数据库中读取速度快多了,因此session的缓存可以提高数据访问的性能。 2:保证缓存中的对象与数据库中的相关记录保持同步。当缓存中的持久化对象的状态发生了变化,session并不会立即执行相关的sql语句,这使得session能够把几条相关的sql语句合并为一条sql语句,以便减少访问数据库的次数,从而提高应用程序性能。原创 2012-08-08 23:30:31 · 543 阅读 · 0 评论 -
双向多对多关系的映射
老师和学生有时候也属于多对多的关系,一个老师可以教多个学生,一个学生可以被多个老师教授。 当两个表是多对多关系的时候,我们需要建一个连接表,把这两个表的关系保存在其中。 表关系如下: 学生类: package com.shizhan.po;import java.util.HashSet;import java.util.Set;原创 2012-08-09 15:59:38 · 627 阅读 · 0 评论 -
set的inverse属性
在配置一对多关系时,有一个属性inverse,例如 如果设置inverse为true的话,表示employee的外键deptid由自己维护,不是由deptment这端维护,设置了deptment的employee集合后,他并不会帮我们去更新员工的deptid,在一对多的关系中,最好都将inverse原创 2012-08-09 17:29:55 · 1276 阅读 · 0 评论 -
query.list()和query.iterate()区别
list方法返回的是结果集的list集合,iterate返回的是iterator迭代器。 list方法查询所有记录只发送一条sql语句,select * from 表名 iterate方法查询所有记录的话,先查询到满足条件的所有记录id,并不立即查询所有结果,当我们有用到某个记录的话,他才查询。如果显示所有记录的话需要n+1条sql语句。第一条查id,接下去根据id,一条一原创 2012-08-10 11:12:53 · 3671 阅读 · 0 评论 -
Hibernate的拦截器和监听器
最近项目需要,用到了Hibernate的拦截器和监听器,有些小小心得,和大家分享下。首先说说这两个东西。拦截器(Intercept):顾名思义,拦截操作,也就是在Hibernate做出动作之前会调用的方法。如果你有需要在Hibernate操作数据库之前想要做的操作,就需要用到这个东西了。监听器(Listener):监听,就是监视Hibernate的一举一动,如果我们要获取Hib转载 2013-01-07 22:26:10 · 778 阅读 · 0 评论