zoukankan      html  css  js  c++  java
  • hibernate框架

    hibernate简介

             是一个开放源代码的对象关系映射框架,它对jdbc进行了封装,提供了强大、高性能的对象关系型数据库的持久化服务。

             hibernate是能够实现ORM的框架,是一个优秀的java持久化解决方案,是当今主流的对象-关系映射ORM工具。

            理解持久化

                      瞬时状态:在程序运行的时候,有些程序数据被保存在内存中,当程序退出的时候,这些数据就不复存在了,这些数据的状态称为瞬时状态

                      持久状态:在使用一些软件的时候,有些数据在程序退出后,以文件或其他形式保存在了硬盘中,这些数据的状态称为持久状态。

                      持久化:就是将程序中数据的瞬时状态与持久化状态之间转换的机制。如将数据保存在文件或者数据库中以及从数据库中读取出来。

            ORM对象-关系映射

                      能在对象和关系型数据库之间进行数据转换的机制。如将关系型数据库中的表转换为面向对象编程的对象。

            在eclipse中配置hibernate

                     1下载和导入jar包加载hibernate类库和依赖库

                    

                   2 配置hibernate配置文件hibernate.cfg.xml:指定数据库连接信息和及其映射文件路径。

                    

    <hibernate-configuration>
    <session-factory>
         <!-- 数据库方言 -->
        <property name="dialect">
            org.hibernate.dialect.Oracle9Dialect
        </property>
        <!-- 数据库URL -->
        <property name="connection.url">
            jdbc:oracle:thin:@localhost:1521:MYORCL
        </property>
        <!-- 数据库用户名 -->
        <property name="connection.username">accp</property>
        <!-- 数据库密码 -->
        <property name="connection.password">accp</property>
        <!-- 数据库JDBC驱动 -->
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <property name="myeclipse.connection.profile">hjj</property>
        <!-- 表示是否 将运行期生成的sql输出到日志以供调试-->
        <property name="show_sql">true</property>
        <!-- 格式化输出sql -->
        <property name="format_sql">true</property>
        <!-- 与之对应的实体类配置文件 -->
        <mapping resource="entity/NewsUser.hbm.xml" />
    </session-factory>
    </hibernate-configuration>

                    3。创建持久化类和映射文件。

                        

    <hibernate-mapping>
        <class name="entity.NewsUser" table="NEWS_USER" schema="ACCP">
            <id name="id" type="java.lang.Integer">
                <column name="ID" precision="10" scale="0" />
                <generator class="assigned" />
            </id>
            <property name="username" type="java.lang.String">
                <column name="USERNAME" length="20" not-null="true" />
            </property>
            <property name="password" type="java.lang.String">
                <column name="PASSWORD" length="20" not-null="true" />
            </property>
            <property name="email" type="java.lang.String">
                <column name="EMAIL" length="100" />
            </property>
            <property name="USERTYPE" type="java.lang.Integer">
                <column name="USERTYPE" precision="5" scale="0" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>

                    4。创建hibernate连接工具类:hibernate主要接口和类。

            在hibernate中执行持久化操作步骤(增删改)

                    1、读取并解析配置文件

                         Configuration  config=new Configuration().configure();

                    2、读取并解析映射信息,创建SessionFactory:

                         SessionFactory factory=config.buildSessionFcatory();

                    3、打开session:

                         this.session=factory.openSession();

                    4、开始一个事务(增删改必须开启事务): 

                         tran=session.beginTransaction();

                    5、持久化操作:

                         保存一个对象到数据库

                        this.session.save(对象);

                        修改数据库中的表的记录

                        this.session.update(对象);

                         删除数据库中的表的记录

                        this.session.delete(对象);

                    6、提交事务

                        tran.commit;

                    7、关闭session:

                       this.session.close();

           通过hibernate修改、删除数据库信息

    
    

    NewsUser user=new NewsUser();
    user.setUsername("admin");
    user.setId(4);
    user.setPassword("123");
    user.setUsertype(1);
    //通过session工厂创建session对象
    Session session=HibernateSessionFactory.getSession();
    //开启一个事务
    Transaction transaction=session.beginTransaction();
    //调用SESSION的save()方法增加
    try{
    session.save(user);
    //调用session.update()方法修改
    session.update(user);
    //调用session.delete()方法删除
    session.delete(user);
    //提交事务
    transaction.commit();
    System.out.println("修改成功");
    }catch(HibernateException e){
    transaction.rollback();
    }finally{

    //关闭session
    session.close();
    }

     

            通过hibernate查询数据库

    //通过session.creatgeQuery()方法查询数据库
            NewsUser user=new NewsUser();
            //编写HQL语句,并用?占位符
            String hqlString="from  NewsUser where username=?";
            Session session=HibernateSessionFactory.getSession();
            //调用session.creatgeQuery()方法
            Query query=session.createQuery(hqlString);
            //填充占位符,下标从0开始
            query.setString(0, "admin");
            //通过 query.list().iterator()方法获得结果集的迭代器
            Iterator iterator=query.list().iterator();
            //循环遍历结果集
            while(iterator.hasNext()){
                user=(NewsUser) iterator.next();
            }
            System.out.println(user.getUsername());
            session.close();

                模糊查询

         hibernate实体映射  

               1、在hibernate中的关系-对象映射就是把实体类与数据库中的表相对应,实现实体类中的属性与数据库中的表的字段一一对应。

               2、映射是按照持久化类的定义来创建的,而非表的定义。

         hibernate基础语义也就是核心接口

               1、configuration类负责管理配置文件信息,创建sessionFactory实例

                  Configuration con=new configuration.configure();搜寻默认的配置文件

                                          =new configuration.configure(new file("url"));搜寻指定的配置文件

                  sessionFactory sf =con.buildSessionFactory()

               2、sessionFactory类负责创建session实例

                     sessionFactory实例一旦创建,就被赋予配置信息。

                    Session session=sf.openSession();

               3、session类 是持久层操作的基础,完成其save、update等方法完成持久层操作。

                     session.flush()清空缓存,在事务中不需要,提交事务和关闭session的时候自动清空

       hibernate事务管理

               1、hibernate是jdbc轻量级封装,本身不具备事务管理能力,将事务管理委托给最底层的jdbc或者jta

                   在配置文件中指定委托jdbc事务管理

               <property name="hibernate.transaction.factory_class">

                       net.sf.hibernate.transaction.JDBC.........

              </property >

              基于jdbc的事物管理,由jdbc的connection实现,事务周期限于Connection生命周期

                 Transaction tr=session.beginTransaction()

                 tr.commit()提交事务

                 tr.rollback()回滚事务。

              基于JTA(事务管理构架)的事务管理

                 1、跨session生命周期

             事务管理的锁机制

                 1、业务逻辑的实现过程中,往往需要保证数据访问的排他性,给我们选定的目标上所,保证其不会被其他程序修改

                 2、分悲观锁和乐观锁

                    悲观锁:指的是对数据被外界修改保持保守状态,在整个数据处理过程中,将数据处于锁定状态。

                    hibernate的加锁模式

                           内部实现的锁1、LockMode.NONE 无锁机制  2、、LockMode.WRITE 在inser和update记录的时候自动获取 3、LockMode.READ 读取数据的时候自动获取 

                           外部使用      3、 LockMode.UPGRADE  利用数据库的for update子句上锁

                                            4。 LockMode.UPGRADE_NOWAIT  Oracle的特定实现,利用ORACLE的for update_NOWAIT子句实现上锁

                          加锁模式Query.setLockMode  Criteria.setLockMode Session.lock

                         例 Query query=session.createQuery(HQL);//上锁

                          query.setLockMode(user, LockMode.UPGRADE);

                          //必须在获取数据之前上锁

                          query.list()//执行、获取

                    

        

     

                      

                     

                       

                           

                     

               

  • 相关阅读:
    MyBatis入门学习教程-优化MyBatis配置文件中的配置
    MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
    MyBatis入门学习教程-MyBatis快速入门
    Apache Shiro 简单概念
    将 Shiro 作为应用的权限基础
    在 Web 项目中应用 Apache Shiro
    Shiro简单配置
    Shiro权限框架简单快速入门
    解决错误: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
    解决Shiro注解无效的问题
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4483504.html
Copyright © 2011-2022 走看看