zoukankan      html  css  js  c++  java
  • Hibernate入门----配置文件

    一、Hibernate简介

    hibernate是一个开源的,轻量级的,持久成ORM框架。

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的 orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
    使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

    二、实体类和配置文件

    2.1实体类

    2.1.1客户的实体类

    public class Customer {

        private Long cust_id;

        private String cust_name;

        private String cust_source;

      // 联系人的集合:一个客户对应多个联系人linkman

        private Set<LinkMan> linkMans = new HashSet<LinkMan>();

      //提供上述属性的get和set方法, 此处为节省版面而略去

    }

    2.1.2联系人实体类

    public class LinkMan {

        private Long lkm_id;

        private String lkm_name;

        private String lkm_gender;

        private String lkm_phone;

        private String lkm_mobile;

        private String lkm_email;

        private String lkm_qq;

        private String lkm_position;

        private String lkm_memo;

       

        // private Long lkm_cust_id;

        private Customer customer;// 联系人对应的客户的对象

      //生成上述属性的get个set方法,此处为节省版面而忽略没写

    }

    2.2实体类Customer对应的Customer.hbm.xml映射配置文件

    2.2.1客户Customer的映射文件

    <?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>

        <!-- ORM:Object Relational Mapping,将实体类O和数据库的表R 建立映射关系 -->

        <class name="com.itheima.hibernate.domain.Customer" table="cst_customer">

            <!-- 类中的属性与表中的主键对应 -->

        <!--

          id标签中的属性:name,column, length,  type

           name:实体类中oid的名称,(必须)

           column:数据库表中主键字段;(非必须, 实体类中oid与表中主键字段名一致时, 可以省略column属性)

           length:字段长度, hibernate自动建表时用到(非必须);

           type:数据类型(非必须)

            java的数据类型 ----> type="java.lang.String"

            hibernate的数据类型 ----> type="String"

            sql的数据类型  ----> type="varchar(32)"

        -->

            <id name="cust_id" column="cust_id">

        <!--hibernate中的主键生成策略:increment, identity, sequence, native, uuid, assigned

          

         -->

               <generator class="native"/>

            </id>

            <!-- 类中的属性与表中的字段对应 -->

        <!--如果类中属性名, 与数据库中标的字段名相同时, column可以省略-->

        <!--

            property标签中字段名与id标签中的一样:name(必须),column(非必须), length(非必须),  type(非必须)

          -->

            <property name="cust_name" column="cust_name"/>

            <property name="cust_source" column="cust_source"/>

      

        <!-- 配置一对多的关联映射 -->

            <!--

               set标签:用来描述一的一方存放的多的一方的集合

                   * name:多的一方的集合属性名称

            -->

            <set name="linkMans">

               <!--

                   key标签:

                       * column多的一方的外键的名称

               -->

               <key column="lkm_cust_id"/>

               <!--

                   one-to-many标签:描述一对多的关系

                       * class:多的一方的类的全路径

                -->

               <one-to-many class="com.itheima.hibernate.domain.LinkMan"/>

            </set>

        </class>

    </hibernate-mapping>

    2.2.2联系人linkman的映射文件

    <?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>

        <class name="com.itheima.hibernate.domain.LinkMan" table="cst_linkman">

            <id name="lkm_id">

               <generator class="native"></generator>

            </id>

            <property name="lkm_name"/>

            <property name="lkm_gender"/>

            <property name="lkm_phone"/>

            <property name="lkm_mobile"/>

            <property name="lkm_email"/>

            <property name="lkm_qq"/>

            <property name="lkm_position"/>

            <property name="lkm_memo"/>

           

            <!-- 在多的一方配置many-to-one -->

            <!--

               many-to-one标签:用来描述多对一的关系配置。

                   * name      :一的一方的对象的属性名称。

                   * class     :一的一方的类的全路径

                   * column    :外键的名称

             -->

            <many-to-one name="customer" class="com.rodge.hibernate.domain.Customer" column="lkm_cust_id"/>

        </class>

    </hibernate-mapping>

    三、hibernate的核心配置文件hibernate.cfg.xml

    (在ssh整合的时候,hibernate的核心配置文件可以写入spring的配置文件中)

    <?xml version="1.0" encoding="UTF-8"?>

    <!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

            <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>

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

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

           

            <!-- 数据库的方言:根据底层的数据库生成不同的SQL -->

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

            <!-- 配置显示SQL -->

            <property name="hibernate.show_sql">true</property>

            <!-- 配置格式化SQL -->

            <property name="hibernate.format_sql">true</property>

            <!-- 配置hbm2ddl -->

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

     

       <!-- 配置C3P0连接池 -->

            <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

            <!--在连接池中可用的数据库连接的最少数目 -->

            <property name="c3p0.min_size">5</property>

            <!--在连接池中所有数据库连接的最大数目  -->

            <property name="c3p0.max_size">20</property>

            <!--设定数据库连接的过期时间,以秒为单位,

            如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->

            <property name="c3p0.timeout">120</property>

             <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->

            <property name="c3p0.idle_test_period">3000</property>

           

            <!-- 加载映射文件 -->

            <mapping resource="com/rodge/hibernate/domain/Customer.hbm.xml"/>

       <mapping resource="com/rodge/hibernate/domain/LinkMan.hbm.xml"/>

        </session-factory>

    </hibernate-configuration>

    <!-- 在多的一方配置many-to-one -->

            <!--

               many-to-one标签:用来描述多对一的关系配置。

                   * name      :一的一方的对象的属性名称。

                   * class     :一的一方的类的全路径

                   * column    :外键的名称

             -->

                     <many-to-one name="customer" class="com.itheima.hibernate.domain.Customer" column="lkm_cust_id"/>

  • 相关阅读:
    [转]关闭 Chrome 浏览器的启动时提示 - 请停用以开发者模式运行的扩展程序
    [Java][Web]ServletContext 方法的应用
    SQL中char、varchar、nchar、nvarchar 详解
    数据库三级模式与二级映像
    数据库设计思考
    Oracle概述
    asp.net服务器控件button先执行js再执行后台的方法
    C# 序列化
    HTML服务器控件与Web服务器控件
    VS2013自带报表+打印功能
  • 原文地址:https://www.cnblogs.com/rodge-run/p/6415552.html
Copyright © 2011-2022 走看看