Hibernate初出茅庐(一)
来源:互联网 发布:耳塞式耳机推荐 知乎 编辑:程序博客网 时间:2024/06/03 00:03
- 冬眠??ORM框架
- 是对JDBC进行轻量级的封装
- 在 逻辑层 和 持久层 增加一个持久层,处于项目的持久层。
- 对象化:解决“对象模型”与“关系模型”的阻抗问题(让程序员更关心业务流程,数据库更关心数据库)把关系数据库变成了Java对象,更加方便程序员的操作。
- 分层清晰,解耦性更小。
- 性能保证:Hibernate可以按不同的数据库处理不同的操作,切换数据库很方便,处理不同的操作使用的是最优化的sql语句,
- 对JDBC进行封装,增加程序的鲁棒性,不需要程序员对查询的数据进行封装。
- 导入jar包 必须包 和 可选包
- 实体类(推荐命名规则:首字母大写,类名和数据库表名一样)
- 配置对象关系映射文件(命名规则:Admin.hbm.xml)
- dtd
- hibernate-mapping(7个可选属性)
- class(21个可选属性,常用的class和table)
id(name:给主键取名,id:数据库主键的id)
主键生成策略:generator(12种生成策略)
property 属性
- hibernate.cfg.xml配置文件
session-factory
- datasource数据源
- 数据库方言:<property name=“dialect”><property/>
- <mapping>:指定管理的对象映射文件,有几个写几个
- 操作Hibernate
1.加载解析Hibernate配置文件(new Configuration)用户读取hibernate.cfg.xml配置文件并完成初始化。2.构建sessionFactory (会话工厂,是一个重量级的对象,消耗内存,在实际开发中 保证只有一个)相当于JDBC中的DriverManager加载驱动
3.打开session (相当于jdbc中的connection)得到连接
4.打开事务 开始一个事务,
5.执行操作(增删改)查不用事务 持久化操作,this.session.sava(login);
6.提交事务:如果出现异常,执行事务回滚if(ts!=null){ts.rollback}
7.关闭session
如果出现异常,导入slf4j...logger,需要添加slf4j-nop-1.5.2.jar
如何和spring一起使用可以 extends HibernateDaoSupport
- 一个Session实例代表一个与数据库的一次操作,
- Session事例通过SessionFactory获取,用完需要关闭。
- Session是线程不安全的,不同步的,所以需要保证在同一个线程中使用,可以用getCurrentSession().
- Session可以看作是持久化管理器,他是与持久化操作相关的接口。
get与load的区别
- 如果查询不到数据,get会返回null,不会报错,load查询不到数据会报错,objectNotFound
- 使用get去查询数据,会立即向数据库发出查询请求,load即使查询到数据,返回的是一个代理对象,如果后面没有使用到数据,不会向数据库发出select查询请求,如果程序真正使用到查询结果,才会发出查询请求,这个现象我们成为懒加载。
- 通过配置文件,我们可以取消懒加载
- 如何选择使用哪一个:如果确定数据库中有你要查询的数据,用get,效率会高点。如果不确定有就用load。
load的查询顺序
ORM:对象关系映射
Hibernate实体对象的三种状态(数据的三种状态(对象的三种状态)):
一、瞬态:当程序退出后,数据不存在了,(内存中)
二、持久态:存储在介质中
三、游离态:对象不由session管理的时候
一张表一个映射文件,Per.hbm.xml 对应一个bean表
使用
1.加载解析Hibernate配置文件
Configuratation cfg = new Configuration().configure();
2.//构建SessionFactory
SessionFactory sf=cfg.buildSessionFactory();
3.获得session
Session session = sf.openSession();
Session使用get和load方法的区别
Get获得对象,如果没有,返回null,load方法,如果不存在,报异常
使用Hibernate执行增删改的操作,需要使用事务(连接,事物等等打开关闭的东西,越晚打开越好,越早关闭越好。)
Hibernate增删改差
package com.tc.pojo;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration; public class HebernateTest { /** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub/** * 这一段是查询 */ //1.加载并解析Hibernate配置文件,Configuration cfg = new Configuration().configure();//2.构建SessionFactorySessionFactory sf = cfg.buildSessionFactory();//3.过的session 打开sessionSession session = sf.openSession(); ////根据id查询 返回实体bean//两种方法//Students stu=(Students)session.load(Students.class, 1);////Students stu=(Students)session.load(Students.class, 1);//System.out.println(stu.getUsername());//System.out.println(stu.getPassword());//session.close();/** * 增加操作 *///Students stu = new Students();//stu.setUsername("vv");//stu.setPassword("bb");////打开事务//Transaction tx=session.beginTransaction();//session.save(stu);////提交事务//tx.commit();////如果出现异常,tx.rollBack();//session.close();///**// * 删除操作// *///Students stu1=(Students)session.get(Students.class, 1);//Transaction tx=session.beginTransaction();//session.delete(stu1);//tx.commit();//session.close();///** * 修改操作 */Students stu2=(Students)session.get(Students.class, 3);Transaction tx1=session.beginTransaction();stu2.setUsername("aa");stu2.setPassword("AA"); session.update(stu2);tx1.commit();session.close();}}
使用Hibernate七步
1.配置hibernate.cfg.xml :Hibernate.cfg.xml在sec目录下
2.在bean实体类里配置对应的*.hbm.xml文件
导入的jar包有
1.导入Hibernate支持的jar
Hibernate3.jar 和 lib/requried目录下的所有jar
2.添加jdbc驱动jar
3.编写Hibernate.cfg.xml文件
4.编写实体类映射文件
距离说明什么是对象持久化
第二节
关系映射
Student
Class
主见生成策略
Uuid.hex:128算法,字符串
Sequence:oracle
Increment:自动增长(long short int)
Identity:应用于数据库中带有自动增长功能的
Native 用hibernate
学生 多对一 班级
单向一对多关联关系,
一方:
实体类:创建一个多的集合
映射文件 配置<set name=”实体类中set的名字” table=”关联的表”>
<key column=”关联表的字段”/>
<ont-to-many class=””
查询:把对应的多的集合查询出来
添加:使用集合操作
单向多对一关联关系
映射文件的两个属性:
cascade(级联) 和 inverse(控制反转)
属性值为none时 :所有操作都不关联,
All:所有操作都关联
Save-update:添加和更新的时候进行关联
Delete:删除的时候进行关联
控制反转:为ture时有对方负责管理关联关系
为false时:该方为主动方,由主动方管理关联关系;
Lazy 懒惰 延迟加载:ture 、false 、proxy
Ture 时 是延迟加载 反之不延迟加载
从这里开始韩老师教程笔记
一个数据库只有一个sessionFactory, 通常一个项目只用一个数据库,也就是一个项目只有一个sessionFactory,因为他是重量级的类(接口),消耗内存。
什么是单态 ????
Hibernate自动创建表:
在使用Hibernate切换数据库的时候除了修改配置文件以外还需要修改主键整成策略,一个有七种。
面试题:请列举出Hibernate常用的借口。
什么是pojo类,他有什么要求?
1.pojo类是和一张表对应的
2.有的程序员喜欢放在com.xxx.domain下
3.pojo需要一个主键属性,(通常是id主键)用于标识一个pojo对象
4.除了主键以为还有其他的属性,如name age 权限为private
5.各供set和get方法 和一个 无参的构造方法
6.pojo类就是一个javabean
SessionFactory过去session的两个方法的比较:
1.openSession 获取一个全新的session,使用完成后必须手动关闭。
2.getCurrentSession 获取和当前线程绑定的session,那么在同一个线程中,获取的session就是同一个session,这有利于事务的控制。事务提交后会自动关闭
在增删改查的时候,除了查询都需要做成事务。但是在使用getCurrentSession的时候查询也需要做成事务。而openSession不需要。
如何确定有没有关闭SessionFactory。可以通过netstat -an 命令查看。
希望以上资料能对大家有帮助 喜欢开发 关注开发 更多专注我的新浪微博 http://weibo.com/419768151
- Hibernate初出茅庐(一)
- Spring初出茅庐(一)
- 初出茅庐 【 题集 】 (一) 更新 ing ......
- oracle进阶【一】之初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- 初出茅庐
- Python脚本总结--01
- 实参时丢弃了类型 discards qualifiers discards qualifiers问题
- java 基础知识普及
- jstl 怎么读取request中的对象
- js字符串转换成数字,数字转换成字符串
- Hibernate初出茅庐(一)
- 搜索引擎学习资源收集
- java的内存泄露预防
- 爆料:阿里妈妈大规模冻结淘宝客佣金
- Android使用Displaymetrics类
- JS保留两位小数 四舍五入函数
- PL/SQL Developer使用技巧、快捷键
- flex 在canvas中支持image等的拖动
- MFC(笔记备忘)