ORM:Object/Relationship Mapping  对象/关系映射
 
实现流程
 
1.项目中导入Hibernate相关类包并创建配置文件。Hibernate.cfg.xml(可放在src根目录下):   
          <session-factory>
<property name="hibernate.connection.username">root</...>
<property name="hibernate.connection.password">123</...>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</...>
<property name="hibernate.connection.url">jdbc:mysql://loaclhost:3306/TABLE?useUnicode=true&amp;characterEncoding=utf-8</...>
<property name="hibernate.dialect">org.hibernate.dialtct.MySQLDialect</...> <property name="show_sql">true</...>
<property name="format_sql">true</...>
<property name="hbm2ddl.auto">assigned</...>
</session-factory>
2.创建持久化类(实体类)(一对多时,在一方添加set集合HashSet用以包含多方,代码略);
 
 
3.创建对应映射文件(实体类到数据库)。Grade.hbm.xml(Hibernate5以上可能需要与实体类放在一个包内):     
 <hibernate-mapping>
<class name="com.entity.Grade" table="GRADES”>
<id name="gid" column="SID" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<property name="gname" type="java.lang.String">
<column name="GNAME" length="20"></column>
</property>
<property name="amount" type="java.lang.Integer">
<column name="AMOUNT"></column>
</property>
<!-- 一对多需配置set -->
<set name="student"(Grade中属性,实体类)table="STUDENTS">
<key column="gid"></key>
<one-to-many class="com.entity.Student"/>
</set>
</class>
</hibernate-mapping>
  上图为一对多点一方配置。实现双向配置时,需在多对一对多端同时添加配置<many-to-one>标签

多对一的映射文件配置:
<many-to-one     name="grade"对应属性 class=”com.entity.Grade"  column="grade">
</many-to-one>
 
关于双向级联的补充:
  (1)inverse属性:指定关联关系维护方。在one一方的<set>标签中,表示反转;默认为fasle,表示关联关系由one方维护;
 
   保存one方时,one方所包含的many方对象若数据库中不存在,应一同保存,此为级联操作。通过cascade实现。 
  (2)cascade属性:all所有操作级联;save-update保存和更新时级联操作;delete删除时级联操作;none不级联操作。 在one 方的<set>标签中或many方的<many-to-one>标签中设置。

 
 
4.在配置文件中添加映射文件路径:
          <session-factory>
.......... <mapping resource="src/com/entity/Grade.hbm.xml"/>
<mapping resource="src/com.entity/Student.hbm.xml"/>
</session-factory>
5.编写查询操作类:                    //版本不同存在差异4与5
  1. 利用configuration创建sessionFactory对象;
  2. 通过sessionFactory创建session对象;
  3. 通过sessionFactory获取session(openSession方法或getCurrentSession方法);
  4. 通过session开启transaction事务(beginTransaction方法);
  5. 操作数据库:sesison.save()/get(Student.class,id)/load()/delete();
  6. 提交事务:transactoin.commit();
  7. 关闭session;

  Hibernate5.2的session创建:

.....
ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
sessionFactory = new MetadataSources(ssr).buildMetadata().buildSessionFactory();
session = sessionFactory.openSession();
......

  

操作过程中基本摆脱数据库语句,只是对持久化类操作后进行事务的提交。各版本session创建方法待补充

Hibernate 随记(数据库映射流程)的更多相关文章

  1. Eclipse从数据库逆向生成Hibernate实体类和映射文件(Eclipse插件系列之HibernateTools)

    ♣下载安装Eclipse插件(HibernateTools) ♣Eclipse连接数据库(Mysql5.7) ♣新建hibernate.properties和hibernate.cfg.xml文件 ♣ ...

  2. [转载]Hibernate如何提升数据库查询的性能

    目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...

  3. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  4. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  5. Hibernate联合主键映射

    1.联合主键的映射规则 1) 类中的每个主键属性都对应到数据表中的每个主键列. Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法, ...

  6. Hibernate一对一双向关联映射

    关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介 ...

  7. Hibernate之1-N关联映射

    一.Hibernate之1-N关联映射 1. 哪边是 1 , 哪边是多 ?      须要从业务的角度来说明.比如,Employee 和 Department 之间就是 n-1 的关联关系,Order ...

  8. zTree市县实现三个梯级数据库映射

    zTree市县实现三个梯级数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"? &g ...

  9. 快捷配置Hibernate实现对数据库的配置(构建通道)

    在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(* ...

随机推荐

  1. Anjs分词器以及关键词抓取使用的方法

    首先介绍一下这个网址非常有用本文所有的关于Anjs起源来自这里请先查看一下 https://github.com/NLPchina/ansj_seg 在本次测试使用的是     import java ...

  2. Redis各类型应用场景

    Redis的六种特性 l ,重要消息的,然后工作线程可以选择按 ret = r.zincrby("login:login_times", 1, uid) //那么如何获得登录次数最 ...

  3. Python的入门要点

    一.输入 1.键盘输入 在python 2.7中,不用input(),而用 raw_input()读入一行键盘输入,并转化为字符串. s = map(int ,raw_input().split()) ...

  4. android SDK 离线下载更新

    http://blog.csdn.net/harvic880925/article/details/37913801 前言:在公司配置eclipse做android开发,真是烦死了,不知公司做了哪门子 ...

  5. 通过本地IIS服务器+路由器==实现本地局域网WIFI覆盖

    这是一张手机连接wifi局域网下载视频的图片,速度可以达到10M/S左右,下面让我们来看一下,本地服务器是如何建立的. 1.启动本地IIS服务 步骤如下 一.电脑右键-属性-控制面板-程序和功能-打开 ...

  6. 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)

    1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...

  7. 如何判断pc或者移动端

    <script type="text/javascript"> var userAgentInfo = navigator.userAgent; var Agents ...

  8. C# 字符串操作类

    using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...

  9. opnet学习过程

    学习opnet有一段时间了,走了 不少弯路,现在,想总结一下,推荐给大家一个比较好的学习过程. 因为英语不太好,所以在开始学opnet时用了很多心思去找中文资料,比如说,一些文档.书.视频等.看文档和 ...

  10. oracle xmltype导入并解析Excel数据 (三)解析Excel数据

    包声明 create or replace package PKG_EXCEL_UTILS is -- Author: zkongbai-- Create at: 2016-07-06-- Actio ...