hibernate框架总结

来源:互联网 发布:电脑usb端口被禁用 编辑:程序博客网 时间:2024/06/14 09:19


Hibernate


Hibernate课程安排
第一天 hibernate入门和基本操作


第二天 hibernate 概念和api使用


第三天 hibernate配置一对多和多对多


第四天 hibernate查询操作


今天内容介绍


1.web内容回顾
*1.javaee三层架构
*2.mvc思想

2.hibenate概述




3.hibenate框架入门案例


4.hibenate 配置文件


5.hibenate的api使用




web回顾
javaEE三层结构


1.web层:struts2框架


2.service层业务逻辑层:spring框架


3.dao层:hibernate框架
*1对数据库进行crud操作


MVC思想
MVC:m模型  v视图  c控制器


Hibernate概述


什么是框架


1.写程序,使用框架之后,棒我们实现一部分功能,是有那个框架爱好处
,少写一部分代码实现功能


什么是hiberbate框架(重点记住)


1.hibernate框架应用在javaee三层结构中dao层框架


2.在dao层里面做对数据库crud操作,使用hibernate实现crud操作,
hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处
不需要写复杂的jdbc的代码,不需要写sql语句实现


3.hiberbate开源的  轻量级(不需要依赖于其他东西如jar包)的框架


4.hibernate版本
hibernate3.x
hiernate4.x:没人用
hiernate5.x:(学习)现在使用的


lib:hibernate的jar包




什么是orm思想
1.hibernate使用orm思想对数据库进行crud操作


2.在web阶段学习javabean,更正确的叫法 实体类


3.orm:o:object对象 r:relateional关系 m:mapping映射  对象关系映射


*1.文字描述
让实体类和数据库表进行一一对应关系,
让实体类首先和数据库表对应
让实体类属性和表里字段对应
*2.不需要直接操作数据库表,而操作表对应实体类对象

jdbc代码
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建连接
Connection conn=DriverManager.getConnerction
(url,username,password);
String sql="select * from student";
//对sql进行预编译操作
PreparedStatment psmt=conn.prepareStatement(sql);
//执行sql  查询sql
ResultSet rs=pstm.executeQuery();
//遍历结果集
.........
//释放资源
.............




Hibernate入门


搭建hibenate环境


第一步
因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的
jar包,就需要导入其他日志jar包
不要忘记masql驱动jar包




*使用hibernate时候,不需要自己手动创建表,hibernate棒你把表创建好




第三步,配置实体类和数据库表,一一对应的关系(映射关系)
*创建xml合适的配置文件
映射配置文件名称和位置没有固定要求
建议:在实体类所在包里面创建,实体类名称。bm.xml


*2配置是xml格式,在配置文件中首先引入xml约束
学过的约束dtd、schema、 


*3配置映射关系


class标签 name属性:实体类的全路径
table属性:数据库表的名称
<class name="cn.itcast.entity.User" table="user">
hibernate要求实体类有一个属性唯一值
hibernate要去表于字段作为唯一值
id标签
有两个属性 name属性:实体类里面id属性名称
column属性:生成的表字段名称
<id name="uid" column="uid">
<!--设置数据库表id增长策略
native:生成表id值就是主键自动增长
-->
<generator class="native"></generator>
</id>
<!--配置其他属性和标的字段对应-->

<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>




</class>




第四步 创建hibernate核心配置文件
*1.核心配置文件安格式xml,歹势核心配置文件名称和位置固定的位置
的位置:必须src下面
名称:必须hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
第一部分:配置数据库必须的
<property name="hibernate.connection.url">com.mysql.jdbc.Driver></property>
<property name="">jdbc:mysql://hibernate></property>
<property name="">root</property>
<property name="">123</property>

第二部分:配置hibernage信息 可选的
输出底层sql语句
<property name="hibernate.show_sql">true</property>
输出底层sql语句格式
<property name="hibernate.format_sql">true</property>
hiberbate帮创建表,需要配置之后
update:如果说已经有表,更新,如果没有 创建
<property name="hibernate.hbm2ddl.quto update"></property>
配置数据库方言
在mysql里面实现分页关键字limit只能使用mysql里面
在ooracle数据库,实现分页rownum
让hibernate框架识别不同数据库的语句
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

