目录
1.持久化对象POJO编写规则:
2.POJO的OID:
3.数据类型:
4.持久化类配置POJO.hbm.xml:
1)主键生成策略increment:顶层递增:
2)主键生成策略identity:底层递增:
3)主键生成策略sequence:序列:
4)主键生成策略native:本地:
5)主键生成策略uuid:标识符:
6)主键生成策略assigned:手动指定:
7)主键生成策略:复合主键:
首页 数据库 mysql教程 IT忍者神龟之Hibernat持久化对象-数据表映射配置回顾

IT忍者神龟之Hibernat持久化对象-数据表映射配置回顾

Jun 07, 2016 pm 04:09 PM
对象 忍者 耐力 数据表 映射

1.持久化对象POJO编写规则: 1) 有空参public构造器; 2) 提供标识属性,映射数据表主键; 3) 属性提供setter和getter方法; 4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0; 5) 不使用final修饰。如果使用final则无法生成代

1.持久化对象POJO编写规则:

1) 有空参public构造器;

2) 提供标识属性,映射数据表主键;

3) 属性提供setter和getter方法;

4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0;

5) 不使用final修饰。如果使用final则无法生成代理对象;当使用了final,load查询将如同get查询。

2.POJO的OID:

OID是持久化类与数据表主键对应的属性,用来唯一区分持久化对象。

自然主键:采用数据库中有意义的列的值作为主键(有意义)

代理主键:采用自动生成的流水号、UUID作为主键(无意义,推荐)

3.数据类型:

基本类型无法区分null和0,开发中POJO属性都使用包装类型。

4.持久化类配置POJO.hbm.xml:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <code class="xml keyword">xml <code class="xml color1"> version<code class="xml plain">=<code class="xml string">"1.0" <code class="xml color1"> encoding<code class="xml plain">=<code class="xml string">"UTF-8"<code class="xml plain">?> <code class="xml plain">DOCTYPE <code class="xml plain"> hibernate-mapping PUBLIC <code class="xml spaces"> <code class="xml plain">"-//Hibernate/Hibernate Mapping DTD 3.0//EN" <code class="xml spaces"> <code class="xml plain">"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <code class="xml comments"><!-- package="POJO所在包" --> <code class="xml plain">hibernate-mapping <code class="xml color1"> package<code class="xml plain">=<code class="xml string">"cn.cvu.domain"<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- name="POJO类" table="数据库中的表单" catalog="数据库,对应项目的hibernate核心配置文件中<property name=&#39;hibernate.connection.url&#39;>jdbc:mysql:///数据库</property> " --> <code class="xml spaces"> <code class="xml plain">class <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"User" <code class="xml color1"> table<code class="xml plain">=<code class="xml string">"table_user" <code class="xml color1"> catalog<code class="xml plain">=<code class="xml string">"db_hibernate"<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- name="POJO对应的属性" column="表单的主键 列" type="POJO属性的数据类型" --> <code class="xml spaces"> <code class="xml plain">id <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"id" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"id" <code class="xml color1"> type<code class="xml plain">=<code class="xml string">"int"<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- class="主键生成策略" --> <code class="xml spaces"> <code class="xml plain">generator <code class="xml color1"> class<code class="xml plain">=<code class="xml string">"native"<code class="xml plain">><code class="xml keyword">generator<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- 常用策略:increment、identity、sequence、native、uuid、assigned --> <code class="xml spaces"> <code class="xml plain"><code class="xml keyword">id<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- name="POJO中对应属性" colunm="表单中的 列" type="POJO数据类型" --> <code class="xml plain">   <code class="xml spaces"> <code class="xml plain">property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"name" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"name" <code class="xml color1"> type<code class="xml plain">=<code class="xml string">"string"<code class="xml plain">><code class="xml keyword">property<code class="xml plain">> <code class="xml plain">   <code class="xml spaces"> <code class="xml plain">property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"age" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"age" <code class="xml color1"> type<code class="xml plain">=<code class="xml string">"int" <code class="xml plain"> ><code class="xml keyword">property<code class="xml plain">> <code class="xml plain">   <code class="xml spaces"> <code class="xml plain">property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"city" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"city" <code class="xml color1"> sql-type<code class="xml plain">=<code class="xml string">"string"<code class="xml plain">><code class="xml keyword">property<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- 常用属性:length:列值长度、not-null:非空true/false、unique:唯一true/false --> <code class="xml spaces"> <code class="xml plain"><code class="xml keyword">class<code class="xml plain">> <code class="xml plain"><code class="xml keyword">hibernate-mapping<code class="xml plain">>

