Hibernate开发步骤.docx
- 文档编号:30036430
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:18
- 大小:28.22KB
Hibernate开发步骤.docx
《Hibernate开发步骤.docx》由会员分享,可在线阅读,更多相关《Hibernate开发步骤.docx(18页珍藏版)》请在冰豆网上搜索。
Hibernate开发步骤
Hibernate开发步骤:
(重点:
必须掌握)
开始:
(设置环境变量和配置)
在myeclipse里导入Hibernate的文件包(包括各数据库的驱动和其他的jar包,对版本敏感,注意各版本的兼容)
按hibernate规范编写名字为hibernate.cfg.xml文件(默认放在工程文件夹下)
步骤一:
设计和建立数据库表
可以用Hibernate直接生成映射表。
Oracle里建表:
createtablet_ad(oidnumber(15)primarykey,
ACTNOvarchar(20)notnullunique,BALANCEnumber(20));
步骤二:
持久化类的设计
POJO----POJO在Hibernate语义中理解为数据库表所对应的DomainObject。
(此类中只含有属性、构造方法、get/set方法)
这里的POJO就是所谓的“PlainOrdinaryJavaObject”,字面上来讲就是无格式普通Java对象,简单的可以理解为一个不包含逻辑代码的值对象(ValueObject简称VO)。
步骤三:
持久化类和关系数据库的映射
编写*.hbm.xml文件---该文件配置持久化类和数据库表之间的映射关系
Xml代码
1. 默认与类名一样 2.dynamic-update=“true | false” //是否动态更新SQL。 false: 每次都更新所有属性;true: 只更新修改的 3.dynamic-insert=“true | false” //是否动态插入SQL。 false: 每次都插入所有属性;true: 只插入非空的 4.select-before-update=“true | false” //是否在update前查询对象是否被修改过,修改过才update 5.polymorphism=“implicit | explicit” //设置多态是显性(explicit)的还是隐性(implicit)的 6.where=“查询时使用的SQL的条件子句” //查询时使用的SQL的条件子句 7.lazy=“true | false” //设置延迟加载策略 8./> 一个实体对应一个xml文件,组件用id,非组件用property。 *.hbm.xml文件样板: Xml代码 1. xml version="1.0"? > 2. DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. " 5. --package指文件所在的包名 --> 6. 7. -- name: POJO类的名; table数据库里对应的表名--> 8. 9. -- OID: (唯一,中性)表自动生成的(需要另外添加hilo表) --> 10. 11. 12. t_hi 13. hi 14. 15. 16. 17.
18.
步骤四:
Hibernate配置文件
hibernate.cfg.xml或hibernate.properties
1.需要配置那些信息:
持久化映射,方言,特性,登陆信息
多数使用默认的设置。
A、dialect:
方言,就是拼驱动程序和SQL语句。
每种数据库对应一种方言其实就是指定了用那一种数据库。
Oracle数据库方言:
org.hibernate.dialect.OracleDialect
MySql数据库方言:
org.hibernate.dialect.MySQLDialect
B、ObjectPersistence:
对象持久化。
把内存中的数据保存到一个永久的介质中,比如说数据库。
C、ORM:
对象关系映射,是一个自动的过程
注:
持久对象与临时对象最大的区别是有没有数据库id标识。
2.hibernate.cfg.xml的样板:
Xml代码
1.
xml version='1.0' encoding='UTF-8'?
>
2.
DOCTYPE hibernate-configuration PUBLIC
3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4. "
5.
6.
7.
-- 数据库连接配置 -->
8.
mysql:
//localhost:
3306/test
9.
10.
11.
12.
-- 自动建表语句:
create覆盖旧表,update自动更新,none不理会 -->
13.
14.
-- 是否在控制台上打印SQL(Hibernate把语句转化为SQL语句),默认false-->
15.
16.
-- 缓存策略,数据量不大可不写 -->
17.
18.
19.
20.
-- 不同数据库使用的SQL选择 -->
21.
22.
23.
-- 连接池配置,练习时不写,使用默认的 -->
24.
25.
--决定是采用thread或jta或自定义的方式来产生session,练习时不写,使用默认的 -->
26.
27.
-- *.hbm.xml文件路径,各关联表要一同写上 -->
28.
29.
30.
31.
步骤五:
使用HibernateAPI
Java代码
1.//读取Hibernate.cfg.xml配置文件,并读到内存中为后续操作作准备
2.Configuration config = new Configuration().configure();
3.//SessionFactory缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
4.SessionFactory sessionFactory = config.buildSessionFactory();
5.//Session是持久层操作的基础,相当于JDBC中的Connection。
6.Session session = sessionFactory.openSession();
7.
8.try{
9.原子性,必须捕捉异常。
所有事务都放在这一代码块里。
10. //操作事务时(增、删、改)必须显式的调用Transaction(默认:
autoCommit=false)。
11. Transaction tx = session.beginTransaction();
12. for(int i=0; i<=1000; i++){
13. Student stu = new Student(...);
14. session.save(stu);//set value to stu
15. //批量更新:
为防止内存不足,分成每20个一批发送过去。
16. if(i%20==0){session.flush();session.clear();}//不是大批量更新,则不需要写这一行
17. //默认时,会自动flush:
查询之前、提交时。
18. } mit();//提交事务,Hibernate不喜欢抛异常,如有需要,自己捕捉。
19.
20. //查询方法。
如果有必要,也可以用事务(调用Transaction)
21. String hql = "from Student s where s.stuNo like ?
and s.Sal > ?
";//Student是类而不是表
22. List list = session.createQuery(hql)
23. .setString(0, "a00_").setDouble(1, 3000.0)//设置HQL的第一二个问号取值
24. .list();//Hibernate里面,没有返回值的都默认返回List
25. StringBuffer sb = new StringBuffer();
26. for(Student st :
(List
27. sb.append(st.getOid()+" "+st.getName()+"\n");//拿到Student类里的属性
28. }System.out.print(sb.toString());//直接打印sb也可以,它也是调用toString,但这样写效率更高
29.} catch (HibernateException e) {
30. e.printStackTrace();
31. session.getTransaction().rollback();//如果事务不成功,则rollback
32.} finally {
33. session.close();//注意关闭顺序,session先关,Factory最后关(因为它可以启动多个session)
34. sessionFactory.close();//关闭SessionFactory,虽然这里没看到它,但在HbnUtil里开启了。
35.}
五、Hibernate主键策略(上面的步骤三的一部分)
主键:
在关系数据库中,主键用来标识记录并保证每条记录的唯一性(一般可保证全数据库唯一)。
必须满足以下条件:
1)不允许为空。
2)不允许主键值重复。
3)主键值不允许改变。
1.自然主键:
以有业务含义的字段为主键,称为自然主键。
优点:
不用额外的字段。
缺点:
当业务需求发生变化时,必须修改数据类型,修改表的主键,增加了维护数据库的难度。
2.代理主键:
增加一个额外的没有任何业务含义的一般被命名为ID的字段作为主键。
缺点:
增加了额外字段,占用部分存储空间。
优点:
提高了数据库设计的灵活性。
Hibernate用对象标识(OID)来区分对象:
Studentstu=(Student)session.load(Student.class,101);//这代码加载了OID为101的Student对象
Hibernate推荐使用代理主键,因此Hibernate的OID与代理主键对应,一般采用整数型,包括:
short、int、long。
1、主键生成策略:
(Hibernate支持多种主键生成策略)
generator节点中class属性的值:
1)assigned:
assigned:
由用户自定义ID,无需Hibernate或数据库参与。
是
2)hilo:
通过hi/lo(高/低位)算法生成主键,需要另外建表保存主键生成的历史状态(这表只需要一个列和高位初始值)。
hi/lo算法产生的标识只在一个特定的DB中是唯一的。
所有数据库都可用。
如果同一个数据库里多张表都需要用;可以建多张主键表,也可以共用同一字段,但最好是用同一张主键表的不同字段。
--指定高位取值的表-->
--指定高位取值的列-->
--指定低位最大值,当取到最大值是会再取一个高位值再运算-->
3)sequence:
采用数据库提供的Sequence机制。
Oracle,DB2等数据库都提供序列发生器生成主键,Hibernate也提供支持。
4)seqhilo:
功能同hilo,只是自动建表保存高位值。
主键生成的历史状态保存在Sequence中。
只能用于Oracle等支持Sequence的数据库。
5)increment:
主键按数值顺序递增。
作用类型:
long,short,int
使用场景:
在没有其他进程同时往同一张表插数据时使用,在cluster下不能使用
6)indentity:
采用数据库提供的主键生成机制。
特点:
递增。
(Oracle不支持)
通常是对DB2,Mysql,MSSqlServer,Sybase,HypersonicSQL(HSQL)内置的标识字段提供支持。
返回类型:
long,short,int
注:
使用MySql递增序列需要在数据库建表时对主健指定为auto_increment属性。
用Hibernate建表则不需要写。
(oidintprimarykeyauto_increment)
7)native:
由Hibernate根据底层数据库自行判断采用indentity,hilo或sequence中的一种。
是最通用的实现,跨数据库时使用。
Default.sequence为hibernate_sequence
8)foreign:
由其他表的某字段作为主键,通常与
9)UUID:
uuid.hex:
由Hibernate基于128位唯一值产生算法生成十六进制数(长度为32的字符串---使用了IP地址)。
uuid.string:
与uuid.hex一样,但是生成16位未编码的字符串,在PostgreSQL等数据库中会出错。
特点:
全球唯一;ID是字符串。
10)select:
通过DB触发器(trigger)选择一些唯一主键的行,返回主键值来分配主键
11)sequence-identity:
特别的序列发生策略,使用DB序列来生成值,通常与JDBC3的getGenneratedKeys一起用,使得在执行insert时就返回生成的值。
Oracle10g(支持JDK1.4)驱动支持这一策略。
2、复合主键策略
步骤一:
创建数据库表,设定联合主键约束
步骤二:
编写主持久化类以及主键类;编写主键类时,必须满足以下要求:
1)实现Serializable接口
2)覆盖equals和hashCode方法
3)属性必须包含主键的所有字段
步骤三:
编写*.hbm.xml配置文件
六、Hibernate的查询方案(应该熟悉各种查询的使用方法)
1、利用Session接口提供的load方法或者get方法
2、Hibernate提供的主要查询方法
1)CriteriaQuery(条件查询)的步骤:
(1)通过Session来创建条件查询对象Criteria
Criteriacriteria=session.createCriteria(Course.class);
(2)构建条件---创建查询条件对象Criterion
Criterioncriterion1=Property.forName("id").ge(39);//通过Property来创建
Criterioncriterion2=Restrictions.le("cycle",5);//通过Restrictions来创建
(3)查询对象关联条件
criteria.add(criterion1);
(4)执行条件查询
List
2)HQL(HibernateQureyLanguage)
特点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 开发 步骤