zoukankan      html  css  js  c++  java
  • Hibernate基本配置

    Hibernate核心配置文件(放置在src目录下):

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

    <!-- 连接数据库配置开始 这里以连接mysql数据库为栗子  其他数据库 改连接内容就行 -->

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

    <property name="hibernate.connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>

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

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

    <!-- 连接数据库配置结束 -->

    <!-- 配置hibernate方言开始  -->

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

    <!-- 配置hibernate方言 结束-->

    <!--  配置可选设置开始 -->

    <!-- 打印sql -->

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

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

    <!-- 自动建表 没表创建 有表更新数据 -->

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

    <!-- 指定hibernate操作数据库时的隔离级别
    1 读未提交   2 读已提交  4 可重复读  8 串行化 -->

    <property name="hibernate.connection.isolation">4</property>

    <!-- 指定session与当前线程绑定 -->

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

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

    <mapping resource="从包开始的xml文件路径"/>

    </session-factory>

    </hibernate-configuration>

    配置HibernateUtil帮助类 方便获得session对象

    public final class HibernateUtil {
        //创建配置文件对象 加载hibernate配置文件
     private static Configuration cf=new Configuration().configure();
    //通过配置文件对象 获取session工厂对象
     private static SessionFactory sf=cf.buildSessionFactory();

    public static Session getCurrentSession(){//获得与当前线程绑定的session对象,当线程结束时 session对象自动关闭 不需要手动关闭 return sf.getCurrentSession(); } private HibernateUtil(){};//私有化构造方法 }

    实体类的配置文件 放在和实体类同目录下

    没有一对多和多对多关系的类配置文件:

    <?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="实体类的完整路径"  table="数据库表名">
    <!-- 建立主键映射 -->
    <id name="实体类中属性名" column="表中对应的列名" >
    <generator class="native"></generator>

    <!-- 主键生成策略 使用native,   hibernate会根据实际使用的数据库选择使用自动增长的类型 -->
    </id>
    <!-- 建立普通属性映射 -->           
    <property name="实体类中属性名" column="表中对应列名"></property>

    </class>

    </hibernate-mapping>

    一对多关系中,一的配置:

    <?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="实体类的完整路径"  table="数据库表名">
    <!-- 建立主键映射 -->
    <id name="实体类中属性名" column="表中对应的列名" >
    <generator class="native"></generator>

    <!-- 主键生成策略 使用native,   hibernate会根据实际使用的数据库选择使用自动增长的类型 -->
    </id>
    <!-- 建立普通属性映射 -->           
    <property name="实体类中属性名" column="表中对应列名"></property>


    <!-- 配置hibernate一对多映射 ,多的关系集合 -->
    <set name="实体类中set集合名" inverse="true" cascade="save-update" >
    <!--name: 当前实体类中存放多的一方对象集合的属性名,inverse:放弃维护关系 在一对多关系中 一般由一的一方放弃维护,cascade:级联保存或更新 -->
    <key column="表中外键的列名" /> 

    <one-to-many class="多的关系,实体类的完整类名"/>

    </set>
    </class>
    </hibernate-mapping>

    一对多关系,多的配置:

    <?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="实体类的完整路径"  table="数据库表名">
    <!-- 建立主键映射 -->
    <id name="实体类中属性名" column="表中对应的列名" >
    <generator class="native"></generator>

    <!-- 主键生成策略 使用native,   hibernate会根据实际使用的数据库选择使用自动增长的类型 -->
    </id>
    <!-- 建立普通属性映射 -->           
    <property name="实体类中属性名" column="表中对应列名"></property>

    <!-- 配置多对一关系 ,一的关系对象 -->

    <many-to-one name="一的对象属性名" cascade="save-update" class="一的类完整路径" column="表中外键列名"></many-to-one>
    <!--name: 多的关系实体类中 一的对象属性名,cascade:级联保存或更新 ,class:一的对象的类的完整路径, column:表中外键的列名 -->

    </class>
    </hibernate-mapping>

     多对多关系配置:

    <?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="实体类的完整路径"  table="数据库表名">
    <!-- 建立主键映射 -->
    <id name="实体类中属性名" column="表中对应的列名" >
    <generator class="native"></generator>

    <!-- 主键生成策略 使用native,   hibernate会根据实际使用的数据库选择使用自动增长的类型 -->
    </id>
    <!-- 建立普通属性映射 -->           
    <property name="实体类中属性名" column="表中对应列名"></property>


    <!-- 配置多对多映射 -->
    <set name="set集合属性名" table="中间表名" cascade="save-update">
    <!-- name:当前实体类中另一方对象集合的属性名 table:多对多关系中间表名 cascade:级联保存或更新 -->
    <key column="当前实体类在中间表的外键列名" /> 
    <many-to-many class="另一方的完整类名" column="另一方实体类在中间表的外键列名"></many-to-many>
    <!-- class:另一方实体类的完整类名 , column:另一方实体类在中间表的外键列名 -->
    </set>
    </class>
    </hibernate-mapping>

  • 相关阅读:
    SRM 588 D2 L3:GameInDarknessDiv2,DFS
    [置顶] ProDinner体验
    [置顶] 强制访问控制内核模块Smack
    Java小项目--坦克大战(version1.0)
    utf-8-validation
    is-subsequence
    perfect-rectangle
    find-the-difference
    longest-absolute-file-path
    first-unique-character-in-a-string
  • 原文地址:https://www.cnblogs.com/java888/p/10593522.html
Copyright © 2011-2022 走看看