1)主键生成策略increment:顶层递增:

\

由hibernate自动完成,原理:先查询最大值,再插入此值加一。OID必须为long、int或short类型。

优点:跨数据库。

缺点:多线程并发访问问题。

2)主键生成策略identity:底层递增:

\

由数据库自动完成,要求数据库必须支持自增主键。mysql支持,oracle不支持。OID必须为long、int或short类型。

优点:无并发访问问题。

3)主键生成策略sequence:序列:

由数据库自动完成递增,要求数据库必须支持序列。mysql不支持,oracle支持。OID必须为long、int或short类型。

Oracle:

1创建序列:create sequence myseq;

2调用序列:insert into customer values (myseq.nextval); #序列加一

4)主键生成策略native:本地:

\

采用数据库支持的自增策略。 mysql:identity,oracle:sequence。OID必须为long、int或short类型。

优点:跨数据库平台。

5)主键生成策略uuid:标识符:

\

由数据库自动创建。 uuid是32位唯一字符串,表单主键使用varchar类型,POJO对应属性是String类型。

6)主键生成策略assigned:手动指定:

\

在调用hibernate时手动指定主键的值,用于自然主键(有意义的)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 public <code class="java keyword"> void <code class="java plain"> testInsertAssigned() { <code class="java spaces"> <code class="java plain">Session session = UtilGetSesstion.openSession(); <code class="java spaces"> <code class="java plain">Transaction transaction = session.beginTransaction(); <code class="java spaces"> <code class="java spaces"> <code class="java plain">User user = <code class="java keyword">new <code class="java plain"> User(); <code class="java spaces"> <code class="java plain">user.setId(<code class="java value">20130124<code class="java plain">); <code class="java comments">//手动设置主键 <code class="java spaces"> <code class="java plain">user.setName(<code class="java string">"EminemXXX"<code class="java plain">); <code class="java spaces"> <code class="java plain">user.setAge(<code class="java value">42<code class="java plain">); <code class="java spaces"> <code class="java plain">user.setCity(<code class="java string">"NewYorkXXX"<code class="java plain">); <code class="java spaces"> <code class="java plain">session.save(user); <code class="java spaces"> <code class="java spaces"> <code class="java plain">transaction.commit(); <code class="java spaces"> <code class="java plain">session.close(); <code class="java spaces"> <code class="java plain">}

7)主键生成策略:复合主键:

(1)编写POJO类 Person.java:

1 2 3 4 5 6 7 8 9 10 11 package <code class="java plain"> cn.cvu.domain; <code class="java keyword">import <code class="java plain"> java.io.Serializable; <code class="java comments">//务必事先序列化接口 <code class="java keyword">public <code class="java keyword"> class <code class="java plain"> Person <code class="java keyword">implements <code class="java plain"> Serializable { <code class="java spaces"> <code class="java keyword">private <code class="java plain"> String firstName; <code class="java comments">//对应表单的复合主键 <code class="java spaces"> <code class="java keyword">private <code class="java plain"> String secondName; <code class="java comments">//对应表单的复合主键 <code class="java spaces"> <code class="java keyword">private <code class="java plain"> String address; <code class="java spaces"> <code class="java spaces"> <code class="java comments">//get/set <code class="java spaces"> <code class="java comments">//toString <code class="java plain">}

