Hibernate是什么

Hibernate是一个轻量级的ORMapping框架
ORMapping原理(Object RelationalMapping)
ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
ORMapping的基本实现方式:
使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。
大家想想,我们实现过ORMapping吗?
Hibernate能干什么:
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
一个非常简要的Hibernate体系结构的高层概要图
Hibernate运行时体系结构
“最小”的体系结构方案,要求应用程序提供自己的 JDBC连接并管理自己的事务。这种方案使用了Hibernate API 的最小子集.
“全面解决”的体系结构方案,将应用层从底层的JDBC/JTAAPI中抽象出来,而让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:设若构建一个对象:com.bjpowernode.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:示例如下:
<?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>
<mapping resource="cn/bjpowernode/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:示例如下:
<?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="com.bjpowernode.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>
客户端文件:
package com.bjpowernode.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();
}
}
}
测试:直接在Elipse里面运行Client文件即可,运行结束,你将会看到在console输出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打开数据库的数据表,你会看到一条值已经加入了。
说明:
1:SessionFactory sf = new Configuration().configure().buildSessionFactory();这句话的意思是读取hibernate.cfg.xml,创建Session工厂,是线程安全的。
默认是”hibernate.cfg.xml”,不用写出来,如果文件名不是”hibernate.cfg.xml”,那么需要显示指定,如下:
SessionFactory sf = new Configuration(). configure( “bjpowernode.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/bjpowernode/h4/hello/UserModel.hbm.xml");
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();
这种写法,现在还没有实现完全,不太好用,所以官方给出的示例里面还是采用以前的方式,大家先了解一下。
4:这里使用的事务Transaction是Hibernate的Transaction,需要有,不能去掉。
为什么必须有这个Hibernate的事务呢?以HelloWorld为例来看看:
总结
以上所述是小编给大家介绍的hibernate4快速入门实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# hibernate4
# 入门
# Hibernate迫切连接和普通连接的区别实例详解
# hibernate通过session实现增删改查操作实例解析
# 在已有spring的基础上集成hibernate的实例讲解
# hibernate属性级别注解实例代码
# Hibernate 修改数据的实例详解
# JSP开发之hibernate之单向多对一关联的实例
# Hibernate识别数据库特有字段实例详解
# Hibernate初体验及简单错误排除代码详解
# 应用程序
# 自己的
# 相对应
# 可以用
# 主键
# 仅供
# 它是
# 找个
# 怎么做
# 来实现
# 很短
# 小编
# 为空
# 单线程
# 客户端
# 是一个
# 构建一个
# 主要有
# 还没有
# 放在
相关文章:
独立制作一个网站多少钱,建立网站需要花多少钱?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何通过老薛主机一键快速建站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何用AWS免费套餐快速搭建高效网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
测试制作网站有哪些,测试性取向的权威测试或者网站?
如何确保FTP站点访问权限与数据传输安全?
建站主机如何安装配置?新手必看操作指南
建站之星微信建站一键生成小程序+多端营销系统
C#如何序列化对象为XML XmlSerializer用法
建站之星在线客服如何快速接入解答?
如何快速配置高效服务器建站软件?
建站之星客服服务时间及联系方式如何?
清除minerd进程的简单方法
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
网站制作网站,深圳做网站哪家比较好?
C++如何使用std::optional?(处理可选值)
如何快速搭建个人网站并优化SEO?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
常州企业建站如何选择最佳模板?
如何快速查询网址的建站时间与历史轨迹?
如何通过VPS搭建网站快速盈利?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何通过FTP空间快速搭建安全高效网站?
如何在Windows环境下新建FTP站点并设置权限?
家庭建站与云服务器建站,如何选择更优?
常州自助建站工具推荐:低成本搭建与模板选择技巧
大连网站制作公司哪家好一点,大连买房网站哪个好?
建站之星×万网:智能建站系统+自助建站平台一键生成
重庆市网站制作公司,重庆招聘网站哪个好?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在橙子建站上传落地页?操作指南详解
建站主机CVM配置优化、SEO策略与性能提升指南
建站ABC备案流程中有哪些关键注意事项?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
制作表格网站有哪些,线上表格怎么弄?
如何通过FTP服务器快速搭建网站?
如何选择服务器才能高效搭建专属网站?
如何设置并定期更换建站之星安全管理员密码?
如何正确选择百度移动适配建站域名?
制作网站的公司有哪些,做一个公司网站要多少钱?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在万网自助建站中设置域名及备案?
婚礼视频制作网站,学习*后期制作的网站有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。