Hibernate中hibernate.cfg.xml文件和Xxx.hbm.xml文件的详细解释(二)上

简介: Hibernate中hibernate.cfg.xml文件和Xxx.hbm.xml文件的详细解释(二)

Hibernate项目中,有两个特别重要的约束文件,hibernate.cfg.xml和Xxx.hbm.xml文件( 如User.hbm.xml,Person.hbm.xml文件)。


其中hiberante.cfg.xml是Hiberante的配置文件,cfg为config的简写。这个文件必须要放在src目录下面。


名称必须是hibernate.cfg.xml, 注意区分大小写。


接下来,老蝴蝶以上一章节的 User.hbm.xml 和 hibernate.cfg.xml 进行分析。


一. User.hbm.xml 约束文件


User.hibernate.xml约束文件是实体约束,最好要与其相对应的Java实体类保持一致。


如实体类为User,在pojo包下。则xml约束文件也要在pojo包下。


实体类名称为User,则xml的名称为User.hbm.xml。 hibernate.xml是Hibernate本身自己定义标记的。


一.一 dtd约束


<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


一.二 根节点


User.hibernate.xml约束的根节点为: hibernate-mapping。 其中有一个主要的节点, package。


package表示包,指出类所在的路径为 com.yjl.pojo。


如果不指定这一个,那么下面所有的类都要用全限定名称,即class=“com.yjl.pojo.User”, 而不能用class=“User” 即可。


<hibernate-mapping package="com.yjl.pojo" >
</hibernate-mapping>


一.三 类节点


类节点为class. 里面有三个主要的属性。 name, 表示的为哪个类,即要映射的是哪一个类,里面填写的是类名。


如果在hibernate-mapping节点中没有指定package,那么这个时候要写入全限定名称,即name=“com.yjl.pojo.User”,


如果指定了package,那么这里只需要写入name=“User” 即可。 package与name的值共同构成了全限定名称。


table,表示生成后的表名。Hiberante可以自动建表,table指定建立表时的名称。 lazy,表示懒加载。默认为true.


懒加载的具体使用,老蝴蝶后面会讲。


<class name="User" table="user" lazy="true">
</class>


一.四 id属性标签


在每一个POJO中,都要有一个具体的标识符,这个标识符可以唯一确定对象,也就是数据库中的主键。


这个主键通常使用的是虚拟主键,不是真实的主键。虚拟主键,通常没有什么意义,只是表示不重复。


如学生表中,学生的学号是不能重复的,但是却最好不要将其当成主键。(学号表示真实主键),而应该设置一个虚拟的主键,为id. 为自动增长的。 这个id就表示虚拟主键。


主键生成策略有: 适用于自增长的increment。 用于int,long,short三种类型。 适用于Oracle数据库的序列 sequence.


还有根据底层数据库选择的 native, 不可重复的uuid。


20200615095814825.png


常见使用的是, native和uuid。


虚拟主键,自增长的用native. 常用于数字,这个数字只是起一个不重复的作用。 uuid生成唯一标识的,这个标识通常是有用的,复杂的,如订单的编号等,商品的编号等。


主键生成策略为native。


节点为id, name表示的是,类中的属性值。 column表示的是数据表中的字段值。 column可以省略,如果省略的话,默认与name中的值相同。


length表示长度,指定table中字段的长度. type 表示类型,将Java中的类型与数据库中的类型进行一一对应起来。


可以写Java中的全类型,如type=“java.lang.Integer” ,type=“java.lang.String” 也可以写成简写形式,


type=“int” ,type=“string”。 generator 指定主键的生成策略, class指定名称,为"native"。


<id name="id" column="id" length="11" type="int">
  <generator class="native"></generator>
</id>


也可以为这个字段添加相应的注释,即在数据库中对每个字段添加相应的备注。 如果添加备注,则需要这样写,此时就不能将column直接跟在name后面了,此时column必须放在generator的前面。 column中的name表示的是数据库中的字段值。


                <id name="id" length="11" type="int">
      <column name="id">
        <comment>这是一个虚拟的主键</comment>
      </column>
      <generator class="native"></generator>  
    </id>


生成后的表为:


20200615095827173.png


主键生成策略为UUID


如果主键生成策略是UUID的话,那么id此时就不能是Integer或者int类型了,就必须是String类型了。


private String uid, 生成uid的setter和getter方法。 然后在generator中令class=“uuid” 即可。


                <id name="uid" length="100" type="string">
      <column name="uid">
        <comment>这是一个uuid形式的主键</comment>
      </column>
      <generator class="uuid"></generator>  
    </id>


在保存对象时,不需要设置user.setUid() 的值,仍然与以前一样,不用管uid的值,系统会自动生成一个UUID的值,然后将其放置到uid中。


一.五 普通属性 property


在一个类中只有一个唯一标识符id, 其余的均是普通属性,用property节点。


property中有常见的name, 表示类中的属性值。 column表示数据表中字段值,length表示长度,type表示类型。 其中还有表示约束的值, not-null=“true” ,表示不为空的约束。not-null=“false”,表示可以为空。 unique=“true” 表示唯一约束。 unique=“false”,表示不是唯一的,可以重复的。


<property name="password" column="password" length="20" not-null="true" 
    type="string" unique="false"></property>


如果为普通属性添加备注的话,与id相同:


 <property name="password" length="20" not-null="true" type="string" unique="false">
  <column name="password">
    <comment>密码</comment>
  </column>
</property>


一.六 其余属性


还有其他的属性,如array, set,one-to-one,catch 等,这些属性到后面再做介绍。

相关文章
|
1月前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
35 1
|
1天前
|
SQL JSON 数据处理
实时计算 Flink版产品使用问题之把hdfs集群里的core-site.xml hdfs.xml两个文件放到flink/conf/目录下,启动集群说找不到hdfs,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4天前
|
XML Java 数据库连接
idea 从mapper方法直接点进xml文件的解决方法
idea 从mapper方法直接点进xml文件的解决方法
12 2
|
28天前
|
XML 数据格式 Python
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
|
1月前
|
Android开发
android string.xml文件中的整型和string型代替
android string.xml文件中的整型和string型代替
19 0
|
1月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
1月前
|
SQL 缓存 Java
Java一分钟之-Hibernate:ORM框架实践
【5月更文挑战第15天】Hibernate是Java的ORM框架,简化数据库操作。本文列举并解决了一些常见问题: 1. 配置SessionFactory,检查数据库连接和JDBC驱动。 2. 实体类需标记主键,属性映射应匹配数据库列。 3. 使用事务管理Session,记得关闭。 4. CRUD操作时注意对象状态和查询结果转换。 5. 使用正确HQL语法,防止SQL注入。 6. 根据需求配置缓存。 7. 懒加载需在事务内处理,避免`LazyInitializationException`。理解和避免这些问题能提升开发效率。
41 0
|
1月前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
1月前
|
SQL Java 关系型数据库
数据库访问:什么是Hibernate框架?
【4月更文挑战第15天】Hibernate是开源ORM框架,将Java对象与数据库表映射,简化对象-关系映射,提升开发效率和性能。它自动化处理数据操作,支持多种数据库,自动生成SQL,提供配置选项和高级特性,减少手动SQL编写,便于切换数据库。
34 2
|
11月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
139 0