天天看点

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

hibernate中有两个常见的配置文件hibernate.cfg.xml和*.hbm.xml

下面分别详细介绍下这两个配置文件

一、hibernate.cfg.xml配置文件内容和详解

<hibernate-configuration>
<session-factory>
	<!-- 配置数据库连接信息 -->
	<!-- 数据库驱动 -->
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<!-- url -->
	<property name="connection.url">jdbc:mysql:///hibernatetest</property>
	<property name="connection.username">root</property>
	<property name="connection.password">root</property>
	<!-- 数据库方言 -->
	<property name="dialect">
		org.hibernate.dialect.MySQL5Dialect
	</property>
	<!-- 是否打印sql语句 -->
	<property name="show_sql">true</property>
	<!-- 格式化sql语句 -->
	<property name="format_sql">true</property>
	<!-- 数据库更新方式:
		create:每次执行都先将原有的数据表删除,然后创建该表
		create-drop:使用create-drop时,在显示关闭SessionFactory时,将drop掉数据库schema(表)
		validate:检测
		update:如果表不存在则创建,有就不用创建
	 -->
	 <property name="hbm2ddl.auto">update</property>
	<!-- 映射文件 -->
	<mapping resource="com/test/pojo/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
           

二、User实体类

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配置文件内容和详解

<!-- package声明pojo类所在的包,如果不写那么在class中需要指明pojo类所在的包
 	schema指数据库模式, 一个模式下可以有多张表
 -->
<hibernate-mapping package="com.test.pojo">
	<!-- 
	  class:指映射一个pojo类
	    1) 提供了公共的无参构造方法--通过反射产生对象
	    2)属性用private修饰,并且生成对应的get/set方法
	    3)类不能用final 来修饰--hibernate会产生代理类(cglib)
	    4)类需要指明标识
	  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类型生成唯一标识。
		只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用
		
		identity:对DB2,MySQL,SQL Server,Sybase和HypersonicSQL的内置标识字段提供支持。
		返回的标识符为long,short或者int类型的。
		
		sequence:在支持序列的数据库中使用 Orcale
		例:   注:param中的值是数据库sequence的名称
		<generator class="sequence">
		  <param name="sequence">user_seq</param>
		</generator>
		
		uuid: UUID被编码为一个32位16进制数字的字符串
		
		native:根据底层数据库的能力选择identity,sequence或者hilo中的一个
		
		assigned: 自己制定主键
		 -->
		 
			<generator class="native"></generator> 
		</id>
		<!-- 实体类属性 
		name:指明pojo类属性名称(区分大小写)
		column:实体类属性对应的数据库表列名
		-->
		<property name="name">
		<column name="name"></column>
		</property>
		<property name="pwd"/>
	</class>
</hibernate-mapping>
           

继续阅读