搭建Hibernate环境

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>
        <!--&lt;!&ndash;每个数据库都有其对应的方言(Dialect)以匹配其平台特性&ndash;&gt;
        <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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值