Hibernate第二天

作者: 小小程序员Eric | 来源:发表于2018-05-27 18:51 被阅读12次

实体类编写规则

  1. 实体类的属性是私有的
  2. 私有属性使用公开的get和set方法进行操作
  3. 要求实体类里的有一个属性作为唯一值(一般使用id值)
  4. 实体类的属性的数据类型,在hibernate中建议使用基本数据类型的包装类。是为了避免空对象。

Hibernate主键生成策略

<generator class="native"></generator>
  1. increment:
  2. identity:
  3. sequence:
  4. native:根据使用的数据库,自动选择适合的值
  5. uuid:会自动生成一个32位的16进制的唯一字符串
  6. assigned:

实体类的crud操作

  1. session.save(object):添加记录
  2. session.get(Class,value):根据id查询
  3. session.update(object):修改
  4. saveOrUpdate(object):实现添加和修改

Hibernate的缓存

  1. 数据存到数据库中,数据库本身是文件系统。
  2. 把数据存到内存中,可以提高读取效率
  • hibernate一级缓存
    1. 一级缓存默认打开的
    2. 一级缓存的使用范围,是session的范围(session创建到session关闭)
    3. 存储数据必须是持久态数据
    4. 持久态数据在提交事务时,自动更新数据库
  • hibernate二级缓存
    1. 二级缓存不是默认打开,需要配置
    2. 二级缓存现在基本不用了,使用redis替代
    3. 二级缓存的范围,是SessionFactory的范围(SessionFactory创建到SessionFactory关闭)

Hibernate事务操作

  • 什么是事务
  • 事务的特性
  • 不考虑隔离性产生的问题
    1. 脏读
    2. 不可重复
    3. 虚读
  • 设置事务隔离级别
    1. MySQL默认隔离级别repeatable read

Hibernate事务代码规范写法

SessionFactory sessionFactory = null;
Transaction tx = null;
Session session = null;
try{
    // 开启事务
    sessionFactory = HibernateUtils.getSessionFactory();
    session = sessionFactory.openSession();
    tx = session.beginTransaction();
    // 添加
    User user = new User();
    user.setUsername("Eric");
    user.setPassword("password");
    user.setAddress("Chendu China");
    // 提交事务
    tx.commit();
} catch(Exception e) {
    // 回滚事务
    e.printStackTrace();
    tx.rollback();
} finally {
    // 关闭
    session.close();
    sessionFactory.close();
}

Hibernate绑定session

  1. session类似于jdbc中的connection
  2. hibernate帮我们实现了本地线程绑定session
  3. 获取与本地线程绑定的session
    1. 在hibernate核心配置文件中配置
    <property name="hibernate.current_session_context_class">thread</property>
    
    1. 使用SessionFactory中的方法可以得到
    // 提供返回与本地线程绑定的session的方法
    public static Session getSessionObject(){
        return sessionFactory.getCurrentSession();
    }
    // 在代码中调用(操作结束后不需要手动关闭)
    Session session = HibernateUtils.getSessionObject();
    

Hibernate中的api使用

  • Query对象

    1. 使用Query对象,不需要使用sql语句,但是需要写hql(hibernate query language)语句
    2. hql与sql的区别:
      1. 使用sql操作表和字段
      2. 使用hql操作实体类和属性
    3. 使用演示:
    // 1.创建Query对象
    Query query = session.createQuery("from User");
    // 2。调用Query对象中的方法
    List<User> list = query.list();
    for (User u:list){
        System.out.println(u);
    }
    
  • Criteria对象

    1. 使用这个对象,不需要写语句,直接调用方法实现
    2. 使用演示程:
    // 1.创建Criteria对象
    Criteria criteria = session.createCriteria(User.class);
    // 2.调用Criteria对象中的方法
    List<User> list = criteria.list();
    for (User u:list){
        System.out.println(u);
    }
    
  • SQLQuery对象

    1. 使用hibernate的时候,调用底层sql实现
    2. 使用演示:
    // 1.创建SQLQuery对象
    // 参数填写普通sql语句
    String sql = "select * from t_user";
    SQLQuery sqlQuery = session.createSQLQuery(sql);
    // 2.调用SQLQuery对象中的方法
    sqlQuery.addEntity(User.class);
    List<User> list = sqlQuery.list();
    for (User u:list){
        System.out.println(u);
    }
    

相关文章

  • day02

    Hibernate框架第二天 课程回顾:Hibernate框架的第一天 今天内容 Hibernate的持久化类 什...

  • 【Java中级】5.0 SSH之Hibernate框架(一)——

    1.0 Hibernate框架学习路线 Hibernate入门包括Hibernate的环境搭建、Hibernate...

  • JAEE学习笔记(28)Hibernate(2)

    Hibernate 今日内容 Hibernate持久化对象的状态 Hibernate的一级缓存 Hibernate...

  • Hibernate框架学习之初识Hibernate

    Hibernate框架学习之初识Hibernate Hibernate的简单介绍 Hibernate是一个开源的优...

  • hibernate常用知识书目录

    常用知识 hibernate是什么 hibernate对象三种状态 hibernate一级缓存 hibernate...

  • Hibernate框架

    Hibernate框架 标签(空格分隔): javaWeb [TOC] Hibernate介绍 Hibernate...

  • 数据持久化之Hibernate(07)

    Hibernate的使用 一. Hibernate HelloWorld 1.1 搭建Hibernate开发环境步...

  • Hibernate第二天

    实体类编写规则 实体类的属性是私有的 私有属性使用公开的get和set方法进行操作 要求实体类里的有一个属性作为唯...

  • Hibernate第二天

    今天是2018年9月17日 在浪费了很多时间之后……又回过头来写Hibernate的基础内容,加上今天学校的课很多...

  • hibernate第二天

    hibernate持久化类状态 持久化类就是一个实体类与数据库建立了映射。hibernate为了方便管理持久化类,...

网友评论

    本文标题:Hibernate第二天

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