[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规范。。其实就是
这个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方法详解
实体类配置文件中的主键,见这里。
语句很相似啊,所有一般写成工具类:
这样就获得了session,可以来管理从数据库映射过来的类了。。
基于顺序编程思想写的这个博客。。
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,可以来管理从数据库映射过来的类了。。
相关文章推荐
- spring配置定时器
- 前端开发学习随笔-------jquery.data()
- 设置GRUB密码及重置密码
- 程序员书籍
- imac打开terminal终端器
- C#趣味程序---理财高手
- crtmpserver组网部署方案
- python文件和目录操作
- 按照对象的某一属性进行排序
- 【Oracle篇】Oracle的客户端工具
- mediaPlayer的一些坑爹问题 以及解决surfview播放视频时候有黑屏闪现的问题
- iOS 学习资料大全
- Course Schedule I II LeetCode Java
- crtmpserver组网部署方案
- ClientDataSet复制
- 基于UDP的网络编程
- 大共享免费云服务器 Linux Nginx php mysql phpwind 性能测试
- Android实现ButterKnife
- html下拉框根据数据库的值选中默认值
- 《高效能人士的七个习惯》--读书笔记二