您的位置:首页 > 其它

[Hibernate]对Hibernate不是很全面了解。

2015-06-27 16:04 288 查看
基于ORM的一款产品。

基于顺序编程思想写的这个博客。。

ORM

用面向对象的思想编程时,不得不通过JDBC写SQL语句去操作数据库,这样不符合面向对象的思想。于是出现了ORM,对象关系映射。其实就是把数据库的一行当成一个对象,从数据库的内存区域复制到另一块专门放对象的区域里管理,以后不管数据库,就操作这块区域,通过所谓的“映射”,会自动操作真实的数据库数据。这是一种思想。。。

有了思想就有对应的产品,Hibernate就是基于这种思想的东西。它很轻量级。。

Hibernate干的事,就是将数据库里的数据,弄到它专门创建的一块内存里,然后管理这块内存,达到操作数据库的目的。要比直接操作数据库快捷,高效,降低模块耦合度,方便维护。。。总结起来,优点就是,让程序和程序员都更清晰了。简单的理解是,如何查询的话,通过调用query.list()就可以返回一个List<Object>集合了。。记得之前得用Cursor,还要写个方法,把Cursor转换成集合。。

Hibernate如何将数据库数据,复制到它专门的内存里的?

要用两个配置文件告诉它。这两个配置文件是xml文件,xml文件是用来保存数据的。。Hibernate进行xml解析(为什么不用json。。)后,得到它想要的信息,从而把数据封装成一个类,这个类肯定是自己写的,必须符合所谓javabean规范。。其实就是
public class Student {
	private String name;

	public Student() {
		super();
	}
	public Student(String name) {
		super();
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
哎,野路子出来不懂术语,写行代码我才知道是啥。

这个hibernate让程序员步骤最多的事情就是写xml文件,告诉hibernate怎么怎么加载类,要注意什么。剩下的事就方便了。几行代码就完成了核心功能,但是要完成高效的数据库操作,还需要一定技巧和经验。

一共六个核心的类和接口:

Session

SessionFactory

Transaction

这个是数据库的事务,特性有四个?理论的东西太抽象,还不如自己的话解释的清。不知道谁翻译的,翻译成事务了。要翻译成任务也好啊。。跟魔兽世界里做任务一样,接了任务就去做(开启任务),做完了就回来交(提交事务),实在做不完就放弃了从新接,放弃任务了都知道,接任务给的道具就没了(事务回滚)。不会让你多出什么来。。。做完就去交任务,然后任务从任务栏消失了,没做完放弃,任务也没了。(不论什么时候都要在finally里关闭)。。。

直觉上,提交了,就会更新直管内存,映射着就把数据库更新了。。但是,竟然可以给Session设置模式,让事务提交了也不行。。必须要调用session.flush()才会更改数据库。。

Query

查询类。。把HQL语句传进来,构建查询的对象,通过query对象调用方法实现分页查询,查找所有。。。。用的是HQL,这名字起的。。真跟SQL不见外,就因为姓Hibernate,把SQL轻量级封装了,就跟它姓了啊。。

Criteria

查询条件,配合query的。

Configuration

说了有两种配置文件,一个Hibernate的,一个是实体类的,这个Configuration就是把Hibernate的配置文件,解析后(网友解释:加载到内存),按照它的DTD文件注释的意思,怎么出来的暂时是不知道。。网上找到一句”是实例化出来的“。。。

好多理论的东西:

二级缓存

延时加载

可以先加载实体类的oid,不用整个儿把数据库那行数据都弄过来。更轻量吧,使一些操作更快。。

HQL查询,简化版的SQL语句,强大啊。。可以在查询语句中,直接new对象,从而查出来直接是对象。比如session.createQuery("select new Student(id,name) from Student") 返回结果的泛型就是Student了。。

HQL详解

session生命周期,就是从数据库加载过来的那行数据,封装成了一个session,这个东西在那块内存里是有生命周期的,就像android里面,activity,fragment,application生命周期概念一样,但是流程图稍微不一样(毕竟不是一个东西。。)

session有几个方法,操作复制(映射。。)过来的对象,flush() get()
merge() deleate() save() update()...稍微有点区别,但是区别不大。

session方法详解

实体类配置文件中的主键,见这里

语句很相似啊,所有一般写成工具类:

<span style="font-size:24px;">Configuratyion cfg = new Configuratyion().configure();
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder();
ServiceRegistry service = ssrb.buile();
Session session = cfg.buildSessionFactory(service);</span>


这样就获得了session,可以来管理从数据库映射过来的类了。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: