Hibernate第二天

实体类编写规则

  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. 1.
  • 事务的特性
    1. 1.
  • 不考虑隔离性产生的问题
    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>
    2. 使用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);
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值