




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate一基本概念1. Hibernate定义:是一个基于java,轻量级的ORM框架2. 轻量级:运行时耗费资源少(cpu,内存)3. ORM:(Object RelationDB Mapping)是由JDBC实现,且风格是PreparedStatement的4. Mapping:(映射)特点:(1) 对象和表名对应(2) 对象的属性和表的字段对应(3) 属性的值和数据库的值相对应(数据库中一条值和一个实例对象对应)(4) 理论上一个实例对象可以对应多个表(5) 一个表可以对应多个对象(6) 一般一条记录对应一种实例中的一个,可对应多种实例对象(7) 实例的属性个数与数据库的字段个数可以任意(多对多)(8) 两边的字段名称可以不一样(随意)(9) 类型以可以相互转化为准(10) 数据库可以没有主键,对象必须有主键(至少有一个属性的值是跟别的实例对象不同,用来区分)二Hibernate的功能:使数据持久化三Hibernate有什么:(1)Session(2)SessionFactory(3)Transaction(事务)(4)TransactionFactory(5)Connection providerHibernate的配置文件分两类:*.cfg.xml(配置描述文件)和*.hbm.xml(映射描述文件)*.cfg.xml:(1)存放的位置在当前类的根目录下(src)(2)默认名称为hibernate.cfg.xml(3)里面主要包含四个方面的内容:与数据库的连接 可选配置(注:dialect配置必须有) mapping资源文件的注册(实例对象的路径,“.”变为“/”,后缀为.hbm.xml) 二级缓存的配置oracle.jdbc.driver.OracleDriverjdbc:oracle:thin:localhost:1521:LIHUIFEN caissa caissa org.hibernate.dialect.Oracle9iDialecttrue*.hbm.xml:(1)存放的位置在与被描述的对象的位置相同(与实例对象同一个文件夹下)(2)文件名称:被描述的类.hbm.xml(3)有四个部分:类与表的映射关系 主键的映射关系 属性与字段的映射关系 数据库表之间的关系的映射注:generator配置中assigned表示此表的主键(id)由用户自定义,若为native则表示由据库决定四怎样使用Hibernate1首先创建hibernate环境(1)在WEB-INF中的lib中引包hibernate3.jar和lib 中的required中的jar包(2)在工程属性中引WEB-INF中lib包2.配置文件(*.cfg.xml和*.hbm.xml)(1)在实例对象所在根目录下新建一个hibernate.cfg.xml(2)在实例对象所在的同一个目录下新建一个文件:*.hbm.xml(3)内容同上边所述3.写实现类(1)在DAOImpl下写一个实现类实现DAO(2)使用Hibernate完成create方法/1.定义SessionSession s = null;try/2.建立SessionFactroy SessionFactory sf = new Configuration().configure(注:若.cfg.xml的名字不为hibernate,则在此必须写他的名字,不得省略).bildSessionFactory();/3.打开sessions = sf.openSession();/4.建立事务Tranaction t = s.beginTransaction();/5.执行sessions.save(实例名);/6.由事务提交mit();catch(Exception err) err.printStackTrace();finally/7.关闭Sessions.close();六事务特性(ACDI):原子性、一致性、稳定性、隔离性Hibernate事务属性:(1) hibernate.transaction.factory_class:决定事务由哪个工厂实现(默认为由JDBC实现)(2) hibernate.hbm2ddl.auto:运行时自动建表,关闭时将删除,用于测试DDL:数据定义语言(create/drop/alter table)事务策略配置:通过设置Hibernate配置属性hibernate.transaction.factory_class来指定一个Transaction实例的工厂类。有三个标准(内建)的选择:(1)org.hibernate.transaction.JDBCTransactionFactory(委托给数据库(JDBC)事务,默认为此)(2)org.hibernate.transaction.JTATransactionFactory(委托给JTA)(3)org.hibernate.transaction.CMTTransactionFactory(委托给EJB的Bean)七一些常识:世界上最大型的两种关系型数据库系统(RDBMS):DB2和Oracle对于服务器来说,JBoss是开源里做得最好的,商业方面最好的:weblogic,websphere类必须要有主键,数据库可以没有主键八元数据:描述数据的结构元元数据:元数据的结构九hibernate-mapping属性:(1).default-cascade:缺省的级联(2)default-lazy:缺省的延迟装载lazy查询原理:第一次查询只返回n个查到的对象的主键,别的字段为空,共查n次,当要获取某一对象除主键外的 其他字段时,再去数据库根据主键找出其他信息,因此共进行n+1次查询十class(类与表的对应)的属性:(1)name(类名全路径)(2)table(表名)(3)dynamic-update(只更新那些改变过的字段)(4)dynamic-insert(只包含那些非空值字段)(5)optimistic-lock(乐观锁):隔离级别低(6)lazy(延迟转载)十一.id(主键)的属性:(1) name(主键属性名)(2) type(标识的hibernate类型):可不写(3) column(数据库中对应的字段名):若与属性名相同,可不配(4) :主键由自己定十二.:复合主键十三.property(属性与字段的映射)的属性:(1) name:(属性名)开头两个字母必须为小写(2) column(字段名)(3) lazy(4) optimistic-lock(5) update,insert注:数据库中不存在多对多的表,一般为多对一和一对多的表,如果想表示多对多的关系,则需要再加一个关系表来存放两个表的关系十四.组件映射(component mapping):属性同property元素把子对象的一些元素与父类对应的表的一些字段映射起来,然后组件可以定义它们自己的属性,主键或集合十五.连接(join):将一个类的属性映射到多张表十六.与对象共事:瞬时对象(TO):内存中不受session控制,与session无关的对象持久化对象(PO):受到session控制的对象脱管对象(DO):曾经受到session控制,而后session关闭后就不受session控制的对象十七.在逻辑层应用session(1) load(类名.class,”id值”):根据主键值查找对象,得到的是一个MODEL(2) get():功能同上(3) load与get的区别:load()是先访问内存,若没有再访问数据库,而get()是直接访问数据库若根据主键查不到值,则load()是报告例外,而get()则返回null推荐使用load().十八.HQL查询语言:1. String sql= “select p from ProductModel p where p.uuid=123”(或p.uuid=?或p.uuid=:uuid)-三种赋值方式。2. 具体的用法:(1)Query q = s.createQuery(sql);(2)对于第二种赋值,在此处应相应地写为:q.setString(0,”123”);. (3)若为第三种赋值,则此处写为:q.setString(“uuid”,”123”);(4) List list = q.list();(5) Iterator ir = list.iterator(); while(ir.hasNext() ProductModel pm = (ProductModel)ir.next(); 3. 若查询结果为多个字段,则结果用Object 存放,若查询结果类型为一个字段的值,则用明确的数据类型,比如String 去存放结果4. 当用HQL语言无法表达一些查询时,可以用native SQL语言表达5. flush:把值从内存刷到数据库在以下情况会执行flush:(1) 在查询执行之前(但load查询除外)(2) 在调用commit()时(3) 在调用session.flush()时6. 新增的方法:save(pm)-将TOPO(把数据放到内存中),在commit()时,才flush,将值从内存刷到数据库7. 修改的方法:(1).update(pm),优点是:它针对的是TO和PO,根据uuid查找修改了的值(2).增改一次完成的方法:saveOrUpdate(),若没有此对象则新增,若有此对象则修改 (3).使用merge(),当在内存中查到uuid相同时,就用TO覆盖PO十九.关于事务:1. 属性:ACDI(Atomicity,Consistency,Isolation,Duravility)2. 事务模型:(1) 平面事务模型(经典事务模型):不允许嵌套(all-or-nothing),要么成功,要么回滚(2) 嵌入式事务模型:3. 界定事务边界的方式:(控制事务的方式)(1) 编程式事务:在程序中使用事务API来实现事务。特点:能够灵活控制事务边界(2) 声明式事务:在xml里部署声明来实现事务。特点:实现简单(推荐此种方式)(3) 客户发起的事务:在客户代码中启动并结束事务4. 针对声明式事务的事务属性(1) required:若客户端无事务,则服务端新启事务 若客户端有事务,则服务端加入此事务(2)requiresNew:不论客户端有无事务,服务端都新启事务,如果客户端有事务,服务端则将原先的事务挂起(3)supports:若客户端无事务,则服务端也无事务 若客户端有事务,则服务端加入此事务(4) mandatory:若客户端有事务,则服务端加入 若客户端无事务,则服务端报错(5) notSupported:若不论客户端有无事务,服务端都无事务,若客户端有事务,则服务端挂起此事务(6) never:若客户端无事务,则服务端无事务 若客户端有事务,则服务端报错5. 对象事务服务:(OTS)分为两种:Java事务服务(JTS)和JTA(事务API) 6. JTA:由两套接口组成:用于X/Open XA资源管理器的接口(我们不用关注) 用于支持编程式事务控制的接口(javax.transaction.UserTransaction),JTA是事务架构,由服务器去实现,它支持分布式。但JDBC不支持分布式,只能在本机使用7.事务隔离性:事务内部的数据对于外界的可见性,可操作性8.事务隔离级别:(1)READ UNCOMMITED(读取未提交):下面的问题都可出现(级别最低)(2) READ COMMITED(读取已提交):不允许脏读(3) REPEATABLE READ:不允许1和2(4) SERIALIZABLE:三个都不允许三个存在的问题:(1)脏读(行级读锁),(2)不可重复读(行级写锁),(3)幻影读(表级锁)隔离级别越高,性能越低8.对于客户代码的事务:在客户代码中直接使用JTA控制事务(JNDI+RMI)。需要在cfg中配JTA工厂JNDI:用于在网络中查找资源查找方法:(1)设置具体要访问哪一个服务端和端口,和要访问服务端的jndi工厂(在tomcat中可以省略) java.util.Properties env = .(2) 获得JNDI初始上下文Context ctx = new InitialContext(env);(3) 借助于JNDI,查找JTA UserTransaction 接口Object obj = context.lookup(“java:comp/env/UserTransaction”);-标准的为这个字符串(TomCat)javax.sql.DataSource ds = (javax.sql.DataSource)obj;conn = ds.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);(4) 真正执行sql,实现想要的功能ResultSet rs = pstmt.executeQuery();取值while(rs.next()8. 乐观锁:可读不可写。悲观锁:不可读和写9. 对于增改查的详细内容:增(save())(1)在commit时,TO-PO (2)根据PO类去根据全路径找.hbm.xml (3)PO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辨识谣言课件
- 基于工业物联网的刀具实时状态监测与异常预警模型构建
- 基于区块链的整经工艺质量溯源与供应链韧性增强
- 城市级电子卡系统与跨部门协同效率瓶颈
- 国际技术壁垒背景下铝镁碳不烧砖核心原料国产化替代技术突破路径
- 四氟苯甲酸医药中间体纯度控制与杂质谱分析对制剂安全性的量化影响
- 蛋白质工程与功能研究-洞察及研究
- 可降解线束材料在循环经济中的全生命周期成本评估
- 发动机液压悬置的纳米涂层技术对长期疲劳寿命的影响机制研究
- 卷铁芯变压器在新能源微电网中的动态适应机制研究
- 牛羊养殖技术课件合集
- n4考试题真题及答案
- 餐饮场所消防安全管理制度范本
- 防狗咬防蜂安全教育
- 实验室设备管理员培训
- 仓单质押担保仓储融资服务合同
- 5086铝合金电辅助拉伸:锯齿塑性失稳与变形机理的深度剖析
- 美团公司配送管理制度
- 2025年四川省成都市中考生物真题(解析版)
- 山东省烟台市芝罘区(五四制)2023-2024学年八年级下学期语文期末试卷(含答案)
- 检验检测薪酬管理制度
评论
0/150
提交评论