Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
总之,hibernate技术是针对于数据库的存取而产生的,因为在实际项目中有时需要对数据库进行一些查询操作,但是有时巨大的数据库表往往会让程序员望而却步,再者Hibernate创始人Gavin King开发hibernate的动机主要就是发现CMP太烂;
CMP是什么东西呢,在 JavaEE 架构中,CMP(Container-Managed Persistence)表示由 EJB 容器来管理实体 EJB 的持久化,EJB 容器封装了对象-关系的映射及数据访问细节。CMP 和 ORM 的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑中分离出来。ORM又是何方神圣呢,对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。简单的说:ORM相当于中继数据。具体到产品上,例如ADO.NET Entity Framework。DLINQ中实体类的属性[Table]就算是一种中继数据。目前众多厂商和开源社区都提供了持久层框架的实现,常见的有:JAVA系列:
APACHE OJB CAYENNE JAXOR HIBERNATE IBATIS
JRELATIONALFRAMEWORK(有点长!) MIRAGE SMYLE TOPLINK
其中 TOPLINK 是 ORACLE 的商业产品,其他均为开源项目。
其中 HIBERNATE的轻量级 ORM 模型逐步确立了在 JAVA ORM 架构中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 JAVA ORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新 EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。
1.首先要使用myeclipse的hibernate perspective连接上mysql数据库,相关配置包括mysql的登陆密码,用户名等等。
2.要注意生成的hibernate类的名字,一般为表名的大写,在使用时不要写错(经常写成表名)。
3.正确的生成的hibernate包*有三个文本,包含一个hbm.xml文档。
4.在MVC架构中,jsp和后台java文件中都要添加相应的生成的hibernate类,注意语句书写的正确性。
5.经过上述过程后,如果直接在程序中使用hibernate方法的话,会出现”xxxx is not mapped“,此错误的出现很明显是没有对所生成的hibernate添加相应的映射。一般情况下,在java下会有一个hibernate.cfg.xml配置文件,此配置文件在myeclipse8.5中为可视化组件添加模式,此处要注意,我们要在最后来这里,添加映射,在8.5中,直接找到mapping添加框,然后选择生成的类包中的hbm.xml,比如对十个表生成了对应的hibernate类文件,则我们要在mapping框中将这几个hbm.xml全部添加进去,之后再使用,则不再有错误。
6.如果没有上述问题了,那么就可以开始书写查询语句了,这里要用HQL语言(Hibernate Query Language,类似于SQL的结构化查询语言),在使用上与SQL的语法格式非常类似,不过要注意,有些查询格式HQL并不完全同于SQL!!比如HQL可以直接书写 “from XXX ”表示意思与 “select * from XXX”一样;此外在HQL中的“表”,即生成的Hibernate包,一般为大写,再次提醒,不要写错!!
7.对于HQL的语句处理,与SQL很不一样,比如:
String hql = "from Users";
Query query = session.createQuery(hql); 、
List<Users> users = query.list();
如果user表中有Name属性,则直接用user.getName()就可以获得表中相应的值,比SQL的处理更加的灵活方便,不过此处也要格外注意不要出现错误。
-----------------KO-----------------------------
暂时想到这些,顺便科普,有更多关于Hibernate的,以后再更。