所有项目导入对应的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)相关推荐

  1. Hibernate学习3—映射对象标识符(OID)

    一.Hibernate 用对象标识符(OID)来区分对象 作如下代码的实验: public class StudentTest {public static void main(String[] ar ...

  2. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  3. ngnix 映射路径配置_MyBatis Config(三)映射文件mappers标签

    上篇文章我们介绍了标签,这篇文章主要讲标签 在配置文件中,元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示. 1.使用类路径引入2.使用本地文件路径引入3 ...

  4. 过一下hibernate4-3

    一. 映射对象标识符 OID 先看一个测试 public void testSessionOID() {Session session = sf.openSession(); // 生成一个sessi ...

  5. 网络协议篇之SNMP协议(二)—— 管理信息库MIB及OID

    上篇文章提到一套完整的SNMP系统主要包括管理信息库(MIB).管理信息结构(SMI)及SNMP报文协议. 本篇我们来学习管理信息库(MIB) 一.管理信息库MIB 任何一个被管理的资源都表示成一个对 ...

  6. snmp Oid整理与运用

    OID常用组 管理信息库MIB:任何一个被管理的资源都表示成一个对象,称为被管理的对象.MIB是被管理对象的集合.它定义了被管理对象的一系列属性:对象的名称.对象的访问权限和对象的数据类型等.每个SN ...

  7. Hibernate之对象关系映射文件

    一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...

  8. oid 值 内存使用_如何使用Choerodon LDAP以及配置定时任务

    作者:李楷文 Choerodon作为多云管理平台,可以通过LDAP的方式对接企业已有的应用,通过同步用户到Choerodon平台,使企业用户无需注册就可使用LDAP的账户和密码登录到Choerodon ...

  9. 浅析Hibernate映射(一)——基本映射

    在说Hibernate映射之前,先下了解下面的概念. 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关 ...

  10. snmp基本介绍--理解OID/MIB/snmp报文类型/snmp版本

    简单网络管理协议(SNMP-Simple Network Management Protocol) 是一个与网络设备交互的简单方法.一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自 ...

最新文章

  1. Kafka本身的架构
  2. 欢乐纪中A组周六赛【2019.5.18】
  3. 程序员的第一份实习!附面试初体验
  4. 学习使用的编程及调试技巧
  5. java 内部错误2753_重新安装java出现错误的解决方法
  6. Linux Bash Shell字符串抽取、按列合并和格式化输出
  7. 微信小程序——实现时钟样式
  8. 惠普微型计算机怎么装机,台式小机惠普电脑怎么装系统
  9. 2022年4月份京东有什么活动?
  10. Cadence Allegro如何导出与导入规则
  11. SAP中销售订单计划行类别中请求/装配对物料需求计划的影响测试
  12. Soul 源码分析07 SOUL Admin 网关 Http长轮询 数据同步
  13. 三中卫低级失误致丢球 国足0:3不敌伊朗无缘四强
  14. 中国税务申报软件市场深度研究分析报告
  15. 还有多少人记得ChinaRen校友录,它已经502…
  16. 虚拟光驱软件 ultraiso
  17. ps转手绘课程眼睛绘制--day03学习笔记
  18. python 键盘输入一个整数、输出它的千位与百位,学习python,每日练习0615
  19. PDF转换工具推荐--超级PDF
  20. 这是什么操作?C语言一行字符串居然让我电脑关机了。

热门文章

  1. Linux Desktop Entry 文件深入解析
  2. nginx学习笔记之安装
  3. python:rs, ws, es = select.select(inputs, [], []) --报错error 10022
  4. linux 统计TCP 连接各状态总数
  5. table中td内容过长自动换行
  6. SVN提交时显示:Path is not a working copy directory
  7. Libcurl的编译_HTTP/HTTPSclient源代码演示样例
  8. 原生JavaScript事件详解
  9. Python新手学习基础之条件语句——elif语句
  10. LDR_DATA_TABLE_ENTRY结构得不到完整路径?