实体类映射文件(<mappingresource="cn/zc/domain/User.hbm.xml"/>): User.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://www./dtd/hibernate-mapping-3.0.dtd">
<hibernate-mappingpackage="cn.zc.domain">
<classname="User" table="user"> <idname="id" column="id"> <generatorclass="native"/> </id> <propertyname="name"/> <propertyname="sex"/> <propertyname="number"/> <propertyname="birthday"/> </class>
</hibernate-mapping>
常用配置信息: <hibernate-mapping package="cn.zc.domain"> package指定实体所在路径 <class name="User"table="user"> name指定实体名字,table指定数据库中映射的表 <id name="id"column="id"> id元素:指定每个持久化类的唯一标识到数据库表主键字段的映射、name属性:指定持久化类的OID名、column属性:指定数据库表主键字段名(可省略)、type属性:指定主键映射时所使用的Hibernate类型名(可省略) <propertyname="name"/> name属性:指定持久化类的属性名、column属性:指定数据库表主键字段名(可省略)、type属性:指定主键映射时所使用的Hibernate类型名(可省略)、not-null属性:指定此属性映射到数据库表的字段值是否允许为空值。
<generatorclass="native"/> generator元素:指定对象标识符的生成器名。
Hibernate主键生成策略的常用配置属性即generator class属性的取值
<property>元素的常用配置属性、
Hibernate应用的主要接口和类: Configuration类 负责管理 Hibernate 的配置信息,加载hibernate.cfg.xml配置文件 SessionFactory接口 一个SessionFactory实例对应一个数据存储源。应用程序从SessionFactory中获取Session实例。 保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)
Session接口 是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。
常用方法: save()//把Java对象保存数据库中 persist()//把Java对象保存数据库中与save方法的区别在没有开启事务的时候,persist插入的语句没有做,而save插入的操作确做了,可是回滚了, 没开启事务的时候persist方法不会生成sql语句,而save方法会生成sql语句并且执行了,只是事务没开启,又回滚了。 update()//更新数据库中的Java对象 delete()//把Java对象从数据库中删除 get()//查询实体对象,不存在时候返回null load()//从数据库中加载Java对象 merge()//将给定的对象的状态复制到具有相同标识的持久化对象上。 find()//从数据库中查询Java对象 saveOrUpdate()//接收一个实体对象,根据实体对象的id判断是否已经存在进行保存或更新操作,这样保存和更新方法就统一了;
Transaction接口 代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行。
常用方法: commit()//提交相关联的session实例 rollback()//撤销事务操作 wasCommitted()//检查事务是否提交
Query和Criteria接口 都是查询接口,Query实例包装了HQL查询语句,hql是面向对象的,它引用类名及类的属性名,而不是表名和字段名。 Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象,它擅长执行动态查询。 Hibernate中对象的三种状态: <1>瞬时态 (Transient) <2>持久态(Persistent) <3>脱管态(Detached)
1、 瞬时态: 由new命令开辟内存空间的java对象. 如果没有变量对该对象进行引用,它将被java虚拟机回收。 瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中, 可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中, 此时该瞬时对象转变成持久化对象。 2、 持久态: 处于该状态的对象在数据库中具有对应的记录。当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象, 此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。 持久对象具有如下特点: (1)和session实例关联; (2)在数据库中有与之关联的记录。 3、脱管态: 当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。 脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转 变成持久对象。 脱管对象具有如下特点: (1) 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收; (2) 比瞬时对象多了一个数据库记录标识值 |
|
来自: 江江385 > 《hibernate》