第三部分:把映射文件放到核心配置文件中 必须的

<mapping resource="cn/itcast/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configurateion>




 
实现添加操作
第一步 加载hiberbate核心配置文件
在hiberbate里面封装对象
Configuration cfg =new Configuration();
cfg.configure();


第二步 创建SessionFactory对象
SessionFactory sessionFactory=cfg.buildSessionFactory();
读取hibernate核心配置文件内容创建sessionFactory


第三步 使用SessionFactory创建对象
Session session=sessionFactory.openSession();


第四步 开启事务
Transaction tx=session.beginTransaction();


第五步 写具体逻辑crud操作
//添加功能
User u=new  User();
user.setUsername="小王";
user.setPassword="123";
user.setAddress="中共";
//调用session的方法实现添加
session.save(user);


第六步 提交事务
tx.commit();


第七步 关闭资源
session.close();
sessionFactory.close();






hibernage核心api


Configuration
1.到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置问问文件放到对象里面
(加载核心配置文件)


SessionFactory(重点)
1.使用configuration对象创建sessionFactory对象
创建sessionfactory过程中做事情
根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里根据映射
把表创建
2.创建sessionFactory过程中,这个过程特别耗资源的
*在hibernate操作中,建议一个项目一般创建一个sessionFactory对象

3.具体实现
*写工具类,写静态代码块实现
静态代码块在类加载时候执行,执行一次


session(重点)
1.session类似于jdbc中connection


2.调用session里面不同的方法实现crud操作
*1.添加save方法
*2.修改update方法
*3.删除delete方法
*4.根据id查询get方法

3.session对象单线程对象
*1.session对象不能共用,只能自己使用


Transaction
1.事务对象


2.事务提交回滚
tx.commit();//提交
tx.rollback();//回滚


3.事务
*事务四个特性
原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做
一致性;事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
一致性与原子性是密切相关的。
隔离性:一个事务的执行不能被其他事务干扰
持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的






解决配置文件没有提示问题
1.可以上网


2.把约束文件引入到eclipse中
 window pr..... 搜锁 xml c  点击add 选择url 路径 最后重启eclipse


+++++++++++++++++++++++++++++++++
=================================
+++++++++++++++++++++++++++++++++






Hibernate第二天
1.实体类的编写规则


2.hibernate主键生成策略


3.实体类操作
*1.crud操作
*2.实体类对象状态

4.hibernate的一级缓存


5.hibernate的事务操作
*1事务代码规则写法

6.hibernate其他的api(查询)


 
 实体类编写规则
 1.实体类里面属性私有的
 
 2.私有属性使用get set方法操作
 
 3.要有实体类属性作为唯一值(一般使用id值)
 
 4.实体类属性建议不实用基本数据类型,使用基本数据类型对应的包装类
1.八个基本数据类型对应的包装类
int Integer
char Character
其他的都是首字母大写比如 double Double
2.比如 表示学生的分数,加入int score;
比如学生得了0分,int score=0;
如果表示学生没有参加考试,int score=0;不能准确表示学生是否参加考试
解决:使用包装类可以了,Integer score=0;表示学生得了0风,
表示学生没有参加考试,Integer score=null;
 
 hibernate主键生成策略
 
 1.hibernate要求实体类里面有一个属性作为唯一值,对应表主键,,
 主键可以不同生成策略
 
2.hibernate主键生成策略有很多值
 
 3.class标签属性里面有
 native:根据好似用的数据库帮选择那个值
 
 uuid:之间web阶段写代码生成uuid值,hibernate帮我们生成uuid值
 
 increment增值为1
 
 identity只能用在mysql
 
 
 实体类crud操作
 1.调用session的方法实现添加
 
 2.根据id查询
 
 
 实体类对象状态(概念)
 1.实体类的三种状态
