博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(三)映射对象标识符(OID)
阅读量:5104 次
发布时间:2019-06-13

本文共 5451 字,大约阅读时间需要 18 分钟。

所有项目导入对应的hibernate的jar包、mysql的jar包和添加每次都需要用到的HibernateUtil.java

第一节:Hibernate 用对象标识符(OID)来区分对象

 

 

 例子:

hibernate.cfg.xml

1 
2 5 6
7 8
9 10
11
com.mysql.jdbc.Driver
12
jdbc:mysql://localhost:3306/hibernate
13
root
14
123456
15 16 17
18
org.hibernate.dialect.MySQL5Dialect
19 20
21
true
22 23
24
update
25 26
27 28
29 30

 

 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     @Override21     public String toString() {22         return "Student [id=" + id + ", name=" + name + "]";23     }24     25     26 }

 

Student.hbm.xml

1 
2 5 6
7 8
9
10
11
12 13
14
15 16

 

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(); // 生成一个session14         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);//false23         System.out.println(s1==s3);//true24         session.getTransaction().commit(); // 提交事务25         session.close(); // 关闭session26     }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 
2 5 6
7 8
9 10
11
com.mysql.jdbc.Driver
12
jdbc:mysql://localhost:3306/hibernate
13
root
14
123456
15 16 17
18
org.hibernate.dialect.MySQL5Dialect
19 20
21
true
22 23
24
update
25 26
27 28
29 30

 

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     @Override21     public String toString() {22         return "Student [id=" + id + ", name=" + name + "]";23     }24     25     26 }

 

Student.hbm.xml

1 
2 5 6
7 8
9
10
11
12 13
14
15 16

 

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(); // 生成一个session14         session.beginTransaction(); // 开启事务15         16         Student s=new Student();17         s.setName("张三");18         session.save(s);19         20         session.getTransaction().commit(); // 提交事务21         session.close(); // 关闭session22     }23 }

 

结果显示:

当我继续在执行一下代码。。。。。

结果显示:

 

identity 例子:

increment 例子的代码只改变一下Student.hbm.xml,其他什么代码都不改变。

Student.hbm.xml

1 
2 5 6
7 8
9
10
11
12 13
14
15 16

 

结果显示:

当我继续在执行一下代码。。。。。

结果显示:

 

native 例子:

increment 例子的代码只改变一下Student.hbm.xml,其他什么代码都不改变。

Student.hbm.xml

1 
2 5 6
7 8
9
10
11
12 13
14
15 16

 

结果显示:

当我继续在执行一下代码。。。。。

结果显示:

 

主要native用的最多。

 

转载于:https://www.cnblogs.com/wishwzp/p/5481201.html

你可能感兴趣的文章
js与jquery异同
查看>>
jquery笔记(效果)
查看>>
windows.h
查看>>
视频笔记
查看>>
微信小程序从零开始开发步骤(三)底部导航栏
查看>>
Java重试机制
查看>>
二维数组与稀疏数组的相互转化
查看>>
一步一步写自表达代码——消小球(3)
查看>>
已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。)...
查看>>
php学习笔记--引号
查看>>
快速搞懂 SQL Server 的锁定和阻塞
查看>>
ubuntu12.04安装squid
查看>>
js中自定义方法 转载
查看>>
Mockplus原型设计工具介绍
查看>>
兄弟连(python)--------------------radis日常随笔
查看>>
poj3614 Sunscreen
查看>>
我要好offer之 排序算法大总结
查看>>
python 接口自动化测试(六)使用unittest 批量用例管理
查看>>
PowerDesigner 物理数据模型(PDM) 说明
查看>>
tomcat6.exe与tomcat6w.exe的区别
查看>>