最简单的一个hibernate工程

1.   术语和解释

Hibernate是一个持久化框架.

ORM(Object/Relation  Mapping):对象/关系映射

持久化:

狭义的理解,“持久化”仅仅指把对象永久保存到数据库中

广义的理解,“持久化”包括和数据库相关的各种操作:

– 保存:把对象永久保存到数据库中。

– 更新:更新数据库中对象(记录)的状态。

– 删除:从数据库中删除一个对象。

– 查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。

– 加载:根据特定的OID,把一个对象从数据库加载到内存中。

2.   使用Hibernate步骤

2.1   导入jar包

http://download.csdn.net/detail/u010792467/9120991

2.2   jar包解释:

antlr-2.7.6.jar

一个语言转换工具,Hibernate利用它实现 HQL 到 SQL 的转换

hibernate3.jar

Hibernate3.x核心包

hibernate-jpa-2.0-api-1.0.0.Final.jar

Hibernate核心包

commons-collections-3.1.jar

collections Apache 的工具集,用来增强Java对集合的处理能力

javassist-3.12.0.GA.jar

代码生成工具, Hibernate用它在运行时扩展 Java类

dom4j-1.6.1.jar

dom4j XML 解析器

jta-1.1.jar

标准的 JAVA 事务处理接口

mysql-connector-java-5.1.7-bin.jar

Mysql连接jar包

slf4j-api-1.6.1.jar

hibernate使用的一个日志系统

2.3   创建持久化类

1.提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance()来实例化持久化类

2.提供一个标识属性 (identifier property): 通常映射为数据库表的主键字段. 如果没有该属性,一些功能将不起作用,如:

Session.saveOrUpdate()

3.为类的持久化类字段声明访问方法(get/set): Hibernate对

JavaBeans 风格的属性实行持久化。

4. 使用非 final  类: 在运行时生成代理是 Hibernate 的一个重要的功能. 如果持久化类没有实现任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是final 类, 则无法生成 CGLIB 代理.

5. 重写 eqauls 和 hashCode 方法: 如果需要把持久化类的实例放到Set 中(当需要进行关联映射时), 则应该重写这两个方法

  例如:User.java

<span style="font-size:18px;">package com.hibernite.domain;
import java.util.Date;
//User对象
public class Users {
	private Long uid;
	private String uname;
	private int uage;
	private String usex;
	private String uaddr;
	private Date ubirthday;
	
	public Users() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Users( String uname, int uage, String usex, String uaddr, Date ubirthday) {
		super();
		this.uname = uname;
		this.uage = uage;
		this.usex = usex;
		this.uaddr = uaddr;
		this.ubirthday = ubirthday;
	}
	public Long getUid() {
		return uid;
	}
	public void setUid(Long uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getUage() {
		return uage;
	}
	public void setUage(int uage) {
		this.uage = uage;
	}
	public String getUsex() {
		return usex;
	}
	public void setUsex(String usex) {
		this.usex = usex;
	}
	public String getUaddr() {
		return uaddr;
	}
	public void setUaddr(String uaddr) {
		this.uaddr = uaddr;
	}
	public Date getUbirthday() {
		return ubirthday;
	}
	public void setUbirthday(Date ubirthday) {
		this.ubirthday = ubirthday;
	}	
}</span>

1.1   创建对象-关系映射文件

Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射.在运行时 Hibernate将根据这个映射文件来生成各种 SQL 语句。

映射文件的扩展名为 *.hbm.xml

例如:Users.hbm.xml

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<hibernate-mapping package="com.hibernite.domain"><!--映射类所在路径  -->
	<class name="Users" table="users_table" ><!--name为类名,table为数据库对应表名-->
	  <id name="uid" column="uid" ><!--类ID对应数据库id-->
	        <generator class="native" /><!--数据库主键自增方式,其它主键增长方式见下面注释-->
	   </id>
	   <!-- 以下为属性对应数据库字段名称和类型 -->
	    <property name="uname" column="names" type="string"></property>
	    <property name="usex" column="sex" type="string"></property>
	    <property name="uage" column="age"></property>
	    <property name="ubirthday" column="birthday" type="date"></property>
	    <property name="uaddr" column="addr" type="string"></property>	   
	</class>
	</hibernate-mapping></span>

Hibernate的Generator属性有7种class

assigned

用户自定义id

hilo

通过hi/lo算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源

Increment

主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用

identity

采用数据库提供的主键生成机制,适合DB2、SQL Server、MySQL中的主键生成机制。

sequence

采用数据库提供的sequence机制生成主键,适合Oralce中的主键生成机制

native

由Hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。 

foreign

使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。


1.1   创建 Hibernate  配置文件

Hibernate 从其配置文件中读取和数据库连接的有关信息,有两种实现方式,一种是xml,另一种是properties文件

1.1.1第一种xml

例如:hibernate.cfg.xml

<span style="font-size:18px;"><?xml version='1.0' encoding='UTF-8'?>
<!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="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><!--数据库所用的方言  -->
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=UTF-8</property><!-- 配置数据库及所用到的库,和格式 -->
        <property name="connection.username">root</property><!--数据库的用户名称  -->
        <property name="connection.password">数据库密码</property><!-- 数据库的密码 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 数据库的驱动 -->
        <property name="hibernate.format_sql">false</property><!--打印sql格式-->
        <property name="show_sql">true</property><!--打印sql语句  -->
        <property name="hbm2ddl.auto">create</property><!-- 创建表  (第一次启动后需注释掉,不然后续会不停创建表,表内数据会被冲洗掉) -->
        <mapping resource="com/hibernite/domain/Users.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
</span>

:需要修改上面数据库的密码.

1.1.1第二种properties

例如:hibernate.properties

获得sql方言 告诉hibernate按那种方式处理数据库

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

 

加载数据库驱动

