Hibernate4教程一:入门介绍
来源:互联网 发布:sql中什么是主键 编辑:程序博客网 时间:2024/06/05 00:25
第一部分:Hibernate入门
Hibernate是什么
Hibernate是一个轻量级的ORM框架
ORM原理(Object Relational Mapping)
ORM基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
ORM的基本实现方式:
使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。
Hibernate能干什么:
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
一个非常简要的Hibernate体系结构的高层概要图
Hibernate运行时体系结构
“最小”的体系结构方案,要求应用程序提供自己的JDBC 连接并管理自己的事务。这种方案使用了Hibernate API 的最小子集.
“全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。
Transaction (org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成Transaction对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。
HelloWorld
要研究怎么做,先得搞清楚需要做什么
根据刚才的学习,做基本的Hibernate应用程序,要完成下面的工作:Object、数据库的表、两种配置文件、客户端程序来调用Hibernate的接口进行操作。
构建环境
最简单的方法:把hibernate-release-4.0.0.Beta4.zip包里面lib/required下的jar包全部添加到工程的library里面,另外还需添加slf4j的实现包slf4j-log4j12-1.5.8.jar和log4j的实现包log4j-1.2.16.jar,还有别忘了把JDBC的驱动jar包也加入到library里面
Object怎么做
1:就是前面学过的vo的写法(规则同样是那四点)
2:要求必须有一个public为空参的构造方法,现在写vo一般不写构造方法,默认就有一个,但是写构造方法的时候要注意写上一个public为空参的构造方法
3:要求提供一个标识属性(identifier)
4:使用非final的类(因为要使用代理来延迟实体的装载)
5:设若构建一个对象:cn.javass.h4.hello.UserModel,有四个属性:uuid,userId,name,age
在数据库中建表
设若构建一个表为tbl_user,字段:uuid,userId,name,age
配置xxx.cfg.xml
1:缺省名称为 hibernate.cfg.xml
2:存放在当前classes的根目录下,开发的时候在src根下就可以了
3:主要有如下四部分配置 :
(1)与DB的连接
(2)可选配置
(3)资源文件注册
(4)二级缓存
4:配置的时候可以到Hibernate发行包里面找个hibernate.cfg.xml的例子,比如可以用“\project\hibernate-documentation\quickstart\tutorials\basic\src\test\resources”下面的hibernate.cfg.xml作例子
5:示例如下:
java代码:
- <?xml version='1.0' encoding='utf-8'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
- <property name="connection.url">jdbc:oracle:thin:@localhost :1521:orcl</property>
- <property name="connection.username">test</property>
- <property name="connection.password">test</property>
- <property name="connection.pool_size">2</property>
- <property name="dialect">org.hibernate.dialect.OracleDialect</property>
- <property name="show_sql">true</property> //开发时可开启
- <property name="hibernate.hbm2ddl.auto">update</property> //开发时可开启
- <mapping resource="cn/javass/h4/hello/UserModel.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
配置xxx.hbm.xml
1:与被描述的类同名 ,如:UserModel.hbm.xml
2:存放位置与所描述类存放在同一文件夹下
3:主要有如下四部分配置 :
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射
4:配置的时候可以到hibernate发行包里面找个例子,比如可以用“\project\hibernate-core\src\test\java\org\hibernate\test\cid”下面的Customer.hbm.xml作例子
5:示例如下:
java代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
- 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
- <hibernate-mapping>
- <class name="cn.javass.h4.hello.UserModel" table="tbl_user">
- <id name="uuid">
- <generator class="assigned"/>
- </id>
- <property name=“userId”></property>
- <property name=“name”></property>
- <property name="age"></property>
- </class>
- </hibernate-mapping>
客户端文件:
java代码:
- package cn.javass.h4.hello;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- public class Client {
- public static void main(String[] args) {
- SessionFactory sf = new Configuration().configure().buildSessionFactory();
- Session s = null;
- Transaction t = null;
- try{
- //准备数据
- UserModel um = new UserModel();
- um.setUuid("1");
- um.setUserId("id1");
- um.setName("name1");
- um.setAge(1);
- s = sf.openSession();
- t = s.beginTransaction();
- s.save(um);
- t.commit();
- }catch(Exception err){
- t.rollback();
- err.printStackTrace();
- }finally{
- s.close();
- }
- }
- }
说明:
1:SessionFactory sf = new Configuration().configure().buildSessionFactory();这句话的意思是读取hibernate.cfg.xml,创建Session工厂,是线程安全的。
默认是”hibernate.cfg.xml”,不用写出来,如果文件名不是”hibernate.cfg.xml”,那么需要显示指定,如下:
SessionFactory sf = new Configuration(). configure( “javass.cfg.xml” ).buildSessionFactory();
2:Session是应用程序主要使用的Hibernate接口,约相当于JDBC的Connection+Statement/PreparedStatement的功能,是线程不安全的
3:在Hibernate4里面,已经不推荐使用Configuration类了,而改为使用 ServiceRegistryBuilder和MetadataSources来代替,新的写法大致如下:
ServiceRegistryBuilder builder = new ServiceRegistryBuilder().configure();builder.applySetting("connection.driver_class", "oracle.jdbc.driver.OracleDriver");builder.applySetting("connection.url", "jdbc:oracle:thin:@localhost:1521:orcl");builder.applySetting("connection.username", "ztb");builder.applySetting("connection.password", "ztb");builder.applySetting("connection.pool_size", "2");builder.applySetting("hibernate.dialect", "org.hibernate.dialect.OracleDialect");builder.applySetting("show_sql", "true"); MetadataSources sources = new MetadataSources( builder.buildServiceRegistry() );sources.addResource("cn/javass/h4/hello/UserModel.hbm.xml"); MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();
这种写法,现在还没有实现完全,不太好用,所以官方给出的示例里面还是采用以前的方式,大家先了解一下。
4:这里使用的事务Transaction是Hibernate的Transaction,需要有,不能去掉。
为什么必须有这个Hibernate的事务呢?以HelloWorld为例来看看:
http://sishuok.com/forum/blogPost/list/2461.html
阅读全文
0 0
- Hibernate4教程一:入门介绍
- OpenCV学习教程入门篇<一、介绍>
- Hibernate4入门学习过程记录一
- hibernate4 入门
- Bimmer7 Android教程 入门系列之:Manifest介绍(一)
- OpenSim教程一——OpenSim 入门介绍
- hibernate4.x(一)——hibernate入门之helloworld
- Hibernate4自学入门(一)——初识Hibernate
- Hibernate4入门(一)——新建一个Hibernate项目
- shell教程一 :介绍
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- maven 教程一 入门
- Java的部分问题和小结
- Junit使用教程
- 70. Climbing Stairs
- Hibernate4教程二:基本配置(3)
- MQ入门介绍
- Hibernate4教程一:入门介绍
- JUnit中Assert简单介绍
- JS提示信息来检测相应id的标签
- Hibernate4教程六(2):基本实现原理
- 用SQLserver和JavaEE+Tomcat实现简单的登录界面
- 那些年,追过的开源软件和技术
- 数据结构与算法02 之栈与队列
- Android UI适配
- zookeeper使用和原理探究(一)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
丽柜允儿
允儿钢管舞
允儿玉泽演
允儿和雪莉
强心脏 允儿
六位帝皇玩允儿
男艺人爆料允儿心机重
小嘴吸住莫允儿
李胜基逼允儿打胎
六位帝皇玩允儿番外1
主播允儿重口在线播放
网红主播允儿重口在线播放
双凤求凰允儿番外
强心脏允儿泽演
允儿减肥方法
六位帝皇玩允儿番外1类似
允儿整容前后照片
允儿整容前后对比
韩娱之允儿妹妹
爱情雨允儿手机铃声
允儿整容前的照片
林充儿
林云儿
林颖儿
林润娥
泰妍
徐贤
六个皇帝玩李允儿
强心脏玉泽演允儿
韩娱之我的现任是允儿 夜问雪
深浅吸允再入桃花洞
男生允吸女生脚趾头
钻进裙子里允吸h
公交车吸允蜜汁宝贝
吸允
哥哥吸允着两颗小樱桃gif
吸花允蒂
允在
允在超话
谢允周翡初吻在哪一本
赵在允