Hibernate_day02

来源:互联网 发布:大庆龙江网络新村电话 编辑:程序博客网 时间:2024/06/06 13:19

上节内容

1web内容回顾


2hibernate概述

1orm思想


3hibernate入门案例


4hibernate的配置文件


5hibernate的核心api

今天内容

1实体类编写规则


2hibernate主键生成策略

1native

2uuid


3实体类操作

1crud操作

2)实体类对象状态


4hibernate的一级缓存


5hibernate的事务操作

1)事务代码规范写法


6hibernate其他的api(查询)

1Query

2Criteria

3SQLQuery


实体类编写规则

1实体类里面属性私有的


2私有属性使用公开的setget方法操作


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


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

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

-int – Integer

-char—Character

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

2)比如表示学生的分数,假如intscore;

-比如学生得了0intscore = 0;

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

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

  • 表示学生没有参加考试,Integerscore = null;


Hibernate主键生成策略

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


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


3class属性里面有很多值

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

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


4演示生成策略值uuid

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

2)配置部分写出uuid


实体类操作

对实体类crud操作

添加操作

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


根据id查询

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


修改操作

1首先查询,修改值

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


删除操作

1调用session里面delete方法实现


实体类对象状态(概念)

1实体类状态有三种

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

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


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


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

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




Hibernate的一级缓存

什么是缓存

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

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

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


Hibernate缓存

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


2hibernate缓存特点:

第一类hibernate的一级缓存

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

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

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


第二类hibernate的二级缓存

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

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

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


验证一级缓存存在

1验证方式

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

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

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

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


Hibernate一级缓存执行过程


Hibernate一级缓存特性

1持久态自动更新数据库


2执行过程(了解)


Hibernate事务操作

事务相关概念

1什么是事务


2事务特性


3不考虑隔离性产生问题

1)脏读

2)不可重复读

3)虚读


4设置事务隔离级别

1mysql默认隔离级别repeatableread


Hibernate事务代码规范写法

1代码结构

try{

开启事务

提交事务

}catch(){

回滚事务

}finally{

关闭

}

@Test

publicvoidtestTx(){

SessionFactorysessionFactory=null;

Sessionsession=null;

Transactiontx=null;

try{

sessionFactory= HibernateUtils.getSessionFactory();

session=sessionFactory.openSession();

//开启事务

tx=session.beginTransaction();

//添加

Useruser=newUser();

user.setUsername("小马");

user.setPassword("250");

user.setAddress("美国");

session.save(user);

inti= 10/0;

//提交事务

tx.commit();

}catch(Exceptione){

e.printStackTrace();

//回滚事务

tx.rollback();

}finally{

//关闭操作

session.close();

sessionFactory.close();

}

}

Hibernate绑定session

1session类似于jdbcconnection,之前web阶段学过ThreadLocal


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


3获取与本地线程session

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

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


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


Hibernateapi使用

Query对象

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

1hqlhibernatequery languagehibernate提供查询语言,这个hql语句和普通sql语句很相似

2hqlsql语句区别:

-使用sql操作表和表字段

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


2查询所有hql语句:

1from实体类名称


3Query对象使用

1)创建Query对象

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



Criteria对象

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


2实现过程

1)创建criteria对象

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


SQLQuery对象

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


2实现过程

1)创建对象

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

返回list集合每部分是数组


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

页面中

1servlet里面调用serviceservice调用dao

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

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

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

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


2复习知识

1)一对多和建表

2)多对多和建表

记录显示页面中

1servlet里面调用serviceservice调用dao

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

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

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

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


2复习知识

1)一对多和建表

2)多对多和建表

完成任务

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

1servlet里面调用serviceservice调用dao

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

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

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

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


2复习知识

1)一对多和建表

2)多对多和建表










原创粉丝点击