(2)配置POJO.hbm.xml:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <code class="xml keyword">xml <code class="xml color1"> version<code class="xml plain">=<code class="xml string">"1.0" <code class="xml color1"> encoding<code class="xml plain">=<code class="xml string">"UTF-8"<code class="xml plain">?> <code class="xml plain">DOCTYPE <code class="xml plain"> hibernate-mapping PUBLIC <code class="xml spaces"> <code class="xml plain">"-//Hibernate/Hibernate Mapping DTD 3.0//EN" <code class="xml spaces"> <code class="xml plain">"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <code class="xml plain">hibernate-mapping <code class="xml color1"> package<code class="xml plain">=<code class="xml string">"cn.cvu.domain"<code class="xml plain">> <code class="xml spaces"> <code class="xml plain">class <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"Person" <code class="xml color1"> table<code class="xml plain">=<code class="xml string">"table_person" <code class="xml color1"> catalog<code class="xml plain">=<code class="xml string">"db_hibernate"<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- 复合id --> <code class="xml spaces"> <code class="xml plain">composite-id<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- 主键列 name="POJO属性" column="表单列名" --> <code class="xml spaces"> <code class="xml plain">key-property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"firstName" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"nameFirst"<code class="xml plain">><code class="xml keyword">key-property<code class="xml plain">> <code class="xml spaces"> <code class="xml plain">key-property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"secondName" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"nameFirst"<code class="xml plain">><code class="xml keyword">key-property<code class="xml plain">> <code class="xml spaces"> <code class="xml plain"><code class="xml keyword">composite-id<code class="xml plain">> <code class="xml spaces"> <code class="xml comments"><!-- 普通列 name="POJO属性" column="表单列名" type="数据类型" --> <code class="xml spaces"> <code class="xml plain">property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"address" <code class="xml color1"> column<code class="xml plain">=<code class="xml string">"addr" <code class="xml color1"> type<code class="xml plain">=<code class="xml string">"string"<code class="xml plain">><code class="xml keyword">property<code class="xml plain">> <code class="xml spaces"> <code class="xml plain"><code class="xml keyword">class<code class="xml plain">> <code class="xml plain"><code class="xml keyword">hibernate-mapping<code class="xml plain">>

(3)配置hibernate.cfg.xml,加载Person.hbm.xml文件:

\

(4)操作类的方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public <code class="java keyword"> void <code class="java plain"> testInsert() { <code class="java spaces"> <code class="java plain">Configuration configuration = <code class="java keyword">new <code class="java plain"> Configuration().configure(); <code class="java spaces"> <code class="java plain">SessionFactory sessionFactory = configuration.buildSessionFactory(); <code class="java spaces"> <code class="java plain">Session session = sessionFactory.openSession(); <code class="java spaces"> <code class="java plain">Transaction transaction = session.beginTransaction(); <code class="java spaces"> <code class="java spaces"> <code class="java plain">Person person = <code class="java keyword">new <code class="java plain"> Person(); <code class="java spaces"> <code class="java plain">person.setFirstName(<code class="java string">"C"<code class="java plain">); <code class="java spaces"> <code class="java plain">person.setSecondName(<code class="java string">"Vigiles"<code class="java plain">); <code class="java spaces"> <code class="java plain">person.setAddress(<code class="java string">"Beijng"<code class="java plain">); <code class="java spaces"> <code class="java plain">session.save(person); <code class="java spaces"> <code class="java spaces"> <code class="java plain">transaction.commit(); <code class="java spaces"> <code class="java plain">session.close(); <code class="java spaces"> <code class="java plain">sessionFactory.close(); <code class="java spaces"> <code class="java plain">}

(5)结果:

\

INFO: HHH000262: Table not found: tb_person
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000388: Unsuccessful: create table db_hibernate.tb_person (namef varchar(255) not null, names varchar(255) not null, age integer, city varchar(255), primary key (namef, names)) type=InnoDB
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7
2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
\

1 2 3 <!-- 方言-指定数据库为5.1版本之后的SQL语言 --> <code class="xml spaces"> <code class="xml plain">property <code class="xml color1"> name<code class="xml plain">=<code class="xml string">"hibernate.dialect"<code class="xml plain">> <code class="xml plain">  org.hibernate.dialect.MySQL5InnoDBDialect<code class="xml keyword">property<code class="xml plain">>

-end
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1419
52
Laravel 教程
1312
25
PHP教程
1262
29
C# 教程
1235
24
《火影忍者:忍者新世代》克服柔弱的自己,绽放的白色花朵——日向雏田生日快乐! 《火影忍者:忍者新世代》克服柔弱的自己,绽放的白色花朵——日向雏田生日快乐! Dec 29, 2023 pm 10:48 PM

无论是在忍者的世界里,还是《火影忍者:忍者新世代》里,她都是大筒木羽村的后代之一,是火之国·木叶忍村的忍者,是木叶豪门日向一族的宗家日向日足的嫡长女,拥有血继限界“白眼”,她便是个性格有些柔弱,但依然勇敢绽放的白色花朵——日向雏田!雏田本是被家族寄予厚望的继承人,却因为自己不擅长使用日向家流传的“柔拳”,并且在一次比试较量中输给了小自己五岁的妹妹日向花火,让雏田的父亲日向日足对其非常失望。之后雏田伤心的跑出家里,并被三个男孩子欺负。这时漩涡鸣人出现并替雏田解围,但鸣人却被三个男孩子暴揍一顿。随后

