Hibernate总结

news/2023/11/30 22:04:45
一、 基础知识

① Hibernate是对象/关系映射(Object/Relation Mapping)的解决方案。

② Hibernate架构

● POJO类

● hibernate.cfg.xml

● *.hbm.xml

● Hibernate应用



二、 几个重要的类

● Configuration类 (负责管理Hibernate的配置信息)

当创建SessionFactory时,Configuration实例可以指定使用哪一个映射文挡。应用程序通常只是创建一个Configuration实例,并通过它创建一个SessionFactory实例。

● SessionFactory类 (负责创建Session实例)

它是线程安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同的线程提供Session。

● Session类

Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Session不是线程安全的,多个执行线程共享一个Session,将会发生数据共享而发生混乱问题。为了解决此问题,可以采用ThreadLocal变量,使用它可以有效隔离执行所使用的数据,也就避开了Session的多线程之间的数据共享问题。



如何调用hibernate API?

1、创建Configuration对象。(解析配置文件)

Configuration config = new Configuration();



2、通过Configuration创建Session Factory(线程安全的重量级组件)。

Config = config.configure(); //configure()方法会在CLASSPATH下寻找hibernate.cfg.xml

SessionFactory = config.buildSessionFactory();



3、通过SessionFactory创建Session会话对象。

Session session = sessionFactory.openSession();



4、通过Session取得事务对象。

Transaction trans = session.beginTransaction();



5、通过session与数据库进行会话。

session.save(object o); //增

session.delete(object o); //删

session.update(object o); //改

session.get (Class clazz, Serializable id); //根据Id查找对象

session.createQuery(String sql); //自己拼HQL语言查找对象返回一个Query对象。



6、提交操作,结束事务。

Trans.commit();



7、关闭Session

session.close();

注:第一步和第二步一般放在静态初始化代码块中执行。



三、Hibernate中自带ID的generator的含义:

1、identity:用于MySql数据库。特点:递增

<id name="id" column="id">

<generator class="identity"/>

</id>

注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。



2、sequence:用于Oracle数据库

<id name="id" column="id">

<generator class="sequence">

<param name="sequence">序列名</param>

</generator>

</id>



3、native:跨数据库时使用,由底层方言产生。

Default.sequence为hibernate_sequence

<id name="id" column="id">

<generator class="native"/>

</id>

注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。

如果Oracle中没有该序列,连Oracle数据库时会报错。



4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要

有初始值。

<id name="id" column="id">

<generator class="hilo">

<param name="table">high_val</param>

<param name="column">nextval</param>

<param name="max_lo">5</param>

</generator>

</id>



5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。

<id name="id" column="id">

<generator class="hilo">

<param name="sequence">high_val_seq</param>

<param name="max_lo">5</param>

</generator>

</id>

6、assigned:用户自定义id;

<id name="id" column="id">

<generator class="assigned"/>

</id>



7、foreign:用于一对一关系共享主健时,两id值一样。



四、Hibernate类关系的处理:

1、One―to―One关系在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射one-to-one关系。

1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束。或者是两个表共享一个主健。

2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。

3、在hibernate中:

主健映射:都是one-to-one要用foreign生成策略。

外健映射:主表中用one-to-one,副表通过property-ref many-to-one

http://www.niftyadmin.cn/n/3854863.html

相关文章

Linux下安装jira 3.13.4

运行环境&#xff1a;LINUX、JDK1.6、Mysql5、Jira3.13.4 1. 安装JDK 1.1 下载jdk-6u19-linux-x64-rpm.bin&#xff0c;运行安装。 1.2 设置环境变量 vi /etc/profile&#xff0c;添加如下内容&#xff1a; export JAVA_HOME/usr/java/jdk1.6.0_19/ export J…

绅士还是流氓,坏事还是好事

奇虎360摊上事儿了&#xff0c;摊上大事儿了。蛇年春节刚过不久&#xff0c;《每日经济新闻》推出长达4个整版的报道《360黑匣子之谜——奇虎360“癌”性基因大揭秘》&#xff0c;强烈谴责这家以安全起家的互联网企业&#xff1a;粗暴侵犯网民的合法权益(隐私权、知情权、同意权…

dropbox的使用

dropbox的使用步骤如下&#xff1a;1、用文本编辑器打开hosts文件&#xff1a;C:\Windows\System32\drivers\etc\hosts2、www.dropbox.com原IP 174.36.30.70已无法连接&#xff0c;所以在文件中添加以下内容&#xff1a;174.36.30.71 www.dropbox.com即将www.dropbox.com解 析到…

CLOSE BY CLIENT STACK TRACE

