(三)映射对象标识符(OID)
所有项目导入对应的hibernate的jar包、mysql的jar包和添加每次都需要用到的HibernateUtil.java
第一节:Hibernate 用对象标识符(OID)来区分对象
例子:
hibernate.cfg.xml
1 <?xml version='1.0' encoding='utf-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 8 <session-factory> 9 10 <!--数据库连接设置 --> 11 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 12 <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property> 13 <property name="connection.username">root</property> 14 <property name="connection.password">123456</property> 15 16 17 <!-- 方言 --> 18 <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 19 20 <!-- 控制台显示SQL --> 21 <property name="show_sql">true</property> 22 23 <!-- 自动更新表结构 --> 24 <property name="hbm2ddl.auto">update</property> 25 26 <mapping resource="com/wishwzp/model/Student.hbm.xml"/> 27 28 </session-factory> 29 30 </hibernate-configuration>
Student.java
1 package com.wishwzp.model; 2 3 public class Student { 4 5 private long id; 6 private String name; 7 8 public long getId() { 9 return id; 10 } 11 public void setId(long id) { 12 this.id = id; 13 } 14 public String getName() { 15 return name; 16 } 17 public void setName(String name) { 18 this.name = name; 19 } 20 @Override 21 public String toString() { 22 return "Student [id=" + id + ", name=" + name + "]"; 23 } 24 25 26 }
Student.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.wishwzp.model"> 7 8 <class name="Student" table="t_student"> 9 <id name="id" column="stuId"> 10 <generator class="native"></generator> 11 </id> 12 13 <property name="name"></property> 14 </class> 15 16 </hibernate-mapping>
StudentTest.java
1 package com.wishwzp.service; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 6 import com.wishwzp.model.Student; 7 import com.wishwzp.util.HibernateUtil; 8 9 public class StudentTest { 10 11 public static void main(String[] args) { 12 SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); 13 Session session=sessionFactory.openSession(); // 生成一个session 14 session.beginTransaction(); // 开启事务 15 16 //获取主键为1的学生 17 Student s1=(Student)session.get(Student.class, Long.valueOf(1));//当执行到这里的时候Session缓冲中会有OID为1的Studnet对象 18 //获取主键为2的学生 19 Student s2=(Student)session.get(Student.class, Long.valueOf(2));//当执行到这里的时候Session缓冲中会有OID为2的Studnet对象 20 //获取主键为1的学生 21 Student s3=(Student)session.get(Student.class, Long.valueOf(1));//在Session缓冲中找到了UID为1,所以指向了UID为1的对象 22 System.out.println(s1==s2);//false 23 System.out.println(s1==s3);//true 24 session.getTransaction().commit(); // 提交事务 25 session.close(); // 关闭session 26 } 27 }
这是数据库的信息:
结果显示:
这就表明S1和S3是指向一个地址的
第二节:Hibernate 对象标识符生成策略
主键的分类
业务主键VS 代理主键
代理主键是不具有业务性的;
1,increment 由Hibernate 自动以递增的方式生成标识符,适用代理主键;
2,identity 由底层数据库生成标识符;适用代理主键;
3,sequcence 由Hibernate 根据底层数据库的序列来生成标识符;适用代理主键;
4,hilo Hibernate 根据high/low 算法来生成标识符。适用代理主键
5,native 根据底层数据库对自动生成标识符的支持能力, 来选择identity,sequence 或hilo;适用代理主键;
increment 例子:
hibernate.cfg.xml
1 <?xml version='1.0' encoding='utf-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 8 <session-factory> 9 10 <!--数据库连接设置 --> 11 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 12 <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property> 13 <property name="connection.username">root</property> 14 <property name="connection.password">123456</property> 15 16 17 <!-- 方言 --> 18 <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 19 20 <!-- 控制台显示SQL --> 21 <property name="show_sql">true</property> 22 23 <!-- 自动更新表结构 --> 24 <property name="hbm2ddl.auto">update</property> 25 26 <mapping resource="com/wishwzp/model/Student.hbm.xml"/> 27 28 </session-factory> 29 30 </hibernate-configuration>
Student.java
1 package com.wishwzp.model; 2 3 public class Student { 4 5 private long id; 6 private String name; 7 8 public long getId() { 9 return id; 10 } 11 public void setId(long id) { 12 this.id = id; 13 } 14 public String getName() { 15 return name; 16 } 17 public void setName(String name) { 18 this.name = name; 19 } 20 @Override 21 public String toString() { 22 return "Student [id=" + id + ", name=" + name + "]"; 23 } 24 25 26 }
Student.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.wishwzp.model"> 7 8 <class name="Student" table="t_student"> 9 <id name="id" column="stuId"> 10 <generator class="increment"></generator> 11 </id> 12 13 <property name="name"></property> 14 </class> 15 16 </hibernate-mapping>
StudentTest2.java
1 package com.wishwzp.service; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 6 import com.wishwzp.model.Student; 7 import com.wishwzp.util.HibernateUtil; 8 9 public class StudentTest2 { 10 11 public static void main(String[] args) { 12 SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); 13 Session session=sessionFactory.openSession(); // 生成一个session 14 session.beginTransaction(); // 开启事务 15 16 Student s=new Student(); 17 s.setName("张三"); 18 session.save(s); 19 20 session.getTransaction().commit(); // 提交事务 21 session.close(); // 关闭session 22 } 23 }
结果显示:
当我继续在执行一下代码。。。。。
结果显示:
identity 例子:
increment 例子的代码只改变一下Student.hbm.xml,其他什么代码都不改变。
Student.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.wishwzp.model"> 7 8 <class name="Student" table="t_student"> 9 <id name="id" column="stuId"> 10 <generator class="identity"></generator> 11 </id> 12 13 <property name="name"></property> 14 </class> 15 16 </hibernate-mapping>
结果显示:
当我继续在执行一下代码。。。。。
结果显示:
native 例子:
increment 例子的代码只改变一下Student.hbm.xml,其他什么代码都不改变。
Student.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.wishwzp.model"> 7 8 <class name="Student" table="t_student"> 9 <id name="id" column="stuId"> 10 <generator class="native"></generator> 11 </id> 12 13 <property name="name"></property> 14 </class> 15 16 </hibernate-mapping>
结果显示:
当我继续在执行一下代码。。。。。
结果显示:
主要native用的最多。
转载于:https://www.cnblogs.com/wishwzp/p/5481201.html
(三)映射对象标识符(OID)相关推荐
- Hibernate学习3—映射对象标识符(OID)
一.Hibernate 用对象标识符(OID)来区分对象 作如下代码的实验: public class StudentTest {public static void main(String[] ar ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- ngnix 映射路径配置_MyBatis Config(三)映射文件mappers标签
上篇文章我们介绍了标签,这篇文章主要讲标签 在配置文件中,元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示. 1.使用类路径引入2.使用本地文件路径引入3 ...
- 过一下hibernate4-3
一. 映射对象标识符 OID 先看一个测试 public void testSessionOID() {Session session = sf.openSession(); // 生成一个sessi ...
- 网络协议篇之SNMP协议(二)—— 管理信息库MIB及OID
上篇文章提到一套完整的SNMP系统主要包括管理信息库(MIB).管理信息结构(SMI)及SNMP报文协议. 本篇我们来学习管理信息库(MIB) 一.管理信息库MIB 任何一个被管理的资源都表示成一个对 ...
- snmp Oid整理与运用
OID常用组 管理信息库MIB:任何一个被管理的资源都表示成一个对象,称为被管理的对象.MIB是被管理对象的集合.它定义了被管理对象的一系列属性:对象的名称.对象的访问权限和对象的数据类型等.每个SN ...
- Hibernate之对象关系映射文件
一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...
- oid 值 内存使用_如何使用Choerodon LDAP以及配置定时任务
作者:李楷文 Choerodon作为多云管理平台,可以通过LDAP的方式对接企业已有的应用,通过同步用户到Choerodon平台,使企业用户无需注册就可使用LDAP的账户和密码登录到Choerodon ...
- 浅析Hibernate映射(一)——基本映射
在说Hibernate映射之前,先下了解下面的概念. 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关 ...
- snmp基本介绍--理解OID/MIB/snmp报文类型/snmp版本
简单网络管理协议(SNMP-Simple Network Management Protocol) 是一个与网络设备交互的简单方法.一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自 ...
最新文章
- Kafka本身的架构
- 欢乐纪中A组周六赛【2019.5.18】
- 程序员的第一份实习!附面试初体验
- 学习使用的编程及调试技巧
- java 内部错误2753_重新安装java出现错误的解决方法
- Linux Bash Shell字符串抽取、按列合并和格式化输出
- 微信小程序——实现时钟样式
- 惠普微型计算机怎么装机,台式小机惠普电脑怎么装系统
- 2022年4月份京东有什么活动?
- Cadence Allegro如何导出与导入规则
- SAP中销售订单计划行类别中请求/装配对物料需求计划的影响测试
- Soul 源码分析07 SOUL Admin 网关 Http长轮询 数据同步
- 三中卫低级失误致丢球 国足0:3不敌伊朗无缘四强
- 中国税务申报软件市场深度研究分析报告
- 还有多少人记得ChinaRen校友录,它已经502…
- 虚拟光驱软件 ultraiso
- ps转手绘课程眼睛绘制--day03学习笔记
- python 键盘输入一个整数、输出它的千位与百位,学习python,每日练习0615
- PDF转换工具推荐--超级PDF
- 这是什么操作?C语言一行字符串居然让我电脑关机了。
热门文章
- Linux Desktop Entry 文件深入解析
- nginx学习笔记之安装
- python:rs, ws, es = select.select(inputs, [], []) --报错error 10022
- linux 统计TCP 连接各状态总数
- table中td内容过长自动换行
- SVN提交时显示:Path is not a working copy directory
- Libcurl的编译_HTTP/HTTPSclient源代码演示样例
- 原生JavaScript事件详解
- Python新手学习基础之条件语句——elif语句
- LDR_DATA_TABLE_ENTRY结构得不到完整路径?