i7 3770的最佳搭配显卡是什么? i7 3770的最佳搭配显卡是什么? Dec 29, 2023 am 09:12 AM

酷睿i73770配什么显卡好啊RTX3070是一款非常强大的显卡,它具有出色的性能和先进的技术。无论是玩游戏、渲染图形还是进行机器学习,RTX3070都能轻松应对。它采用了NVIDIA的Ampere架构,拥有5888个CUDA核心和8GB的GDDR6内存,能够提供流畅的游戏体验和高品质的图形效果。RTX3070还支持光线追踪技术,能够呈现逼真的光影效果。总之,RTX3070是一款强大而先进的显卡,适合那些追求高性能和高品质的用户使用。RTX3070是一款NVIDIA系列的显卡。采用第2代NVID

使用PHP的json_encode()函数将数组或对象转换为JSON字符串 使用PHP的json_encode()函数将数组或对象转换为JSON字符串 Nov 03, 2023 pm 03:30 PM

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,已经成为Web应用程序之间数据交换的常用格式。PHP的json_encode()函数可以将数组或对象转换为JSON字符串。本文将介绍如何使用PHP的json_encode()函数,包括语法、参数、返回值以及具体的示例。语法json_encode()函数的语法如下:st

Vue中如何实现数据的缓存和持久化 Vue中如何实现数据的缓存和持久化 Oct 15, 2023 pm 01:06 PM

Vue中如何实现数据的缓存和持久化在Vue中,数据的缓存和持久化是一个常见的需求。缓存数据可以提高应用的性能,而持久化数据可以让用户在刷新页面或重新打开应用后依然能够看到之前保存的数据。下面将介绍如何通过一些常用的方法实现数据的缓存和持久化。使用Vuex实现数据缓存Vuex是Vue的官方状态管理库,它可以用来集中管理应用的所有组件的状态。我们可以利用Vuex

i73770配rx5600xt(i73770配rx5600xt) i73770配rx5600xt(i73770配rx5600xt) Jan 04, 2024 am 11:26 AM

i73770配rx5600xt因为RX5600XT显卡与R53600CPU配套,所以我们选择了i7-3770。RX5600XT显卡的评测结果如下:RX5600XT显卡是一款性能出色的显卡,经过测试表现非常出色。它采用了AMD的RDNA架构,拥有6GBGDDR6显存和192-bit内存接口,支持PCIe4.0总线,具备卓越的游戏性能。在各项测试中,RX5600XT显卡都表现出色。在高分辨率下,它能够提供流畅的游戏体验,并且在大多数游戏中都能够保持60帧以上的帧率。在最新的游戏中,它也能够提供很好的

如何将 MySQL 查询结果数组转换为对象? 如何将 MySQL 查询结果数组转换为对象? Apr 29, 2024 pm 01:09 PM

将MySQL查询结果数组转换为对象的方法如下:创建一个空对象数组。循环结果数组并为每一行创建一个新的对象。使用foreach循环将每一行的键值对赋给新对象的相应属性。将新对象添加到对象数组中。关闭数据库连接。

PHP 函数如何返回对象? PHP 函数如何返回对象? Apr 10, 2024 pm 03:18 PM

PHP函数可以通过使用return语句后跟对象实例来返回对象,从而将数据封装到自定义结构中。语法:functionget_object():object{}。这允许创建具有自定义属性和方法的对象,并以对象的形式处理数据。

Java JPA 面试题精选:检验你的持久化框架掌握程度 Java JPA 面试题精选:检验你的持久化框架掌握程度 Feb 19, 2024 pm 09:12 PM

什么是JPA?它与JDBC有什么区别?JPA(JavaPersistenceapi)是一个用于对象关系映射(ORM)的标准接口,它允许Java开发者使用熟悉的Java对象来操作数据库,而无需编写直接针对数据库的sql查询。而JDBC(JavaDatabaseConnectivity)是Java用于连接数据库的标准API,它需要开发者使用SQL语句来操作数据库。JPA将JDBC封装起来,为对象-关系映射提供了更方便、更高级别的API,简化了数据访问操作。在JPA中,什么是实体(Entity)?实体

See all articles