ORACLE CLOSE BY CLIENT STACK TRACE 部署一个项目启动的时候debug打印出好多错误 其中&#xff0c;CLOSE BY CLIENT STACK TRACE 是第一错误 使用的是Myeclipse 8.5 框 架&#xff1a; hibernate 3.0 &#xff0c;spring 3.0 &#xff0c;maven2 等 web服务器 &#…

Selenium 学习笔记2

启动完成服务器后&#xff0c;可以进行客户端代码的开发了&#xff1a; 2、客户端进行编写 public class TestPage {private Selenium selenium;Beforepublic void setUp(){String url "http://www.baidu.com";//selenium new DefaultSelenium("localhost&qu…

更系统地掌握Struts1.x/Struts2.x+Hibernate+Spring框架组合,请学习SpringSide或Appfuse

终于&#xff0c;终于将SSH整合成功了&#xff0c;弄了几个小时&#xff0c;可以休息了&#xff08;有的朋友弄了半个月&#xff0c;甚至重装了系统也没弄好&#xff0c;哎&#xff0c;庆幸啊&#xff09;。碰到问题千万不要放弃&#xff0c;要相信没有解决不了的问题&#xff…

笔记.NET基础知识03

判断结构if结构的基本语法:if (条件)语句A;执行过程:首先判断条件的结果,如果条件为true,则执行语句A.如果条件为false,则跳过语句A,执行后面的语句.注意:1. if后面括号中的条件,计算后要是一个bool类型的值.2. 默认条件下,if判断条件之后只能包括一个语句. if-else结构语法:if…

hibernate的使用总结 结合spring

一、整体的hibernate流程。首先我们通过web.xml中可以找到spring的配置文件&#xff08;往往我们可以把spring配置文件分为多个&#xff1a;Dao相关的&#xff0c;logic相关的各种 logic的bean&#xff0c;表现层相关的各种action的bean&#xff09;&#xff0c;其中在dao相关的…

Selenium 学习笔记3

3、客户端完成编写后&#xff0c;一般来说就可以测试运行了 但是在这个时候我碰到了一个问题&#xff1a; selenium.open(...) 超时&#xff0c; selenium.waitForPageToLoad(...);也会超时 而当我访问自己机器部署的代码的时候&#xff0c;这些问题都不存在。 后来查阅了一…

SSH 环境搭建完整教程

SSH 环境搭建&#xff1a;struts2.18spring2.5hibernate3 一、SSH 环境搭建开发环境 1、Filenewweb project; 2、配置好TomCat&#xff1b; 二、SSH 环境搭建的配置structs 1、引入structs的包&#xff1a; 2.修改WEB-INF下的web…

SVN 签出源码 Struts Spring Hibernate

SVN 签出源码 Struts Spring Hibernate 很多优秀的开源项目已经提供SVN源码签出了&#xff0c;无论是解疑还是学习&#xff0c;都是一大幸福之事啊&#xff01; Apache的SVN库&#xff0c;强烈推荐&#xff01; http://svn.apache.org/repos/asf/ 里面不但有Struts的源码&#…

Selenium 学习笔记4

selenium.waitForPageToLoad(...); 何时使用&#xff0c;生效问题&#xff0c;flag值的改变问题&#xff0c;暂时先标记&#xff0c;待完善。 s

双色Hanoi塔问题及判断指令

一.双色Hanoi塔问题 <<设A、B、C是3 个塔座。开始时&#xff0c;在塔座A 上有一叠共n 个圆盘&#xff0c;这些圆盘自下而上&#xff0c;由大到小地叠在一起。各圆盘从小到大编号为1&#xff0c;2&#xff0c;……&#xff0c;n&#xff0c;奇数号圆盘着蓝色&#xff0c;偶…

扩展 JUnit4 以促进测试驱动开发

简介&#xff1a; 在采用测试驱动开发的项目中&#xff0c;有一个经常困扰开发者的问题是&#xff1a;当存在大量的测试用例时&#xff0c;一次运行完所有的测试用例要花费很长的时间&#xff0c;采用 TestSuite 来组织测试用例的方式缺乏灵活性&#xff0c;通常它的组织结构大…

DDTUnit 数据驱动框架介绍及其在单元测试中的应用

简介&#xff1a; DDTUnit 是一个基于JUnit的以数据为驱动方法的测试框架。它通过提供一个简单的 XML 数据描述文件&#xff0c;把测试代码和测试数据剥离开来&#xff0c;进而实现了测试代码与数据无关。同时&#xff0c;该XML文件支持复杂自定义数据对象以及诸如collection&a…

testNG 学习笔记1

testNG 入门&#xff1a; 这几天学习testNG&#xff0c;很是郁闷&#xff0c;在网上搜索了一些文档&#xff0c;或许自己太菜总是感觉云里雾里的&#xff0c;搞了好几天&#xff0c;今天才感觉有点眉目&#xff1a;1、最简单的testNG import org.apache.commons.lang.StringU…
最新文章