zoukankan      html  css  js  c++  java
  • Hibernate总结1

    1.Hibernate是什么

    1.java持久层的一个框架

    2.一个开放源代码的ORM(Object Relation Mapping,对象关系映射)框架,使得java开发人员可以使用面向对象编程的思想来操作数据库

     所谓的ORM就是利用描述对象和数据库表之间的映射的元数据,自动把Java应用程序中的对象持久化到关系型数据库的表中

    2.创建映射文件

    实体类Customer映射到Hibernate中的cst_customer表中

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping>
     6         <!-- 建立类与表的映射 -->
     7         <class name="com.itheima.hibernate.demo1.Customer" table="cst_customer">
     8             <!-- 建立类中的属性与表中的主键的对应关系 -->
     9             <id name="cust_id" column="cust_id">
    10                 <generator class="uuid"></generator>
    11             </id>
    12             <!-- 建立类中的普通属性和表的字段的对应 -->
    13             <property name="cust_name" column="cust_name"></property>
    14             <property name="cust_source" column="cust_source"></property>
    15             <property name="cust_industry" column="cust_industry"></property>
    16             <property name="cust_level" column="cust_level"></property>
    17             <property name="cust_phone" column="cust_phone"></property>
    18             <property name="cust_mobile" column="cust_mobile"></property>
    19         </class>
    20 </hibernate-mapping>

    3.创建Hibernate的核心配置文件

    Hibernate的映射文件反映了持久化类和数据库表的映射信息,而Hibernate的配置文件则主要用来配置数据库的连接以及hibernate运行时所需要的各种属性的值,文件创建在src下

     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         <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day02</property>
    10         <property name="hibernate.connection.username">root</property>
    11         <property name="hibernate.connection.password">123</property>
    12         <!-- 配置Hibernate的方言 -->
    13         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    14         
    15         <!-- 可选的配置参数 -->
    16         <property name="hibernate.show_sql">true</property>
    17         <property name="hibernate.format_sql">true</property>
    18         <property name="hibernate.hbm2ddl.auto">create</property> 
    19         <!-- 配置C3P0连接池 -->
    20         <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    21         <!--在连接池中可用的数据库连接的最少数目 -->
    22         <property name="c3p0.min_size">5</property>
    23         <!--在连接池中所有数据库连接的最大数目  -->
    24         <property name="c3p0.max_size">20</property>
    25         <!--设定数据库连接的过期时间,以秒为单位,
    26         如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
    27         <property name="c3p0.timeout">120</property>
    28          <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
    29         <property name="c3p0.idle_test_period">3000</property>
    30         
    31         <!-- 隔离级别配置 -->
    32         <property name="hibernate.connection.isolation">4</property>
    33         <!-- 配置当前线程绑定的Session -->
    34         <property name="hibernate.current_session_context_class">thread</property>
    35         
    36         <mapping resource="com/itheima/hibernate/demo1/Customer.hbm.xml"></mapping>
    37         
    38     </session-factory>
    39 </hibernate-configuration>

    4.编写测试代码

     1 public class HibernateDemo1 {
     2     @Test
     3     public void demo1() {
     4         //1.加载Hibernate的核心配置文件
     5         Configuration configuration = new Configuration().configure();
     6         //2.创建一个SessionFactory对象,类似于JDBC的连接池
     7         SessionFactory sessionFactory = configuration.buildSessionFactory();
     8         //3.通过SessionFactory获取到Session对象,类似于JDBC中的Connection
     9         Session session = sessionFactory.openSession();
    10         //4.手动开启事务
    11         Transaction transaction = session.beginTransaction();
    12         //5.编写代码
    13         Customer customer = new Customer();
    14         customer.setCust_name("王七");
    15         session.save(customer);
    16         //6.事务提交
    17         transaction.commit();
    18         //7.资源释放
    19         session.close();
    20     }
    21 }

    4.1 Configuration:配置对象

    Configuration用于启动、加载、管理hibernate的配置文件信息。在启动Hibernate的过程中,Configuration实例首先确定Hibernate配置文件的位置,然后读取相关配置,最后创建一个唯一的SessionFactory实例,如果不想用默认的hibernate.cfg.xml配置文件,则向configure()方法中传递一个文件路径的参数

    Configuration configuration = new Configuration().configure("xlm文件位置");

    4.2 SessionFactory:Session工厂对象

    SessionFactory接口负责Hibernate的初始化和建立Session对象

    SessionFactory实例是通过Configuration对象获得的

    SessionFactory sessionFactory = configuration.buildSessionFactory();

    SessionFactory的特点:

    1.它是线程安全的,它的同一个实例能够供多个线程共享

    2.他是重量级的,不能随意的创建和销毁它的实例

    由于它的这些特点,一般情况下,一个项目只需要一个SessionFactory,因此可以抽取成一个工具类

     1 public class HibernateUtils {
     2     public static final Configuration cfg;
     3     public static final SessionFactory sf;
     4     static {
     5         cfg = new Configuration().configure();
     6         sf = cfg.buildSessionFactory();
     7     }
     8     public static Session openSession() {
     9         return sf.openSession();
    10     }
    11 }

    4.3 Session

    Session是应用程序与数据库之间交互的一个单线程对象,是Hibernate运作的中心,它的主要功能是为持久化对象提供创建、读取和删除的功能,所有持久化对象必须在Session管理下才能进行持久化操作

        //3.通过SessionFactory获取到Session对象,类似于JDBC中的Connection
            Session session = sessionFactory.openSession();

    4.4 Transaction

    Transaction接口主要用于管理事务,他是Hibernate的数据库事务接口,且对底层的事物接口进行了封装

    Transaction transaction = session.beginTransaction();

    常用的管理事物的方法有

    • commit()方法:提交相关联的session实例
    • rollback()方法:撤销事务操作
  • 相关阅读:
    JavaScript中的事件循环
    CSS布局
    Tomcat相关
    C#参数中ref和out的区别
    angular启动4200端口后,如何停止监听4200端口
    表联接(交叉连接,内联,外联)
    如何使用vs自带的反编译工具Lldasm
    软件架构需要注意的几点,待补充。。。
    SqlServer中With(NOLOCK)
    TypeScript preview
  • 原文地址:https://www.cnblogs.com/QQ1171492144/p/10541504.html
Copyright © 2011-2022 走看看