 hibernate.connection.driver_class =com.mysql.jdbc.Driver

 

# 加载数据库

hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate

 

# 用户名称

hibernate.connection.username=root

 

# 用户密码

hibernate.connection.password=数据库密码

 

# 输出sql语句

hibernate.show_sql=true

 

# sql输出格式

hibernate.format_sql=true

 

# 创建表(第一次启动后需注释掉,不然后续会不停创建表,表内数据会被冲洗掉)

hibernate.hbm2ddl.auto = create

 


:需要修改上面数据库的密码

1.1   通过 Hibernate API编写访问数据库的代码

测试类:Main.Java

<span style="font-size:18px;">package com.hibernite.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.hibernite.domain.Users;

public class Main {
public static void main(String[] args) throws ParseException {
	//1. 创建一个 Configuration 对象: 该对象封装了 Hibernate 的配置信息, 包括 cfg.xml 文件和 hbm.xml 文件.
//当配置文件为hibernate.cfg.xml时,如下:			
Configuration configuration = new Configuration().configure();
//当配置文件为hibernate.properties时,如下:			
//Configuration configuration = new Configuration()
//configuration.addResource("com/hibernite/domain/Users.hbm.xml");
			//2. 创建 SessionFactory 对象: 该对象对应 Hiberante 配置文件对应的数据库和数据库表
			SessionFactory sessionFactory = configuration.buildSessionFactory();
			
			//3. 创建 Session 对象: Hiberante 应用和数据库的一个连接
			Session session = sessionFactory.openSession();
			
			//4. 打开事务
			Transaction tx = session.beginTransaction();
			
			//5. 执行保存操作
			Date date=new Date();
			SimpleDateFormat sformat = new SimpleDateFormat("yyyy-MM-dd");
			Users user = new Users("张三",25,"男","中国",sformat.parse("1908-08-08"));
			session.save(user);
			
			//6. 提交事务
			tx.commit();
			
			//7. 关闭 Session 
			session.close();
			
			//8. 关闭 SessionFactory
			sessionFactory.close();
		}
}
</span>

1.1   结果

以下是hibernate.cfg.xml执行后结果


以下是hibernate.properties执行后结果


源码工程下载地址

http://download.csdn.net/detail/u010792467/9121023   (可直接导入eclipse运行)

作者:儱剑阿攵
转载请注明链接:http://blog.csdn.net/awenluck/article/details/48596557

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值