Hibernate.cfg.xml注解和*.hbm.xml配置文件

本文详细介绍了Hibernate的配置过程,包括核心配置文件hibernate.cfg.xml和实体类映射文件*.hbm.xml的设置。涵盖数据库连接信息、方言配置、SQL打印等关键配置项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate.cfg.xml配置文件,是hibernate的主要配置文件,里面包含了,数据库连接信息配置,数据库方言配置,sql语句打印配置,sql语句格式化配置,数据库更新方式配置,加载实体类配置文件等等,

hibernate的另一个很重要的配置文件就是实体类对应的配置文件*.hbm.xml配置文件,里面配置了实体类和数据库表对应的信息,包含实体类的类名、主键生成方式、属性、类型以及数据库的表名、列名、主键自增方式等等......


下面我把几个常用的配置,以及注解展示出来,方便大家查看:

写了一个cfg的项目,名称是hibernate_cfg

架构如下:



hibernate.cfg中的pojo和test包下的代码,可以参见《Hibernate环境搭建和配置


其中hibernate.cfg.xml配置文件中,常见的配置如下:

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

<hibernate-configuration>
	<session-factory>
		<!-- 配置数据库连接信息 -->
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="connection.url">jdbc:mysql:///hibernate4</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<!-- 数据库方言 -->
		<property name="hibernate.dialect">
			org.hibernate.dialect.MySQL5Dialect
		</property>
		<!-- 是否打印sql语句 -->
		<property name="show_sql">true</property>
		<!-- 格式化sql语句 -->
		<property name="format_sql">true</property>
		<!-- 数据库更新方式: 
		 1、create:每次更新都先把原有数据库表删除,然后创建该表;
		 2、create-drop:使用create-drop时,在显示关闭SessionFacroty时(sessionFactory.close()),将drop掉数据库Schema(表) 
		 3、validate:检测;
		 4、update(常用):如果表不存在则创建,如果存在就不创建
		 -->
		<property name="hbm2ddl.auto">update</property>

		<!-- 加载User实体类对应的配置文件 -->
		<mapping resource="com/robert/pojo/User.hbm.xml" />

	</session-factory>
</hibernate-configuration>



实体类User代码如下:

package com.robert.pojo;

public class User {

	private int id ;
	private String name ;
	private String pwd ;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
}



和实体类User对应的User.hbm.xml配置文件的内容和详解如下:

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

<!-- This mapping demonstrates content-based discrimination for the table-per-hierarchy 
	mapping strategy, using a formula discriminator. -->

<!-- package:声明pojo类所在的包,如果不写,那么在class中的name里需要指明pojo类所在的包;
     schema:指数据库的模式,一个模式下可以有多张表。
 -->
<hibernate-mapping package="com.robert.pojo">

	<!-- class:指映射一个pojo类,
	         1)提供了公共的无参构造方法,通过反射产生对象。
	         2)属性用private修饰,并且生成对应的set/get方法。
	         3)类不能用final来修饰,hibernate会产生代理类(通过cglib)。
	     name:表示pojo类名;
	     table:表示pojo类对应的数据库中的表名;如果不写,默认是类名。
	 -->
	<class name="User" table="user">
        <!-- 
        	id:表示实体类的标识(OID),对应数据库表的主键;
        	name:指实体类的标识属性名;
        	column:表示对应数据库表的列名,如果不写,则和属性名一致;
        	length:表示数据库表中对应数据类型的长度,如果不写,有默认长度;
        	type:表示类型,如果不写,hibernate会找对应pojo类的属性类型;
         -->
		<id name="id" column="id">
			<!-- 主键生成策略
				 increment:用于为long,short或者int类型生成唯一标识,
				                            只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。
				                            (可以使用的数据库是:mysql,ms sql)。
				 identity:对DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL的内置标识字段提供,
				                          返回的标识符是long, short, 或者int类型的。
				 sequence:在支持序列的数据库中使用,使用数据库是oracle。 
				                           例子:
				          <generator class="sequence" >
				                                         注释:param中的值是数据库sequence的名称 
				                <param name="sequence">user_seq</param>
			              </generator>
				 uuid:	UUID被编码为一个32位的16进制数字的字符串;
				 native:根据底层的数据库能力选择,identity,sequence或者hilo中的一个;
				 assigned:自己指定主键。
			 -->
			<generator class="native" />
		</id>
		
		<!-- 
			实体类的属性
			name:指明pojo类属性名称(区分大小写);
			column:实体类属性对应的数据库表列名;
		 -->
		<property name="name" >
			<column name="name"></column>
		</property>
		<property name="pwd" />

	</class>

</hibernate-mapping>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值