`

HibenateMinute(一)

阅读更多

@ Hibernate3.0 àJBOSS

@ ORM à对象/对应关系」(Object/Relational Mapping

@ Hibernate3.0 依赖底层的JDBC2.0

 

Hibernate - 包作用 (25jar)

@jar

hibernate3.0.jar: 使用的jar

antlr.jar: Hibernate使用ANTLR查询分析

EHCache.jar: Hibernate可以使用不同cache存工具作级缓存。缺省的cache

cglib-asm.jar: Hibernate用它来实现PO节码动态生成,非常核心的

  dom4j.jar: 是一个JavaXML API Hibernate用它来写配置文件。

  odmg.jar:是一个ORM范,Hibernate实现ODMG范,是一个核心的  commons-collections.jar包含了一些Apache开发的集合

  commons-beanutils.jar,包含了一些Bean工具类类。必使用的jar包。

  commons-lang.jar:些数据型工具,是java.lang.*展。必使用的jar

commons-logging.jar:包含了日志功能

@:

  ant.jar: Ant编译工具的jar包,用来编译Hibernate源代的。

  optional.jar Ant的一个助包。

  c3p0.jar C3PO是一个数据库连接池,Hibernate可以配置使用C3PO接池。

  proxool.jar 也是一个接池,同上。

  commons-pool.jar:commons-dbcp.jar:  Tomcat4接池也是DBCP

EJB中使用Hibernate,一定要用App Server接池,否容器管理事不起作用.

  connector.jar: JCA 范, App Server上把Hibernate配置Connector

Jaas.jar: JAAS是用来验证的,已包含在JDK1.4里面了。

jcs.jar 如果你准Hibernate中使用JCS,那包括它,否就不用。

jdbc2_0-stdext.jar: JDBC2.0展包,一般来数据库连接池会用上它。

jta.jar JTA范,当Hibernate使用JTA候需要,

junit.jar: Junit包,当你运行Hibernate测试候需要,否就不用。

xalan.jar:xerces.jar:xml-apis.jar:

XercesXML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会上, HibernateXML只不取配置文件  

 

@ log4j.properties

Hibernate包的etc目录下的log4j.properties复制到Hibernate项目的Classpath,

修改log4j.logger.org.hibernate = error!

@ 实体对象的加载!

 <hibernate-configuration>

    <session-factory> 

 <!-- 对象与数据库表的映射文件 -->

       <mapping resource="onlyfun/caterpillar/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

@ 获得负责管理Hibernate的配置信息的Configurationsession操作

Configuration config = new Configuration().configure();

//configure()默认./Hibernate.cfg.xml; 当然也可以指定URL

SessionFactory sessionFactory = config.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction tx= session.beginTransaction();

session.save(user);// user实体

tx.commit();

session.close();

sessionFactory.close();

@ CriteriaAPI不完善.

Session中的find()方法被取消了,必須使用SessioncreateQuery()建立Query實例,並使用list()方法來取代。Sessioniterate()被取消了,由Query介面上的iterator()來取代,詳請看 Query.list()iterator()

新增 update 語句

Query query = session.createQuery("update User set age=30 where id=1");

query.executeUpdate();

新增 delete 語句

Query query = session.createQuery("delete User where age<20");

query.executeUpdate();

  Query:

  1:query = session.createQuery("from User user where user.name like ?");

    query.setParameter(0, "caterpillar");

   2 :Query query = session.createQuery("select user.name from User as user where user.age > :minAge");
query.setInteger("
minAge", 25);

4. 悲觀鎖定(Pessimistic Locking

   悲觀鎖定通常透過系統或資料庫本身的功能來實現,依賴系統或資料庫本身提供的鎖定機制,Hibernate即是如此,可以利用QueryCriteriasetLockMode()方法來設定要鎖定的表或列(Row)及其鎖定模式,可設定的鎖定模式有以下的幾個:

  • LockMode.UPGRADE:利用資料庫的for update子句進行鎖定。
  • LockMode.UPGRADE_NOWAIT:使用for update nowait子句進行鎖定,在Oracle資料庫中使用

Query query = session.createQuery("from User user");

query.setLockMode("user", LockMode.UPGRADE);

也可以在使用Sessionload()或是lock()時指定鎖定模式以進行鎖定。

另外還有三種加鎖模式Hibernate部自動對資料進行鎖定,與資料庫無關:

  • LockMode.WRITE:在insertupdate時進行鎖定,Hibernate會在save()方法時自動獲得鎖定。
  • LockMode.READ:在讀取記Hibernate會自動獲得鎖定。 
  • LockMode.NONE:沒有鎖定。

如果資料庫不支援所指定的鎖定模式,Hibernate會選擇一個合適的鎖定替換,而不是丟出一個例外

5: Lifecycle 介面、Validatable 介面

    可以在實體物件定義時實作Lifecycle介面,這個介面定義如下:

package org.hibernate.classic;

import java.io.Serializable;

import org.hibernate.CallbackException;

import org.hibernate.Session;

public interface Lifecycle {

    public static final boolean VETO = true;

    public static final boolean NO_VETO = false;

    public boolean onSave(Session s) throws CallbackException;

    public boolean onUpdate(Session s) throws CallbackException;

    public boolean onDelete(Session s) throws CallbackException;

    public void onLoad(Session s, Serializable id);

}

當物件實作Lifecycle介面時,會在save()update()delete()load()等方法執行之前呼叫對應的onSave() onUpdate()onDelete()onLoad(),其中onSave()onUpdate()onDelete()onLoad() 若傳回true或丟出CallbackException,則對應的操作中止。

可以在實體物件定義時實作Validatable介面,其定義如下:

package org.hibernate.classic;

public interface Validatable {

    public void validate() throws ValidationFailure;

}

如果定義時實作了Validatable介面,當物件被持久化之前會呼叫validate()方法,如果丟出ValidationFailure,則驗證失敗,物件的資料不會儲存至資料庫中

Interceptor 介面

    您可以在開Session時載入一個自訂Interceptor,這個Interceptor會在對應的動作發生之前呼叫對應的方法,方法是讓您定義的Interceptor實作Interceptor介面,介面的定義如下:

package org.hibernate;

import java.io.Serializable;

import java.util.Iterator;

import org.hibernate.type.Type;

public interface Interceptor {

    // 載入物件之前執行

    public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;

    // flush 時,如果發現有Dirty data,則執行此方法

    public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) throws CallbackException;

    // 儲存物件前執行

    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;

    // 刪除物件前執行

    public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;

    // flush 前執行

    public void preFlush(Iterator entities) throws CallbackException;

    // flush 後執行

    public void postFlush(Iterator entities) throws CallbackException;

    // 判斷傳入的物件是否為 transient

    public Boolean isTransient(Object entity);

    // flush 前呼叫這個方法判斷 Dirty data

    // 傳回Dirty data屬性索引或null採預設行為

    public int[] findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types);

    // 手動建立實體物件,如果傳回 null,則使用預設的建構方法建立實例

    public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException;

    // 傳回實體名稱

    public String getEntityName(Object object) throws CallbackException;

    // 取得實體物件

    public Object getEntity(String entityName, Serializable id) throws CallbackException;

    // beginTransaction() 之後執行

    public void afterTransactionBegin(Transaction tx);

    // 在事務完成前執行

    public void beforeTransactionCompletion(Transaction tx);

    // 在事務完成後執行

    public void afterTransactionCompletion(Transaction tx);}

假設您實作了SomeInterceptor類別:

package onlyfun.caterpillar;

....

public class SomeInterceptor implements Interceptor {

    ....

}


在開Session時,可以如下載入自訂的Interceptor

SomeInterceptor someInterceptor = new SomeInterceptor();

Session session = sessionFactory.openSession(someInterceptor);

分享到:
评论

相关推荐

    python大学生就业信息管理系统(django(完整前后端+mysql+说明文档+LW).zip

    python大学生就业信息管理系统(django(完整前后端+mysql+说明文档+LW).zip

    基于C语言的通讯录文件管理设计源码

    该项目为基于C语言的通讯录文件管理系统设计源码,共包含40个文件,其中包括6个日志文件、5个索引文件、5个编译信息文件、2个项目文件、2个数据库文件、2个可执行文件、2个源代码文件、1个可执行文件和1个解决方案文件。系统旨在提供高效的通讯录文件管理功能。

    计算机毕业设计:基于java web的公益网站的设计.zip

    计算机科学与技术专业毕业设计项目的核心是基于 Java 与 MySQL 开发,前端运用 jQuery、HTML、CSS 等技术的源码。它涵盖供应链系统、网上书城、ERP 系统、博客系统等众多典型项目,几乎覆盖计算机专业应用的各个领域。 这些源码价值极高,能助力学生快速掌握相关技术知识,提供参考范例与创新思路。其包含完整代码、详细文档、直观演示和全面说明,帮助学生深入了解项目实现过程与技术细节。 这些珍贵的毕业设计源码,大多由学生或导师无私上传至互联网供人自由使用,形成知识共享、共同进步的生态,推动了计算机技术在教育领域的传承与发展。

    JAVA源码 + SpringBoot+vue+mysql 课程答疑系统 + 数据库 + 文档

    本课程答疑系统有管理员,老师,学生三个角色。管理员功能有,个人中心,学生管理,老师过来,科目类型管理,学生问题管理,老师回答管理,老师信息管理,关注列表管理,交流区,系统管理。学生功能有,个人中心,科目类型管理,学生问题管理,老师回答管理,老师信息管理,关注列表管理,我的收藏管理。老师功能有,个人中心,老师回答管理,老师信息管理,关注列表管理,我的收藏管理。 内含文档,可轻松上手。

    【weixin9181】基于微信小程序的乡村政务服务系统springboot.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 资源包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    TRichView v23.0.1 for Delphi 11-12 Athens Full Source.7z

    TRichView v23.0.1 for Delphi 11-12 Athens Full Source.7z

    【weixin9229】学生资助在线管理软件开发微信小程序ssm.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    风光柴储微电网经济调度优化:基于Matlab的智能求解方法与环保经济双赢之道,风光柴储微电网经济调度优化研究:基于Matlab平台的求解与应用,风光柴储微电网经济调度(Matlab) 微电网优化调度作

    风光柴储微电网经济调度优化:基于Matlab的智能求解方法与环保经济双赢之道,风光柴储微电网经济调度优化研究:基于Matlab平台的求解与应用,风光柴储微电网经济调度(Matlab) 微电网优化调度作为智能电网优化的重要组成部分,对降低能耗、环境污染具有重要 意义。 微电网的发展目标既要满足电力供应的基本需求,又要提高经济效益和环境保护。 本文基于Matlab平台,使用Yalmip+Cplex对微电网进行最优化调度问题求解,调度求解的过程较为简洁方便,可修改性强。 ,微电网优化调度;风光柴储系统;经济调度;Matlab平台;Yalmip+Cplex求解;简洁方便可修改性强;环境保护。,Matlab下的风光柴储微电网经济调度优化研究

    制作PPT指南:构建高效的人工智能主题演示文稿的要素与步骤

    内容概要:本文详细介绍了制作PPT所需的基本要素与具体的结构范例。从PPT各部分构成要素出发——封面页、目录页、内容页、总结页到问答页逐一进行了阐述并给出了具体案例。以“人工智能与未来”为主题,提供了每一页可能涵盖的内容范围和结构安排,有助于提高PPT制作者对于内容规划、素材选取以及页面布局的理解。

    耳机拆机视频,可以看看

    拆机视频耶耶耶

    linux环境下Levmar-2.6编译好静态库

    linux环境下Levmar-2.6编译好静态库,测试成功

    【weixin9221】新冠肺炎服务预约微信小程序的设计与实现ssm.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    智慧产业园区解决方案Word(181页).docx

    智慧产业园区作为城市发展的新亮点,正逐步成为推动区域经济转型升级和创新增长的重要引擎。在国家数字红利持续释放和智慧城市发展环境不断优化的背景下,智慧产业园区的建设迎来了前所未有的发展机遇。从《国家新型城镇化规划(2014-2020)》到《中国制造2025》,再到中央城市工作会议和十三五规划中提出的建设一批新型示范性智慧城市,一系列政策文件的出台为智慧产业园区的建设提供了坚实的政策支撑。 智慧产业园区的核心在于“硬”与“软”基础设施的全面建设。硬件设备方面,物联网、大数据、云计算、人工智能等先进技术的应用,为园区打造了高效、智能的信息基础设施。这些技术不仅提升了园区的运营效率,还为企业提供了便捷、高效的服务。例如,通过智能感知网和物联感知平台,园区能够实时采集和传输各类数据,实现全量数据的互联共享。而软件系统的建设,则更加注重服务的人性化和管理的科学化。智慧园区通过构建公共服务平台、公共技术平台以及各领域的智慧系统,为园区企业、从业人员提供了全方位的公共服务。这些服务不仅涵盖了基础服务和增值服务,还通过线上线下相结合的方式,满足了不同用户群体的多样化需求。同时,智慧园区还注重生态节能环保的基础设施资源建设,以及规划法规标准构成的政策资源、服务组织构成的社会资源等多元资源的整合利用,为园区的可持续发展奠定了坚实基础。 在智慧产业园区的运营过程中,管理者充分利用大数据应用与分析、预测预警、可视指挥等智能化手段,实现了园区管理的科学化、精准化。通过一张图直观展示人、地、物、事、情、组织等资源分布,管理者能够足不出户就能知晓园区资源使用情况。而通过对园区产业数据的深度挖掘、分析、研判,管理者能够掌握园区产业趋势,为科学决策提供有力支撑。此外,智慧园区还注重人文社区的建设,通过提供园区服务通知、园区活动在线咨询、政策法规资料下载等多元化服务,营造了良好的社区氛围。在车辆管理、物业管理等方面,智慧园区也引入了智能化手段,提升了用户体验和园区运营效率。例如,通过智能停车管理系统,园区能够快速寻找停车位,减少停车场拥堵和人为指引调度工作;而端到端的线上物业管理应用,则让物业服务更加便捷、高效。 综上所述,智慧产业园区作为智慧城市的重要组成部分,正以其独特的魅力和无限的潜力吸引着越来越多的关注。通过全面建设“硬”与“软”基础设施、整合多元资源、利用智能化手段提升管理效率,智慧产业园区正逐步成为推动区域经济高质量发展的新引擎。未来,随着技术的不断进步和应用场景的不断拓展,智慧产业园区将迎来更加广阔的发展前景。

    顶顶顶的方法2233111

    fff烦烦烦

    自动驾驶时代的数据管理与服务框架:数据采集、存储及服务一体化解决方案,自动驾驶数据采集、存储与服务框架:技术领导者的必备指南,自动驾驶数据采集及数据服务框架 , 倘若你是产品经理或者项目经理又或者是

    自动驾驶时代的数据管理与服务框架:数据采集、存储及服务一体化解决方案,自动驾驶数据采集、存储与服务框架:技术领导者的必备指南,自动驾驶数据采集及数据服务框架 , 倘若你是产品经理或者项目经理又或者是技术leader,这个将帮您梳理数据采集、数据存储及数据服务的大框架。 倘若您是追求具体技术实现算法细节而不太关注大架构的技术人员,可能这个不太适合,这也是需要仔细考虑的。 ,核心关键词:自动驾驶;数据采集;数据存储;数据服务;框架;产品经理/项目经理/技术leader。,自动驾驶数据管理与服务架构解决方案

    基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档附带,基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档分享,基于FP

    基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档附带,基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档分享,基于FPGA的Cortex-M3软核OV5640摄像头采集工程 实现基于FPGA的Cortex-M3软核基本SOC,系统外设包括GPIO和UART串口和OV5640摄像头,实现摄像头采集和HDMI接口图像输出。 开发基于vivado2019.2和vitis,理论上可适用于任何版本的vivado,软件工程基于Keil设计,并且附带本人编写的详细开发文档,能够快速完成工程的移植。 在该工程基础上可进一步开发更多的功能。 ,基于FPGA的Cortex-M3软核; OV5640摄像头采集; HDMI图像输出; vivado2019.2开发; vitis软件工程; Keil设计。,基于FPGA的Cortex-M3软核与OV5640摄像头采集系统开发工程:HDMI输出,全面移植可升级

    基于Objective-C和C语言的starrtc-ios即时通讯系统设计源码

    该项目为基于Objective-C核心的starrtc-ios即时通讯系统设计源码,涵盖898个文件,其中包括247个头文件(h)、211个PNG图片文件、195个Objective-C源文件(m)、163个JSON文件、46个XIB界面文件、9个JPG图片文件、5个Property List文件(plist)、3个Storyboard文件以及2个Markdown文件(md)。系统支持单聊、群聊、聊天室、文件传输等功能,并集成了免费一对一视频聊天、VOIP语音对讲、直播连麦、视频直播、RTSP/RTMP流媒体处理以及WebRTC服务等先进技术,适用于在线教育、会议、小班课等多种场景。

    基于Python的Django-html特色饮食情感分析语料库模型建立源码.zip

    基于Python的Django-html特色饮食情感分析语料库模型 系统选用B/S模式,应用Django框架, MySQL为后台数据库。

    【weixin9207】课堂考勤微信小程序ssm.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    ideaeclipse小程序改项目名称教学

    ideaeclipse小程序改项目名称教学

Global site tag (gtag.js) - Google Analytics