hibernate5--2.数据持久化及事务

来源:互联网 发布:网络主播协议 编辑:程序博客网 时间:2024/06/06 00:46

1      实体类编写规则

1 实体类里面属性私有的

 

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

 

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

 

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

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

       nt– Integer

       char—Character、

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

 

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

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

解决:

       使用包装类可以了, Integer score = 0,表示学生得了0分,表示学生没有参加考试,Integer score = null;

2      主键生成策略

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

 

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

 

3 在class属性里面有很多值

(1)native:

       根据使用的数据库帮选择哪个值

(2)uuid:

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

 

4 演示生成策略值 uuid

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

(2)配置部分写出uuid值



3      实体类操作

3.1        对实体类crud操作

3.1.1       添加(save)操作

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

3.1.2       (get)根据id查询

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


3.1.3      (update)修改操作

1 首先查询,修改值

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

       也可以像delete那样定义实体类修改,不过在赋值时就需要写完所有字段,如果只写修改字段,得到的结果就只有 修改字段 ,其他字段就会为空 ;原因也简单,因为你新的实体类里面只有修改字段


2.sql输出

 

3.1.4       (delete)删除操作

1 调用session里面delete方法实现

 

 

  

3.2        实体类对象状态(概念)

3.2.1      三种状态

3.2.1.1       瞬时态:

对象里面没有id值,对象与session没有关联

3.2.1.2       持久态:

对象里面有id值,对象与session关联

 

3.2.1.3       托管态:

对象有id值,对象与session没有关联

3.2.1.4       补充:移除态

是实体从数据库删除后的状态  

3.2.2      saveOrUpdate--操作实体类对象的方法

实现添加、实现修改

3.2.2.1       瞬时态—添加

3.2.2.2       持久态、托管态—修改

 

4      Hibernate的一级缓存

4.1        什么是缓存

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

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

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

 

4.2        Hibernate缓存

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

 

2 hibernate缓存特点:

第一类 hibernate的一级缓存

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

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

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

 

第二类 hibernate的二级缓存

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

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

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

 

4.2.1      验证一级缓存存在

1 验证方式

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

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


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

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

 

4.2.2      Hibernate一级缓存执行过程

 

4.2.3      Hibernate一级缓存特性

1 持久态自动更新数据库

 

2 执行过程(了解)

 

5      Hibernate事务操作

5.1        事务相关概念

5.1.1      什么是事务      


5.1.2      事务特性


5.1.3      不考虑隔离性(并发问题)

 

5.1.4      设置事务隔离级别—了解

       mysql默认隔离级别 repeatable read

5.2        Hibernate事务代码规范写法

1 代码结构

   

 //事务规范写法   @Test   public void testTx() {      SessionFactorysessionFactory = null;      Sessionsession = null;      Transactiontx = null;           try {         sessionFactory= HibernateUtils.getSessionFactory();         session= sessionFactory.openSession();         tx= session.beginTransaction();                 Useruser = newUser();         user.setUsername("老兰");         user.setPassword("12369");         user.setAddress("攀枝花");                 session.save(user);                 int i = 10/0;         tx.commit();      }catch(Exception e) {         e.printStackTrace();         tx.rollback();      }finally{         session.close();         sessionFactory.close();      }   }

 

5.3        Hibernate绑定session

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

 

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

 

3 获取与本地线程session

 

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

 

<!-- 在hibernate核心配置文件中配置 -->      <property name="hibernate.current_session_context_class">thread</property>

(2)hibernateUtils

调用sessionFactory里面的方法得到

 

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

 

6      Hibernate的api使用

6.1        Query对象

6.1.1      写hql语句

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

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

(2)hql和sql语句区别:

       使用sql操作表和表字段

       使用hql操作实体类和属性

 

6.1.2      查询所有hql语句:

       from 实体类名称

 

6.1.3      Query对象使用

(1)创建Query对象

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

 

 

6.2        Criteria对象

6.2.1      不要语句

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

 

6.2.2      实现过程

(1)创建criteria对象

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

6.3        SQLQuery对象

6.3.1      底层sql实现

 

6.3.2      实现过程

(1)创建对象

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

返回list集合每部分是数组

 

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





源代码文件:http://download.csdn.net/detail/qq_26553781/9773427

 

0 0
原创粉丝点击