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

    hibernate是一个持久层框架,是一个ORM(object,relattional mapping)对象关系映射框架,对jdbc进行了轻量级对象框架。

    所谓的对象关系映射是指,一个java对象和关系型数据库里的表简历一种映射关系,从而操作对象就可以操作表。

    入门学习


    所需jar包

    创建实体类

    创建映射

    映射需要通过XML的配置文件来完成,这个配置文件可以任意命名。尽量统一命名规范(类名.hbm.xml

    <?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 package="com.gream">
        <!-- <建立类与表的映射> -->
        <class name="com.gream.Cstomer" table ="cst_customer" >
            <!--表主键和类关联  -->
            <id name="cust_id" column="cust_id" >
            <!--主键生成策略 -->
                <generator class="increment"  />
            </id>
            <!-- 普通的对象属性和表属性对应 -->
            <property name="cust_name" column="cust_name"  />
            <property name="cust_source" column="cust_source"  />
            <property name="cust_industry" column="cust_industry"  />
            <property name="cust_level" column="cust_level"  />
            <property name="cust_phone" column="cust_phone"  />
            <property name="cust_mobile" column="cust_mobile"  />
        </class>
    
    </hibernate-mapping>

    创建一个Hibernate的核心配置文件

    Hibernate的核心配置文件的名称:hibernate.cfg.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     5     <hibernate-configuration>
     6         <session-factory>
     7         <!--连接数据库基本参数  -->
     8             <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
     9             <!--  2种写法,防止插入数据库出现乱码 -->
    10             <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=utf8</property>
    11 <!--         <property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8]]></property> -->            
    12             <property name="hibernate.connection.username">root</property>
    13             <property name="hibernate.connection.password">root</property>
    14             <!--配置hibernate方言  -->
    15             <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    16             <!--打印sql -->
    17             <property name="hibernate.show_sql">true</property>
    18             <!-- 格式化sql -->
    19             <property name="hibernate.format_sql">true</property>
    20             <!-- 自动创建表 -->
    21             <property name="hibernate.hbm2ddl.auto">update</property>
    22             
    23             <!-- 配置C3P0连接池 -->
    24         <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    25         <!--在连接池中可用的数据库连接的最少数目 -->
    26         <property name="c3p0.min_size">5</property>
    27         <!--在连接池中所有数据库连接的最大数目  -->
    28         <property name="c3p0.max_size">20</property>
    29         <!--设定数据库连接的过期时间,以秒为单位,
    30         如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
    31         <property name="c3p0.timeout">120</property>
    32          <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
    33         <property name="c3p0.idle_test_period">3000</property>
    34             
    35             <!-- 设置事物隔离级别  -->
    36             <property name="hibernate.connecton.isolation">8</property>
    37             <!-- 设置当前线程绑定session  -->
    38             <property name="hibernate.current_session_context_class">thread</property>
    39             <!-- 记载配置文件 -->这里一定要配置好,不然找不到实体类对象映射文件
    40             <mapping resource="com/gream/Cstomer.hbm.xml" />
    41             
    42         </session-factory>
    43     </hibernate-configuration>

    测试代码

     1 package com.gream;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 import org.junit.Test;
     8 
     9 public class Demo01 {
    10     
    11     @Test
    12     public static void main(String[] args) {
    13         // TODO Auto-generated method stub
    14         //保存客户案例
    15         //1、加载hibernate核心配置文件
    16         Configuration cg = new Configuration().configure();
    17         //2、创建sessionfactory对象,类似jdbc
    18         SessionFactory sf = cg.buildSessionFactory();    
    19         //3、通过sessionfactory获取session对象,类似jdbc中connection
    20         Session session = sf.openSession();
    21         //4、开启事物
    22         Transaction tt = session.beginTransaction();
    23         //5、编写代码
    24         Cstomer co = new Cstomer();
    25         co.setCust_name("王2");
    26         //保存
    27         session.save(co);
    28         //事物提交
    29         tt.commit();
    30         session.close();
    31     }
    32 
    33 }

     Hibernate的映射的配置

    实体类对象映射的配置

    class标签的配置】

    标签用来建立类与表的映射关系

     属性:

    name :类的全路径

    table :表名(类名与表名一致,table可以省略)

    catalog :数据库名

    id标签的配置】

    标签用来建立类中的属性与表中的主键的对应关系

     属性:

    name :类中的属性名

    column :表中的字段名(类中的属性名和表中的字段名如果一致,column可以省略)

    length :长度

    type :类型

    property标签的配置】

    标签用来建立类中的普通属性与表的字段的对应关系

    属性:

    name :类中的属性名

    column :表中的字段名

    length :长度

    type :类型

    not-null :设置非空

    unique :设置唯一

    核心文件的配置

    必须的配置

    连接数据库的基本的参数:

    驱动类

    url路径

    用户名

    密码

    方言

    可选的配置

    显示SQL hibernate.show_sql

    格式化SQL hibernate.format_sql

    自动建表 hibernate.hbm2ddl.auto

    none :不使用hibernate的自动建表

    create :如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表。(测试)

    create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。(测试)

    update:如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)

    validate:如果没有表,不会创建表。只会使用数据库中原有的表。(校验映射和表结构)。

    映射文件的引入

    引入映射文件的位置,位置写全

     <mapping resource="com/gream/Cstomer.hbm.xml" />



    核心API

    Configuration:加载核心配置

    2种加载方法:

    1、加载hibernate核心配置文件
    Configuration cg = new Configuration().configure();

     2、手动加载映射

    configuration.addResource("com/itheima/hibernate/demo1/Customer.hbm.xml");

     SessionFactorySession工厂

    SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存(不讲)。是线程安全的对象。一个项目创建一个对象即可

    创建sessionfactory对象,类似jdbc
    SessionFactory sf = cg.buildSessionFactory();

    Session:类似Connection对象是连接对象

    Session代表的是Hibernate与数据库的链接对象。不是线程安全的。与数据库交互桥梁。

    Session中的API

     保存方法:

    Serializable save(Object obj);

    查询方法:

    T get(Class c,Serializable id);

    T load(Class c,Serializable id);

    get和load方法的区别:

    get是立即执行,返回数据,当他查不到对象的时候返回null。load是懒执行,只有到最后提交事务的事务才会执行,当他查不到对象的时候报异常。

    修改方法:

    void update(Object obj);

     删除方法:

    void delete(Object obj);

    保存或更新

    void saveOrUpdate(Object obj);

    查询所有

  • 相关阅读:
    那些陌生的C++关键字
    从实现装饰者模式中思考C++指针和引用的选择
    单例模式(Singleton)
    命令模式(Command)
    抽象工厂模式(Abstract Factory)
    《Effective C++》读书摘要
    桥接模式(Bridge)
    适配器模式(Adapter)
    设计模式学习心得
    黑客常用WinAPI函数整理
  • 原文地址:https://www.cnblogs.com/wangrongchen/p/11433038.html
Copyright © 2011-2022 走看看