*.瞬时态:对象里面没有id值,对象与session没有关联
User user = new User();
user.setName("小明");
user.setPasswrod(123);
user.setAddress("乌鲁木齐");

*.持久态;对象里面有id值,对象与session有关联
User user = session.get(User.class,1);

*.托管态:对象里面有id值,对象与session没有关联
User user = new User();
user.setUid(3);

持久态会自动更新,update
 
如果实体类的状态是瞬时态 则做添加 session.saveOrUpdate(user);
如果实体类的状态是托管态 则做修改 session.saveOrUpdate(user);
如果实体类的状态是持久态 则做修改 session.saveOrUpdate(user);

 hibernate的一级缓存
 什么是缓存
 1.数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高
1.把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据
2.把数据放发哦内存中,提供读取效果
 
 
 hibernate缓存
 1.hibernate框架中提供很多有话发那个是,hibernate的缓存就是iyige优化方式
 
 2.hibernate缓存特点:
第一类 hibernate的一级缓存
*1.hibernate的一级缓存默认打开的
*2.hibernate的一级缓存使用范围,是session的范围
*3.hibernate的一级缓存中,存储数据必须是持久态

第二类 hibernate的二级缓存
*1.目前已经不使用了,替代技术 redis
*2.二级缓存默认不是打开的,需要配置
*3.二级缓存使用范围,是sessionFactory范围

第一步执行get方法后,发送sql语句查询数据库
第二步执行get方法之后,没有发送sql语句,查询一级缓存内容
 
*一级缓存是session范围的
*二级缓存是sessionFactory范围的
 
一级缓存持久态执行过程
第一次查询会把查询结果存到持久态中同时存在一级缓存和快照区中,
然后做修改操作user.setUsername("lilei");
修改的同时把一级缓存中的数据修改了,但是快照区没有改
最后提交事务的时候,比较一级缓存的内容和快照区的内容是否相同
如果不相同,把一级缓存内容更新到数据库中
 
 Hibernate事务的操作
 1.什么是事务
 
 2.事务特性
 
 3.不考虑隔离性产生问题
*1.脏读
*2.幻读、虚读
*3.不可重复读
 4.设置事务隔离级别
*1.mysql默认隔离级别repeatable read
 
 hibernate事务代码规范写法
 1.代码结果
try{
开启事务
提交事务
}catch(){
回滚事务
}finally{
关闭
}
 
 Hibernate绑定session
 1.session类似于jdbc的connection
 
 2.帮实现与本地绑定session
 
 3.获取与本地线程session
*1.在hibernate核心配置文件中配置

*2.调用sessionFactory里面的方法得到
 
 
 Hibernate 的api使用
 
 
 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对象里面的方法得到结果

 Criteria对象
 1.使用这个对象查询操作,但是使用这个对象时候,不需要写语句,值金额调用方法实现
 
 2.实现过程
*1.创建citeria对象
*2.调用对象里面的发那个发得到结果


SQLQuery对象
 
1.使用hibernate时候,调用底层sql实现


2.实现过程
*1.创建对象
*2.调用对象的方法得到结果
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 MVC
 它不是java独有,所有的B/S结构的项目都在使用它!
 
 M  -- model模型(自己写代码)
 
 V  -- View视图 (jsp)
 
 C  -- Cotroller控制器 (Servlet)
 
 
 javaweb三层架构
 
 web层  -->与web相关的内容(Servlet)
 
 业务层 -->业务对象(Service)
 
 数据层 --> 操作数据库(DAO Data Access Object)
 
 
 
 
+++++++++++++++++++++++++++++++++++++++++++++
*********************************************
+++++++++++++++++++++++++++++++++++++++++++++




hibernate第三天
 


 
 表与表之间关系回顾
 
 1.一对多
*分类和商品关系,一个分类里面有多个商品,一个商品只属于一个分类

2.多对多
*订单和商品的关系,一个订单里面有多个商品,一个商品属于多个订单

3.一对一
*在中国,一个男人只能有一个妻子,一个女人也只有一个老公
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 











原创粉丝点击