• Hibernate_day02


    一、今天内容

    1 实体类编写规则

    2 hibernate主键生成策略

    (1)native

    (2)uuid

    3 实体类操作

    (1)crud操作

    (2)实体类对象状态

    4 hibernate的一级缓存

    5 hibernate的事务操作

    (1)事务代码规范写法

    6 hibernate其他的api(查询)

    (1)Query

    (2)Criteria

    (3)SQLQuery

    二、实体类编写规则

    1 实体类里面属性私有的

    2 私有属性使用公开的set和get方法操作

    3 要求实体类有属性作为唯一值(一般使用id值)

    4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类

    (1)八个基本数据类型对应的包装类

    - int – Integer

    - char—Character、

    - 其他的都是首字母大写 比如 double – Double

    (2)比如 表示学生的分数,假如 int score;

    - 比如学生得了0分 ,int score = 0;

    - 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试

    l       解决:使用包装类可以了, Integer score = 0,表示学生得了0分,

    表示学生没有参加考试,Integer score = null;

    三、Hibernate主键生成策略

    1 hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略

    2 hibernate主键生成策略有很多的值

    3 在class属性里面有很多值

    (1)native: 根据使用的数据库帮选择哪个值

    (2)uuid:之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值

    4 演示生成策略值 uuid

    (1)使用uuid生成策略,实体类id属性类型 必须 字符串类型

    (2)配置部分写出uuid值

     

    四、实体类操作

    1.对实体类crud操作

     添加操作

    1 调用session里面的save方法实现

    根据id查询

    1 调用session里面的get方法实现

    修改操作

    1 首先查询,修改值

    (1)根据id查询,返回对象

    删除操作

    1 调用session里面delete方法实现

    2.实体类对象状态(概念)

    1 实体类状态有三种

    (1)瞬时态:对象里面没有id值,对象与session没有关联

    (2)持久态:对象里面有id值,对象与session关联

    (3)托管态:对象有id值,对象与session没有关联

    2 演示操作实体类对象的方法

    (1)saveOrUpdate方法:实现添加、实现修改

    五、Hibernate的一级缓存

    1.什么是缓存

    1 数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。

    (1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据

    (2)把数据放到内存中,提供读取效率

    2.Hibernate缓存

    1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式

    2 hibernate缓存特点:

    第一类 hibernate的一级缓存

    (1)hibernate的一级缓存默认打开的

    (2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围

    (3)hibernate的一级缓存中,存储数据必须 持久态数据

    第二类 hibernate的二级缓存

    (1)目前已经不使用了,替代技术 redis

    (2)二级缓存默认不是打开的,需要配置

    (3)二级缓存使用范围,是sessionFactory范围

    3.验证一级缓存存在

    1 验证方式

    (1)首先根据uid=1查询,返回对象

    (2)其次再根据uid=1查询,返回对象

    第一步执行get方法之后,发送sql语句查询数据库

    第二个执行get方法之后,没有发送sql语句,查询一级缓存内容

    4.Hibernate一级缓存执行过程

    5.Hibernate一级缓存特性

     1 持久态自动更新数据库

    2 执行过程(了解)

    六、Hibernate事务操作

    1.事务相关概念

    1 什么是事务

    2 事务特性

    3 不考虑隔离性产生问题

    (1)脏读

    (2)不可重复读

    (3)虚读

    4 设置事务隔离级别

    (1)mysql默认隔离级别 repeatable read

    2.Hibernate事务代码规范写法

    1 代码结构

    try {

      开启事务

      提交事务

    }catch() {

      回滚事务

    }finally {

      关闭

    }

    @Test
        public void testTx() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try {
                sessionFactory = HibernateUtils.getSessionFactory();
                session = sessionFactory.openSession();
                //开启事务
                tx = session.beginTransaction();
                
                //添加
                User user = new User();
                user.setUsername("小马");
                user.setPassword("250");
                user.setAddress("美国");
                
                session.save(user);
                
                int i = 10/0;
                //提交事务
                tx.commit();
            }catch(Exception e) {
                e.printStackTrace();
                //回滚事务
                tx.rollback();
            }finally {
                //关闭操作
                session.close();
                sessionFactory.close();
            }
        }

    3.Hibernate绑定session

    1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal

    2 帮实现与本地线程绑定session

    3 获取与本地线程session

    (1)在hibernate核心配置文件中配置

    (2)调用sessionFactory里面的方法得到

    4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了

    七、Hibernate的api使用

    1、Query对象

    1 使用query对象,不需要写sql语句,但是写hql语句

    (1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似

    (2)hql和sql语句区别:

    - 使用sql操作表和表字段

    - 使用hql操作实体类和属性

    2 查询所有hql语句:

    (1)from 实体类名称

    3 Query对象使用

    (1)创建Query对象

    (2)调用query对象里面的方法得到结果

    2、Criteria对象

    1 使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

    2 实现过程

    (1)创建criteria对象

    (2)调用对象里面的方法得到结果

     

    3、SQLQuery对象

    1 使用hibernate时候,调用底层sql实现

    2 实现过程

    (1)创建对象

    (2)调用对象的方法得到结果

    返回list集合每部分是数组

    返回list中每部分是对象形式

    完成任务

    1 查询表所有记录,把记录显示页面中

    (1)servlet里面调用service,service调用dao

    (2)在dao里面使用hibernate实现操作

    (3)在页面中显示所有数据

    - 在servlet里面把list集合放到域对象

    - 在jsp中使用el表达式+foreach标签获取

    2 复习知识

    (1)一对多和建表

    (2)多对多和建表

  • 相关阅读:
    perl文本输出对齐
    putty配色方案
    java线程 同步与异步 线程池
    android为什么不允许新开启一个线程来更新UI,而是用handler来更新界面
    真正能获得基站LBS定位的android程序包括GSM、CDMA
    Android之TelephonyManager&GsmCellLocation类的方法详解
    网络编程之同步,阻塞,异步,非阻塞
    Android私有文件资源文件的存取
    [转]android 获取手机GSM/CDMA信号信息
    json格式转换
  • 原文地址:https://www.cnblogs.com/pony1223/p/9948529.html
Copyright © 2020-2023  润新知