您的位置:首页 > 其它

Hibernate配置详解

2016-06-15 19:58 239 查看

一、简单介绍

Hibernate是一种对JDBC做了轻量级封装的对象---关系映射工具,所谓轻量级封装,是指Hibernate并没有完全封装JDBC,Java应用即可以通过Hibernate
API访问数据库,还可以绕过Hibernate API,直接通过JDBC
API来访问数据库。

1、
Hibernate官网下载地址http://www.hibernate.org。现在最新的是: hibernate-release-4.1.7.Final.zip

解压后的目录结构:

Documentation:该文件夹下是开发帮助文档

Lib:该文件夹是开发使用的库,其中该文件夹下面的required目录是开发时必须导入的JAR文件;

Project:该文件夹是项目源码文件

2、持久化JAVA类必须遵循的原则

A、为类的持久化字段声明访问方法(get/set),Hibernate对JavaBeans风格的属性实行持久化。

B、实现一个默认的构造方法,这样的话Hibernate就可以使用Constructor.newInstance()方法来实例化对象。

C、如果是集合类型的属性,它的类型必须定义为集合的接口,例如:List、Set

D、提供一个标识属性(Identifier property),如果没有该属性,一些功能不起作用,比如:级联更新,session.saveOrUpdate()。

二、Hibernate开发步骤

首先项目中应该把
required目录中的所有jar包和要连接的数据库的驱动jar包构建到Build Path中!!!

1、编写实体类 UserInfor.java

切记:实体类中的属性名有二个以上(含两个)的小写字母开头!!!!

package com.entity;

import java.util.Date;

public class UserInfor {

private int userId;

private String userName;

private int userAge;

public UserInfor() {

// 一定要有一个无参的构造方法,因为Hibernate都是根据他生成对象的

}

public UserInfor(int userid)

{// 最好要有一个含主键的构造方法,因为在Hibernate中便于查询

this.userId = userid;

}

//....下面都是get***()set***()封装属性

}

2、创建实体类的映射文件***.hbm.xml(与实体类同包,并且名字可以自定义,这里是:
[b]userInfor.hbm.xml

可以在上面解压后的Project文件夹中搜索[/b][b]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
package="com.entity">

<class name="UserInfor"
table="Wuser" >

<id name="userId" >

<generator class="native"/>

</id>

<property name="userName"/>

<property name="userAge"/>

<property name="userBirthday"/>

</class>

</hibernate-mapping> ####:说明:[/b]具体Hibernate个元素详解请看:

http://chen25362936.blog.163.com/blog/static/2565547420101113112752675/
根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性 package:指定一个包前缀,即该xml文件的位置

<class>定义类:根元素的子元素,用以定义一个持久化类与数据表的映射关系,如下是该元素包含的一些可选的属性--》name:持久化类(或者接口)的Java全限定名,如果这个属性不存在,则Hibernate将假定这是一个非POJO的实体映射;table:对应数据库表名

<id>定义主键:Hibernate使用OID(对象标识符)来标识对象的唯一性,OID是关系数据库中主键在Java对象模型中的等价物,在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系
1)name:持久化类的标识属性的名字

2)column:数据库表的主键这段的名字

<generator>设置主键生成方式:该元素的作用是指定主键的生成器,通过一个class属性指定生成器对应的类。(通常与<id>元素结合使用),--native是Hibernate主键生成器的实现算法之一,由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

<property>定义属性:用于持久化类的属性与数据库表字段之间的映射,包含如下属性:

1)name:持久化类的属性名,以小写字母开头

2)column:数据库表的字段名

3、编写Hibernate的配置文件hibernate.cfg.xml(这里的名字是固定的)

Hibernate配置的两种方法:

属性文件:hibernate.properties

调用代码:Configuration cfg=new Configuration();

XML文件:hibernate.cfg.xml

调用代码: Configuration cfg=new Configuration().configure();


关于 hibernate.cfg.xml的样例可以到上面解压的Project/etc/下查找,在该样例下修改即可!!!!该xml文件中要设置的属性名和值可以在Project/etc/hibernate.properties文件中查找到!!!

<!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="show_sql">true</property><!--控制台中显示sql语句-->

<property name="format_sql">true</property> <!--格式化sql语句-->

<!-- 通过getCurrentSession创建的session会绑定到当前线程 -->

<property name="current_session_context_class">thread</property>

<!--数据库连接要使用的参数-->

<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<property name="hibernate.connection.username">bam1</property>

<property name="hibernate.connection.password">bam1</property>

<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.3.252:1521:orcl</property>

<!--设置数据库定义语言为:更新数据库操作-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!--如果使用JUnit进行测试:就要加上下面这句话-->



<property name="javax.persistence.validation.mode">none</property>

<!--加载映射文件:映射文件全路径###并且一定要定义在下方-->

<mapping resource="com/entity/Person.hbm.xml"/>

</session-factory>

</hibernate-configuration>

####:说明:(关于Hibernate配置文件详解请看:http://www.24xuexi.com/w/2012-02-23/98592.html)

4、测试类中操作

public void add()

{



//第一步:读取Hibernate的配置文件 hibernamte.cfg.xml文件

Configurationcon=new Configuration().configure();

//第二步:创建服务注册构建器对象,通过配置对象中加载所有的配置信息

ServiceRegistryBuilderregbulider=newServiceRegistryBuilder().applySettings(con.getProperties());

//创建注册服务

ServiceRegistryreg=regbulider.buildServiceRegistry();

//第三步:创建会话工厂

SessionFactorysessionFactory=con.buildSessionFactory(reg);

//第四步:创建数据操作会话

Sessionsession=sessionFactory.openSession();


//创建对象

*/

UserInfo user=new UserInfor();

user.setUserAge(20);

user.setUserBirthday(new Date());

user.setUserName("张三");

/*

//创建事物

Transactiontran=session.beginTransaction();


//保存数据

session.save(user);//update(object):修改;get(class,Serializable ):根据主键查询[b]//(查询时可以不使用事物)[/b]

//提交事物

tran.commit();

//关闭对话

session.close();


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: