在说Hibernate映射前,我们先来了解下对象关系映射 ORM。
ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发者就能够把对数据库的操作转化为对这些对象的操作。
我们来看一张图
通过该图。我们能够看出业务实体,在数据库中表现为关系数据,而在内存中表现为对象。应用程序处理对象非常easy,可是非常难处理关系数据。ORM做到了关系数据和对象数据之间的映射。能够通过映射关系自己主动产生SQL语句。在业务逻辑层和数据层之间充当桥梁。
 
详细看操作
1映射实体类
//默认空构造函数的重要性
public class User {
	public User() {
		// TODO Auto-generated constructor stub
	}
	
	public User(String id,String name){
		this.id=id;
		this.name=name;
		
	}
	private String id;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public Date getExprieTime() {
		return exprieTime;
	}
	public void setExprieTime(Date exprieTime) {
		this.exprieTime = exprieTime;
	}
	private String name;
	private String password;
	private Date createTime;
	private Date exprieTime;
}
实体类的设计原则:
* 实现无參的默认的构造函数
* 提供一个标识
*建议不要使用final修饰实体类(由于採用load延时载入数据的时候会继承实体类生成代理对象)
*建议为实体类生成getter和setter方法(假设不使用。须要用属性field标识)
2映射文件User.hbm.xml
<?xml version="1.0"?
> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--1、class和table的映射。name属性是实体名。table属性是表名(table可省略,则name即是映射的表名)--> <class name="com.bjpowernode.hibernate.User"> <!-2、主键映射,name属性是实体类的标识符属性,相应table的主键。即用column表示(column相同可省略)--> <id name="id" access="field"> <!--主键生成器,class属性表示生成策略,依据不同的需求选择--> <generator class="uuid"/> </id> <!--3、其它属性的映射 property--> <property name="name" length="40" unique="true" /> <property name="password"/> <property name="createTime"/> <property name="exprieTime"/> <filter name="testFiltere" condition="id < :myid"></filter> </class> </hibernate-mapping>
3hibernate.cfg.xml配置文件
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernast_test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">hanhan</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--打印sql--> <property name="hibernate.show_sql">true</property> <!--在没有表的时候。创建sessionfactroy 时。就会去创建表(update的方式,不删除原有数据)--> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/> </session-factory> </hibernate-configuration>
手动:Assigned
Hibernate主动:uuid
数据库交互:
须要和数据库交互以生成id的:guid、identity、sequence、native、foreign
说明:须要和数据库交互生成。须要经过一次查询才干生成
Guid,identity:MySQL,SQLserver的生成方式
sequence:Oracle,db2的生成方式。自增序列
native:identity+sequence,跨平台
foreign:仅仅适用基于共享主键的一对一关联映射的时候使用。即一个对象的主键是參照的还有一张表的主键生成的。
Hibernate的基本映射:重点是对主键生成策略的认识,依据不同数据库选择不同的方式,重要理解。
原文:http://www.cnblogs.com/ljbguanli/p/6855493.html