关联映射:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html

关联映射,hibernate查询方式:http://www.cnblogs.com/ablejava/p/5731018.html

一、Hibernate的加载流程

  1.Hibernate配置文件的两种加载方式

  ①Configuration configuration = new Configuration();

  configuration.configure();

  public Configuration configure()throws HibernateException{

    configure("/hibernate.cfg.xml");

    return this;

}

  ②Configuration configuration = new Configuration();

  configuration.configure(“”);

  public Configuration configure(String resource)throws HibernateException{

    log.info("configuring from resource:"+resource);

    InputStream stream = getconfigurationInputStream(resource);

    return doConfig(stream,resource);

}

二、crud操作

  1.创建configuration对象加载Hibernate的配置文件(配置文件中包含领域类和表的映射资源文件)

  2.通过configuration对象获得sessionfactory对象

  3.打开session:sessionFactory.openSession();

  4.用session进行查询

  5.开启事务:session.beaginTransaction();进行curd操作。提交事务,并关闭session;

 public void testSave{
Configuration configuration = new Configuration();
//加载类路径下的hibernate.cfg.xml
configuration.configure();
//调用sessionFactory
SessionFactory sf = configuratiion.buildSessionFactory();
//打开sessioin
Session s = sf.openSession();
//开启事务
Transaction tr = s.beginTransaction();
//进行保存操作
Object obj = new Object();
obj.set();
.........
s.save(obj);
tr.commit();
s.close()

  

三、关系操作

  1.对象的状态

  临时状态:new

  持久化状态:get save update

  脱管状态:clear close evict

  

  2,关系操作

  2.1 多对一和一对多单向关联映射

  多对一

 <hibernate-mappin>
<class name="bean.User" table="t_user">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用《many-to-one》映射多对一关系。导出ddl时将自动生成一个外键 -->
<many-to-one name="group" column="gid"/> </class>
</hibernate-mappin>
<hibernate-mappin>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
</class>
</hibernate-mappin>

  一对多

 <hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id"><generator class="native"/></id>
<property name="name"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用set映射集合 -->
<set name="users">
<!-- 使用《key》指定引用自身的外键表(t_user)中的外键 -->
<key column="gid"/>
<!-- 使用一对多的影视 -->
<one-to-many class="bean.User"/>
</set>
</class>
</hibernate-mapping>

2.2双向关联

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用<many-to-one>映射多对一关系。导出ddl时将自动生成一个外键 -->
<many-to-one name="group" column="gid"/>
</class>
</hibernate-mapping>
<!-- bean/Group.hbm.xml --> <hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用<set>映射集合 -->
<set name="users">
<!-- 使用<key>指定引用至自身的外键表(t_user)中的外键 -->
<key column="gid"/>
<!-- 使用<one-to-many>映射一对多关系 -->
<one-to-many class="bean.User"/>
</set>
</class>
</hibernate-mapping>

双向关联中,为《set》加入“inverse=true”可以翻转维护关系:Hibernate将放弃从一的一端维护。user和group的关系必须使用user维护,操作group时Hibernate将不维护这个关系。

<set name="users" inverse=true>

操作group示例

sessiion.beginTransation();
User user = new User();
user.setName("bla"); Grop group = new Group();
group.setName("admin");
group.setUsers(new HashSet());
group.getUsers().add(user); session.save(user);
session.save(group);
session.getTransaction().commit();
//在一的一端翻转后,在多的一端进行维护
session.beginTransaction();
Group group = new Group();
group.setName("admin"); User user = new User();
user.setName("张三");
user.setGroup(group); session.save(group);
session.save(user);
session.getTransaction().commit()

2.3 一对一关联映射

依照映射方法不同,可分为主键关联映射和唯一外键关联映射。主键关联是维护两张表的主键一致,如有必要还可以在主键上再加上外键约束;唯一外键关联则类似于多对一关联,为表加入一个外键列,不过一对一关联会同时将这个外键加上唯一约束。

  1、主键关联映射

  主键单向关联

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<!-- 指定主键生成策略为外键 -->
<generator class="foreign">
<!-- 指定要参照的属性 -->
<param name="property">group</param>
</generator>
</id>
<property name="name"/>
<!-- 使用<one-to-one>映射一对一关系。 -->
<one-to-one name="group">
</class>
</hibernate-mapping>
<!-- bean/Group.hbm.xml -->

<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
</class>
</hibernate-mapping>

  主键双向关联

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<!-- 指定主键生成策略为外键 -->
<generator class="foreign">
<!-- 指定要参照的属性 -->
<param name="property">group</param>
</generator>
</id>
<property name="name"/>
<!-- 使用<one-to-one>映射一对一关系。 -->
<one-to-one name="group">
</class>
</hibernate-mapping>
<!-- bean/Group.hbm.xml -->

<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用<one-to-one>映射一对一关系 -->
<one-to-one name="user"/>
</class>
</hibernate-mapping>

  2、唯一外键关联映射

  单向

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 为<many-to-one>加上unique就变成了一对一 -->
<many-to-one name="group" unique="true" column="gid"/>
</class>
<!-- bean/Group.hbm.xml -->

<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
</class>
</hibernate-mapping>

  双向

  

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 为<many-to-one>加上unique就变成了一对一 -->
<many-to-one name="group" unique="true" column="gid"/>
</class>
</hibernate-mapping>
<!-- bean/Group.hbm.xml -->

<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
<!-- 使用<one-to-one>映射一对一 -->
<one-to-one name="user"/>
</class>
</hibernate-mapping>

2.4多对多关联

  单向 关联

  

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 使用《set》映射集合,在多对多关系中,Hibernate将生成第三张表 -->
<set name="groups" table="t_user_group">
<!-- 使用key指定引用至自身的外键表(t_user_group)中的外键 -->
<key column="userid"></key>
<!-- 使用many-to-one映射多对多关系,column指定另一端在表t_user_group中的列 -->
<many-to-many class="bean.Group" colun="groupid"></many-to-many>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id"><generator class="native"/></id>
<property name="name"/>
</class>
</hibernate-mapping>

  双向关联

<!-- bean/User.hbm.xml -->

<hibernate-mapping>
<class name="bean.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 使用<set>映射集合,在多对多关系中,Hibernate将生成第三张表 -->
<set name="groups" table="t_user_group">
<!-- 使用<key>指定引用至自身的外键表(t_user_group)中的外键 -->
<key column="userid"/>
<!-- 使用<many-to-many>映射多对多关系,column指定另一端在表t_user_group中的列 -->
<many-to-many class="bean.Group" column="groupid"/>
</set>
</class>
</hibernate-mapping>
<!-- bean/Group.hbm.xml -->

<hibernate-mapping>
<class name="bean.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 使用<set>映射集合,在多对多关系中,Hibernate将生成第三张表 -->
<set name="users" table="t_user_group">
<!-- 使用<key>指定引用至自身的外键表(t_user_group)中的外键 -->
<key column="group"/>
<!-- 使用<many-to-many>映射多对多关系,column指定另一端在表t_user_group中的列 -->
<many-to-many class="bean.User" column="userid"/>
</set>
</class>
</hibernate-mapping>

多对多的双向关联同样可以在不想要维护关系的一端的<set>里设置inverse=”true”;但是必须有一端可以维护,也就是说只可以设置一个。

四、Hibernate的优点

五、hql语句

Hibernate---进度1的更多相关文章

  1. eclipse中怎么添加Hibernate tools

    最近在学习Hibernate框架,但是用eclipse的时候发现自己安装的过程不是很顺利,因此记下来,供自己和别人参考. Hibernate Tools是由JBoss推出的一个Eclipse集成开发工 ...

  2. Hibernate和IBatis对比

    [转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...

  3. Hibernate的性能优化问题

    本文是根据Hibernate帮助文档,以及一些书籍及项目经验整理而成,只提供要点和思路,具体做法可以留言探讨,或是找一些更详细更有针对性的资料. 初用Hibernate的人也许都遇到过性能问题,实现同 ...

  4. Hibernate与IBatis的优缺点及可行性分析

    以下文章来源于考试大 1.优点 简单: 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现. 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供 ...

  5. 【转】Hibernate和IBatis对比

    原文地址:http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, ...

  6. Maven 开发hibernate存在的诸多问题

    项目结构: 开发平台: maven version 3.5 eclipse 4. 7 oxyen 最新:hibernate 5.x 引入问题 官网提供的必需选择只有 这个 当然还需要我们单独配置mys ...

  7. Hibernate | Spring JPA | MySQL 使用过程遇到的一些问题

    1. 使用过程 2. 背景 3. 遇到问题 3.1 不指定Hibernate数据库方言,默认SQL生成方式 3.2 抛出异常Hibernate加入了@Transactional事务不会回滚 3.3 H ...

  8. Hibernate学习---缓存机制

    前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...

  9. 转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端

    from: http://ybak.iteye.com/blog/1853335 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端 游戏服 ...

  10. Struts1、Struts2、Hibernate、Spring框架工作原理介绍

    Struts1工作原理 Struts1工作原理图 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控 ...

随机推荐

  1. 在浏览器输入URL回车后发生了什么?

    本文由 简悦 SimpRead 转码, 原文地址 https://4ark.me/post/b6c7c0a2.html 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最 ...

  2. 【日语】日语能力考试N2级核心词汇必备—接续词

    日语能力考试N2级核心词汇必备—接续词 顺接 だから 因为......所以......(下文可用命令,意志劝诱等)その結果  其结果(口语,书面语都行,但是比较生硬)したがって  从而,因而(书面语, ...

  3. sql server 2012 分页/dapper/C#拼sql/免储存过程/简易

    sql server 2012新特性, 支持 OFFSET/FETCH分页, 就像mysql的limit, 比之前的各种top舒服多了,  看各位大佬们的测评文章说效率也是不相上下的, 有时候写个小工 ...

  4. java线程中如何使用spring依赖注入

    实现一个线程继承了Thread或实现Runnable接口,想在run方法中使用spring依赖注入(操作数据库),此时报错为空指针,就是说没有注入进来. 实验了几种方式,分别说一下优缺点. 1:写了工 ...

  5. 【Linux】修改CentOS7启动方式

    ## 查看当前系统的默认启动方式: systemctl get-default ## 查看如下文件 cat /etc/inittab 可以看到 此文件中提示了如何进行修改默认的启动方式 ## 命令行启 ...

  6. javascript_13-函数是一种数据类型

    函数是一种数据类型 函数是一种数据类型 function var num =60; // 1 函数是一种数据类型 function var myFun = function(){ console.lo ...

  7. python 中 ModuleNotFoundError: No module named 'Crypto' 错误处理

    今天在微信小程序服务端集成了微信的登录解密模块 WXBizDataCrypt,集成后运行程序时出现了下面的错误 (.venv) [1lin24@1lin24]# python manager_dev. ...

  8. Python标准库3.4.3-webbrowser-21.1

    21.1. webbrowser — Convenient Web-browser controller Source code: Lib/webbrowser.py  翻译:Z.F. The web ...

  9. Maven的配置文件-settings.xml内容分解

    本文转载:https://www.cnblogs.com/jingmoxukong/p/6050172.html 概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件, ...

  10. Linux服务器集群代理配置

    因为之前本科参与开发的一个互联网新闻采集系统需要爬取几个国外的新闻站点,通过翻墙才能访问,而我们的服务器是阿里云服务器,没有操作界面,而且抽取任务是定时执行,必须要实现程序控制VPN的连接与断开.所以 ...