Hibernate.docx
- 文档编号:13050399
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:11
- 大小:87.06KB
Hibernate.docx
《Hibernate.docx》由会员分享,可在线阅读,更多相关《Hibernate.docx(11页珍藏版)》请在冰点文库上搜索。
Hibernate
c配置Hibernate:
在myeclipsedatesource模式下新建连接,然后添加Hibernate引用,Myeclipse->addhibernateXXXXX,选择配置文件目录,选择连接为刚新建连接,选择默认工厂类型文件路径。
SessionFactory等价于JDBC中DriverManger
Session等价于JDBC中Connection
说明,hibernate只会读取hibernate.cfg.xml自己配置文件,并不会读取其他的映射文件。
如果table名为关键字则加上~table名~
Name属性值都为类中属性名,而columns属性都为表中列名
1、在hibernate.cfg.xml文件配置文件路径:
2、在hibernate初始化时操作数据库:
可选值:
create-drop每次启动时创建表,结束时删除
Create每次启动时先删除原表在创建
Update每次启动时先匹配数据库中表与映射文件,如果不一致则更新表
Validate每次启动时校验,不更新表,不一致时报错
3、HibernateSessionFactory工厂类是单例模式,由于hibernate初始化十分耗时,故只希望初始化一次。
4、若hibernate配置文件不为默认的配置文件名及路径:
改变工厂类静态初始化方法:
configuration.configure(configFile);中参数位置。
5、hibernate事物不会自动提交,需手动提交:
(Session为org.hibernate.Session;);
Sessions=HibernateSessionFactory.getSession();
Transactiontr=s.beginTransaction();
数据库操作…
mit();
6、hbm.xml文件中主键sequence自动增长
—自动增长--> —sequence名--> 7、显示sql字符串hibernate.cfg.xml中配置: 8、(Session)load和get的区别: Load不立即访问数据库,而是第一次访问的时候加载数据库(当一次用到load返回的对象),Load返回值不会为空,即使数据库中没值,会放回一个新的对象但其属性值为空。 9、persist(同save)如果没开启事务会抛异常不执行sql 10、瞬时、持久、托管 瞬时是指new出后未放入session中,持久是放入session中并且存入数据库,同时对象更改时,数据库同时更新。 托管则为session关闭(或事务提交之后),对象更改数据库并不更改。 11、查询: 1、HQL查询 适用情况: 常用方法,比较传统,类似jdbc。 缺点: 新的查询语言,适用面有限,仅适用于Hibernate框架。 HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。 示例代码: static void query(String name){ Session s=null; try{ s=HibernateUtil.getSession(); //from后面是对象,不是表名 String hql="from Admin as admin where admin.aname=: name";//使用命名参数,推荐使用,易读。 Query query=s.createQuery(hql); query.setString("name", name); List for(Admin admin: list){ System.out.println(admin.getAname()); } }finally{ if(s! =null) s.close(); } } 2、对象化查询Criteria方法: 适用情况: 面向对象操作,革新了以前的数据库操作方式,易读。 缺点: 适用面较HQL有限。 static void cri(String name,String password){ Session s=null; try{ s=HibernateUtil.getSession(); Criteria c=s.createCriteria(Admin.class); c.add(Restrictions.eq("属性名",值));//eq是等于,gt是大于,lt是小于,or是或, c.add(Restrictions.eq("属性名", 值)); List for(Admin admin: list){ System.out.println(admin.getAname()); } }finally{ if(s! =null) s.close(); } } 3、sql查询 static List sql() { Session s = HibernateUtil.getSession(); Query q = s.createSQLQuery("select * from user").addEntity(User.class); List s.close(); return rs; } 12、分页: 1、query: Queryq=session.createQuery(hql); q.setFirstResult(fy1); q.setMaxResults(count); 从fy1记录处开始取count条。 2、Criteria: Criteriac=session.createCriteria(class); c.setFirstResult(fy1); c.setMaxResults(count); 从fy1记录处开始取count条。 13、结果集如果只有一条query.uniqueResult();若有多条报异常 14、对象状态: 15、一对一配置: (查主对象会同时查出从对象,查从对象会对主对象懒加载) 主对象(人): 从对象(身份证): 主键生成: --主键生成方式为外键-->> —将主键值设置为name属性的值--> 16、多对一配置 一的一方(部门): 多的一方(员工): 浅色部分表示为ture时表示将表的控制权限付给多(many)的一方 Cascade可选值: All对所有操作进行级联 Save-update执行保存和更新操作时进行级联 Dekete删除时级联 None不级联 17、多对多配置(老师-关系-学生)(多对多有效率问题,一般用单项关联)最好在某一端配置inverse="true"让另一端维护关系表: 老师: 学生: 18、组建关联关系: 用户名字有多字段(firstname、secondname)(name为用户自定义的class) ………… 19、继承配置(技术工继承自员工): 1: 方法1---在同一张表中: 效率高,特有字段不能为非空 技术工(同在员工配置文件下配置): ………… 员工: 增加判断类型(鉴别器) 同时在顶部class处需配置discriminator-value 2: 方法2—在不同列在不同表中: 可能很多表,表多效率低 技术工(在员工配置文件配置): 员工: 3: 方法1方法2结合。 4: 员工表作为虚表(可选操作),各子类独有一张表(完整信息) 技术工(在员工配置文件配置): 员工: abstract="true" —可选--> 20、缓存: 一级缓存: Session缓存,Session关闭Session缓存销毁,未有保护会内存溢出 放入缓存方法: get,update,saveOrUpdate,load,list,iterate,lock 从缓存中取数据方法: get,load,iterate 清空缓存: evict(objceto);clear(); 二级缓存: SessionFactory缓存第三方框架完成二级缓存的key为id,value为实体对象 开启二级缓存: true 配置查询启用缓存: 配置缓存类型: org.hibernate.cache.OSCacheProvider Provider_class可选值: 1、org.hibernate.cache.OSCacheProvider须有相应包,并有相应配置文件注: 此标签必须放在mapping标签后面 Usage可选值: read-only: 只读,不能修改效率最高。 read-write: 能够并发修改 nonstrict-read-write: 不支持并发修改,效率较rerad-write高 transactional: 很少..可回滚缓存数据oscache不带有此策略 清空缓存: 获得工厂类调用evict()方法 HibernateSessionFactory.getSessionFactory().evict(Class) 21、查询统计信息: cfg.xml中配置 同时代码中 Statisticsst=HibernateSessionFactory.getSessionFactory().getStatistics(); 22、急迫内联(innerjoinfetch)与非急迫内联(innerjoin) 急迫内联会返回对象类型 非急迫则会返回object类型数组 23、悲观锁和乐观锁: 悲观锁开销大不介绍…. 乐观锁: 在映射文件中的 24、离线查询: DetachedCriteriadc= DetachedCriteria.forClass(Filmtype.class); 用法同Criteria但不需要用Session创建 ………………加入条件……………… 通过dc.getExecutableCriteria(Session对象);获得Criteria
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate