1. 下载需要的jar文件
- antlr-xxx.jar 语法分析器
- commons-collections-xx.jar 各种集合类和集合工具类的封装
- dom4j-xxx.jar XML的读写
- javassist-xxx.jar 分析、编辑和创建Java字节码的类库
- jta-xxx.jar Java事务API
- slf4j-api-xx.jar 日志输出
- hibernate-jpa-xx-api-xx-Final.jar 提供对JPA(java持久化API)规范的支持
2. 部署jar文件
3. 创建Hibernate配置文件hibernate.cfg.xml
- Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种特性。
- connection.url:表示数据库URL。jdbc:oracle:thin:@10.0.0.176:1521:ocal是Orcle数据库的URL。其中jdbc:orcle:thin:@是固定写法,10.0.0.176是IP地址,1521是端口号,orcl是数据库实例名。
- connection.username:表示数据库用户名
- connection.password:表示数据库密码
- connection.driver_class:表示数据库驱动。orcle.jdbc.driver.OracleDriver是Oracle数据库的驱动类。
- dialect:用于配置Hibernate使用的数据库类型。Hibernate支持几乎所有的主流数据库。
- current_session_context_class:指定org.hibernate.context.CurrentSessionContext.currentSession()方法得到的Session有谁来跟踪管理。thread指定Session由当前执行的线程来跟踪管理。
- show_sql:如果设置为true,则程序运行时在控制台输出sql语句
- formate_sql:如果设置为true,则程序运行时在控制台输出格式化后的sql语句。
4.创建持久化类和映射文件
-
持久化类是指其实力状态需要被Hibernate持久化到数据库中的类。
-
Hibernate要求持久化类必须具有一个无参数的构造方法。
-
在Hibernate中,这个id属性被称为对象标识符(Object Identifier,OID)
-
class:定义一个持久化类的映射信息,常用属性如下:
name:表示持久化类的全限定名。
table:表示持久化类的OID和表的主键的映射 -
id:表示持久化类的OID和表的主键的映射。常用属性如下:
name表示持久化类属性的名称,和属性访问器相匹配。
type表示持久化类属性的类型
Colum表示持久化类属性对应的数据库表字段的名称,也可在子元素colum中指定
generator:id元素的子元素,用于指定主键的生成策略。常用属性如下:
class属性用来指定具体主键生成策略。
param元素用来传递参数。常用的主键生成策略:
assigned:主键由应用程序负责生成,无须Hibernate参数。
increament:对类型为long、short或int的主键,以主动增长的方式生成主键的值。主键按数值顺序递增,增量为1.
identity:对于支持标识列的数据库,可使用该主键生成自动增长主键,但要在数据库中将相应的主键字段设置为标识列。
sqquence:对于支持序列的数据库,可使用该主键生成策略生成自动增长主键,通过子元素param可传入数据库中序列的名称。
native:由Hibernate根据底层数据库自行判断采用何种主键生成策略,即由使用的数据库生成主键的值。 -
property:定义持久化类中的属性和数据库表中的字段的对应关系,常用的属性如下:
name表示持久化类属性的名称,和属性的访问器相匹配。
type表示持久化类属性的类型。
column表示持久化类属性对应的数据库表字段的名称,也可在子元素cloum中指定。
- cloumn元素:用于指定其父元素代表的持久化类属性所对应的数据库表中的字段。
name表示字段的名称
length表示字段的长度
not-null 设定是否不能为null ,设置为true表示不能
相关代码:
hibernate.cfg.xml文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库URL-->
<property name="connection.url">
jdbc:oracle:thin:@127.0.0.1:1521:orcl
</property>
<!--数据库用户-->
<property name="connection.username">
scott
</property>
<!--数据库用户密码-->
<property name="connection.password">
root
</property>
<!--数据库JDBC加载-->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<!--<!–每个数据库都有其对应的方言(Dialect)以匹配其平台特性–>
<property name="dialect">
org.hibernate.dialect.Oracle10gDialect
</property>-->
<!--指定当前session范围和上下文-->
<property name="current_session_context_class">thread</property>
<!--是否将运行期生成的sql输出到日志以供调试-->
<property name="show_sql">
true
</property>
<!--是否格式化sql-->
<property name="format_sql">true</property>
<!--映射文件配置,注意文件名必须包含其相对于classpath的全路径-->
<!-- <mapping resource="entity/Dept.hbm.xml"/>
<mapping resource="entity/SparePartsInformation.hbm.xml"/>
<mapping resource="entity/Emp.hbm.xml"/>
<mapping resource="entity/Project.hbm.xml"/>-->
<!--加载实体类-->
<mapping class="entity.Emp"></mapping>
<mapping class="entity.Dept"/>
<!-- DB schema will be updated if needed-->
<!-- <property name="hbm2ddl.auto">update</property>-->
</session-factory>
</hibernate-configuration>
持久化类:
package entity;
import java.util.HashSet;
import java.util.Set;
public class Project {
private Integer proId;
private String proName;
private Set<Emp> emps=new HashSet<Emp>();
public Integer getProId() {
return proId;
}
public void setProId(Integer proId) {
this.proId = proId;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public Set<Emp> getEmps() {
return emps;
}
public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
}
映射文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="entity.Project" table="PROJECT">
<!--映射主键字段-->
<id name="proId" type="java.lang.Integer" column="PRO_ID">
<!--主键生成器:手工指派主键值-->
<generator class="increment"></generator>
</id>
<property name="proName" type="java.lang.String">
<column name="PRO_NAME"></column>
</property>
<!--映射对象属性-->
<set name="emps" table="PROEMP">
<key column="PROID"/>
<many-to-many class="entity.Emp" column="EMPID"/>
</set>
</class>
</hibernate-mapping>