美文网首页
Hibernate4入门01--基本知识

Hibernate4入门01--基本知识

作者: CodeManLB | 来源:发表于2018-01-10 17:58 被阅读0次

    一,Hibernate框架的主要工作:

    1. 提高数据访问层的编码效率,对JDBC进行了轻量级的对象封装;
    2. 将数据库的关系型数据,映射到普通的java类中,通过操作对象来操作数据库的数据,即ORM(Object Relational Mapping)对象-关系型数据映射。

    二,Hibernate使用前的准备过程:

    1. 编写Hibernate的配置文件(可自动生成):hibernate.cfg.xml,主要是配置SessionFactory。
    <hibernate-configuration>
      <!-- 配置SessionFactory -->
      <session-factory>
    
        <!-- 1,配置数据源 -->
        <!-- 1.1,配置数据库的驱动l类 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 1.2,配置数据库的url地址 -->
        <property name="connection.url">
          jdbc:mysql://localhost:3306/cnconsum
        </property>
        <!-- 1.3,配置数据库的用户名 -->
        <property name="connection.username">root</property>
        <!-- 1.4,配置数据库的密码 -->
        <property name="connection.password">naruto68</property>
        
        <!-- 配置数据库的类型 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 是否显示sql语句 --> 
        <property name="show_sql">true</property>
    
        <!-- 配置映射表 -->
        <mapping resource="com/hibernate/entity/CnUser.hbm.xml"/>
        ...
      </session-factory>
    </hibernate-configuration>
    
    1. 编写回话工厂类HibernateSessionFactory:主要用于根据配置文件创建SessionFactory,并利用SessionFactory获取Session。
    //1,通过Configuration对象解析hibernate.cfg.xml的内容,并创建SessionFactory对象。
    configuration.configure();
    ......省略注册机代码
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    //2,通过sessionFactory的openSession()方法,获取session对象;
    ......省略处理每个线程维护自己的session的代码
    session = sessionFactory.openSession();
    
    1. 创建实体类(对应数据库中的一张表),该实体类的属性值,对应表的列属性,并提供getXxx和setXxx方法。这些可自动生成。
    public class CnUser
    {
      private String uuid;
      private String phone;
      ......省略其它属性
      public String getUuid()
      {
        return this.uuid;
      }
      public void setUuid(String uuid)
      {
        this.uuid = uuid;
      }
      ......省略其它方法
    }
    
    1. 编写映射文件(实体类和关系表的真正映射关系),可自动生成。
    <hibernate-mapping>
      <!-- 配置一个实体类的映射关系 -->
      <class name="实体类的具体位置" table="对应的表明" catalog="对应的数据库">
    
        <!-- 映射主键(也可以是组合主键) -->
        <id name="实体类中的属性名" type="数据类型">
          <!-- 对应表中的主键 -->
          <column name="表中的主键名"/>
          <!-- 主键生成策略 -->
          <generator class="assigned(默认)"/>
        </id>
    
        <!-- 映射其它属性 -->
        <property name="实体类中的属性名" type="数据类型">
          <!-- 对应表中的属性 -->
          <column name="表中的列属性" length="字段长度"/>
        </property>
    
      </class>
    </hibernate-mapping>
    
    1. 通过Annotation注解的方式,进行映射配置;

    三,使用Hibernate操作数据库

    操作数据的代码框架结构

    //1,获得session实例
    Session session = HibernateSessionFactory.getSession();
    //2,开启事务
    Transaction tx = null;
    try
    {
      tx = session.beginTransaction();
      //3,通过session操作持久化对象
      session.save(user);
      //4,提交事务
      tx.commit();
    }
    catch(Exception e)
    {
      if(tx != null)
      {
        //4,事务回滚
        tx.rollback();
      }
    }
    finally
     {
      //5,关闭session
      HibernateSessionFactory.closeSession();
     }
    
    1. 加载数据(只能根据主键加载)
    session.get(CnUser.class,id); //记录不存在,返回null
    session.load(CnUser.class,id); //记录必须存在,否则返回异常
    
    1. 添加数据
       session.save(user); //重复提交会报异常
       session.saveOrUpdate(user); //重复提交,第二次做为更新
    
    1. 删除数据
    session.delete(user); //先通过get或load加载到user,然后删除
    
    1. 修改数据
    session.update(user);//先通过get或load加载到user,然后修改
    

    四,使用hibernate检索数据

    1. 使用HQL(Hibernate Query Language),HQL对应于数据库中的sql查询;

    使用HQL进行查询的代码框架

    //1,获取session实例
    Session session = HibernateSessionFactory.getSession();
    //2,声明hql查询语句
    String hql = "from CnUser user";
    //3,通过session和hql创建sql查询
    Query query = session.createQuery(hql);
    /*4,对query可以设置查询的限制,包括:
    4.1,动态设置条件;
    4.2,sql查询的对应查询:分组,排序等;
    4.3,聚集函数;
    4.4,分页查询;
    4.5,连接查询
    */
    //5,获取查询结果
    List list = query.list();
    
    1. 使用QBC(Query By Criteria)

    因为HQL的虽然比JDBC方式的查询有进步,但是还是需要编写繁琐的HQL语句,Criteria采用面向对象的方式,封装查询条件,使得查询代码编写更加方便;代码结构如下:

    //1,获取Session实例;
    Session session = HibernateSessionFactory.getSession();
    
    //2,利用Session创建Criteria对象;
    Criteria criteria = session.createCriteria(CnUser.class);
    
    /*3,给Criteria对象设置查询条件Critetion接口,实现类包括:
    Example,SimpleExpression和Junction,都由Restrictions工具类来创建;*/
    
    //3.1,直接使用Restrictions工具类来设置条件
    criteria.add(Restrictions.like("userLevel", "ORD", MatchMode.ANYWHERE));
    
    //3.2,使用Example类的实例来设置条件
    //QBE查询
    CnUser condition = new CnUser();
    condition.setUserLevel("ORD");
    condition.setName("liu");
    Example example = Example.create(condition);
    example.enableLike(MatchMode.ANYWHERE);
    example.ignoreCase();
    criteria.add(example);
    
    //4,使用Order设置排序方式
    criteria.addOrder(Order.desc);
    
    //5,使用Projection进行分组和统计
    //分组
    ProjectionList  pList = Projections.projectionList();
    //分组依据
    pList.add(Projections.groupProperty("sex"));
    //统计分组数
    pList.add(Projections.rowCount());
    criteria.setProjection(pList);
    

    相关文章

      网友评论

          本文标题:Hibernate4入门01--基本知识

          本文链接:https://www.haomeiwen.com/subject/ygyugxtx.html