ImageVerifierCode 换一换
格式:DOCX , 页数:72 ,大小:673.78KB ,
资源ID:10228506      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10228506.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java相关课程系列笔记之十四Hibernate学习笔记建议用WPS打开.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java相关课程系列笔记之十四Hibernate学习笔记建议用WPS打开.docx

1、Java相关课程系列笔记之十四Hibernate学习笔记建议用WPS打开Hibernate学习笔记Java相关课程系列笔记之十四笔记内容说明Hibernate(梁建全老师主讲,占笔记内容100%);目 录一、 Hibernate的概述 11.1 Hibernate框架的作用 11.2 Hibernate访问数据库的优点 11.3 JDBC访问数据库的缺点 11.4 Hibernate的设计思想 1二、 Hibernate的基本使用 22.1 Hibernate的主要结构 22.2 Hibernate主要的API 22.3 Hibernate使用步骤 22.4 HQL语句(简要介绍) 6三、 数

2、据映射类型 73.1映射类型的作用 73.2 type映射类型的两种写法 7四、 Hibernate主键生成方式 84.1五种生成方式 8五、 Hibernate基本特性 95.1对象持久性 95.2处于持久状态的对象具有的特点 95.3三种状态下的对象的转换 95.4批量操作:注意及时清除缓存 95.5案例:三种状态下的对象使用 105.6一级缓存机制(默认开启) 105.7一级缓存的好处 105.8管理一级缓存的方法 105.9延迟加载机制 115.10具有延迟加载机制的操作 115.11常犯的错误 125.12延迟加载的原理 125.13 Session的get和load方法的区别 12

3、5.14延迟加载的好处 125.15案例:测试延迟加载 125.16案例:重构NetCTOSS资费管理模块 135.17 Java Web程序中如何用延迟加载操作(OpenSessionInView) 15六、 关联映射 186.1一对多关系one-to-many 186.2多对一关系many-to-one 196.3多对多关联映射many-to-many 196.4关联操作(查询join fetch/级联cascade) 216.5继承关系映射 24七、 Hibernate查询方法 277.1 HQL查询 277.2 HQL和SQL的相同点 277.3 HQL和SQL的不同点 277.4 H

4、QL典型案例 277.5 Criteria查询 307.6 Native SQL原生SQL查询 31八、 Hibernate高级特性 328.1二级缓存 328.2二级缓存开启方法及测试 328.3二级缓存管理方法 338.4二级缓存的使用环境 338.5查询缓存 338.6查询缓存开启方法及测试 338.7查询缓存的使用环境 33九、 Hibernate锁机制 349.1悲观锁 349.2悲观锁的实现原理 349.3悲观锁使用步骤及测试 349.4乐观锁 359.5乐观锁的实现原理 359.6乐观锁使用步骤及测试 35十、 其他注意事项 3610.1源码服务器管理工具 3610.2利用MyE

5、clipse根据数据表自动生成实体类、hbm.xml 3610.3根据实体类和hbm.xml生成数据表 3710.4 Hibernate中分页查询使用join fatch的缺点 3710.5 Hibernate的子查询映射 381、Hibernate的概述1.1 Hibernate框架的作用Hibernate框架是一个数据访问框架(也叫持久层框架,可将实体对象变成持久对象,详见第5章)。通过Hibernate框架可以对数据库进行增删改查操作,为业务层构建一个持久层。可以使用它替代以前的JDBC访问数据。1.2 Hibernate访问数据库的优点1)简单,可以简化数据库操作代码。2)Hibern

6、ate可以自动生成SQL,可以将ResultSet中的记录和实体类自动的映射(转化)。3)Hibernate不和数据库关联,是一种通用的数据库框架(支持30多种数据库),可以方便数据库移植。任何数据库都可以执行它的API。因为Hibernate的API中是不涉及SQL语句的,它会根据Hibernate的配置文件,自动生成相应数据库的SQL语句。1.3 JDBC访问数据库的缺点1)需要编写大量的复杂的SQL语句、表字段多时SQL也繁琐、设置各个问号值。2)需要编写实体对象和记录之间的代码,较为繁琐。3)数据库移植时需要修改大量的SQL语句。1.4 Hibernate的设计思想Hibernate是

7、基于ORM(Object Relation Mapping)思想设计的,称为对象关系映射。负责Java对象和数据库表数据之间的映射。Hibernate是一款主流的ORM工具,还有其他很多ORM工具,如:MyBatis(以前叫iBatis)、JPA。Hibernate功能比MyBatis强大些,属于全自动类型,MyBatis属于半自动。但全自动会有些不可控因素,因此有些公司会用MyBatis。ORM工具在完成Java对象和数据库之间的映射后:1)在查询时,直接利用工具取出“对象”(不论是查询一条记录还是多条记录,取出的都是一个个对象,我们不用再去转化实体了)。2)在增删改操作时,直接利用工具将“

8、对象”更新到数据库表中(我们不用再去把对象转成数据了)。3)中间的SQL+JDBC细节,都被封装在了工具底层,不需要程序员参与。 注意事项:v Java程序想访问数据库,只能通过JDBC的方式,而Hibernate框架也就是基于ORM思想对JDBC的封装。v Hibernate是以“对象”为单位进行数据库的操作。2、Hibernate的基本使用2.1 Hibernate的主要结构1)hibernate.cfg.xml(仅1个):Hibernate的主配置文件,主要定义数据连接参数和框架设置参数。 注意事项:就是个xml文件,只是名字比较奇葩!2)Entity实体类(n个,一个表一个):主要用于

9、封装数据库数据。3)hbm.xml映射文件(n个):主要描述实体类和数据表之间的映射信息。描述表与类,字段与属性的对应关系。 注意事项:hbm.xml是个后缀,如:命名可写Cost.hbm.xml。2.2 Hibernate主要的API1)Configuration:用于加载hibernate.cfg.xml配置信息。用于创建SessionFactory。2)SessionFactory:存储了hbm.xml中描述的信息,内置了一些预编译的SQL,可以创建Session对象。3)Session:负责对数据表执行增删改查操作。表示Java程序与数据库的一次连接会话,是对以前的Connection

10、对象的封装。和JSP中的session不是一回事,就是名字一样而已。4)Query:负责对数据表执行特殊查询操作。5)Transaction:负责Hibernate操作的事务管理。默认情况下Hibernate事务关闭了自动提交功能,需要显式的追加事务管理(如调用Transaction对象中的commit();提交事务)! 注意事项:v 这些API都是在Hibernate包下的,导包别导错!v 第一次访问数据库比较慢,比较耗资源,因为加载的信息多。2.3 Hibernate使用步骤step1:建立数据库表。step2:建立Java工程(Web工程也可),引入Hibernate开发包和数据库驱动包

11、。必须引入的包:hibernate3.jar、cglib.jar、dom4j.jar、commons-collections.jar、commons-logging.jar等step3:添加hibernate.cfg.xml配置文件,文件内容如下:!DOCTYPE hibernate-configuration PUBLIC -/Hibernate/Hibernate Configuration DTD 3.0/EN org.hibernate.dialect.OracleDialect jdbc:oracle:thin:localhost:1521:dbchang system chang

12、oracle.jdbc.driver.OracleDriver true true 注意事项:应该放在源文件的src目录下,默认为hibernate.cfg.xml。文件内容是Hibernate工作时必须用到的基础信息。step4:编写Entity实体类(也叫POJO类),例如:资费实体类Cost private Integer id; /资费 ID private String feeName; /资费名称 private Integer baseDuration; /基本时长 private Float baseCost; /基本定费 private Float unitCost; /单位

13、费用 private String status; /0:开通;1:暂停; private String descr; /资费信息说明 private Date createTime; /创建日期 private Date startTime; /启用日期 private String costType; /资费类型getter/setter方法 注意事项:POJO类表示普通类(Plain Ordinary Old Object),没有格式的类,只有属性和对应的getter/setter方法,而没有任何业务逻辑方法的类。这种类最多再加入equals()、hashCode()、toString(

14、)等重写父类Object的方法。不承担任何实现业务逻辑的责任。step5:编写hbm.xml映射(文件)描述信息:映射文件用于指明POJO类和表之间的映射关系(xx属性对应xx字段),一个类对应一个映射文件。例如:Cost.hbm.xml内容如下:!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN !- - !- 表明此为主键列,且必须写否则xml报错,主键映射 - !- 或双标签 - COST_SEQ_CHANG !-也可写成 ,主键列同理!- 其他省略 注意事项:v 映射文件默认与POJO类放

15、在一起;命名规则为:类名.hbm.xml。v hbm.xml中已写出的属性与字段的映射要一一对应,若表中没有某个字段,却写了映射关系,则报错:找不到实体类。step6:利用Hibernate API实现DAO1)新建HibernateUtil类,用于封装创建Session的方法。如下:每个用户会对应一个Session,但是SessionFactory是共享的。public class HibernateUtil private static SessionFactory sf; static/不用每次都加载配置信息,所以放static块中,否则每次都加载会耗费资源 Configuration

16、conf=new Configuration();/加载主配置hibernate.cfg.xml conf.configure(/hibernate.cfg.xml); sf=conf.buildSessionFactory();/获取SessionFactory public static Session getSession()/获取Session Session session =sf.openSession(); return session; 2)新建CostDAO接口 public Cost findById(int id); public void save(Cost cost)

17、; public void delete(int id); public void update(Cost cost); public List findAll();3)新建CostDAOImpl类,用于实现CostDAO接口public class CostDAOImpl implements CostDAO private Session session; public CostDAOImpl () /不想老写获得session的方法,就写在构造器中 session=HibernateUtil.getSession(); /* get方法执行查询,按主键当条件查询,如何判断是主键,是根据写

18、的描述文件来定,get方法就是findById,就是按主键去查,需指定:操作哪个类和id(主键)条件值即可,其他条件查询做不了 */ public Cost findById(int id) /Session session=HibernateUtil.getSession(); Cost cost=(Cost)session.get(Cost.class,id); session.close(); return cost; /* save方法执行增加操作,注意1:获取事务并开启,增删改要注意,查询可以不管事务,因为没对数据库进行修改;注意2:主键值根据hbm.xml中的定义生成,执行后,会先

19、获取序列值,再去做insert操作。即先:select COST_SEQ_CHANG.nextval from dual; 然后:insert into */ public void save(Cost cost) /Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction();/打开事务 session.save(cost); mit();/提交事务 session.close();/释放 /* delete方法执行删除操作,由于Hibernate以“对象”为单位进行数据库操作,所以

20、这里要传进去一个对象,虽然是个对象,但还是按主键做条件删除,只要把主键值设置上就行,其他非主键值不用管。也可先通过id查再删 */ public void delete(int id) /Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); Cost cost=new Cost(); cost.setId(id); session.delete(cost); mit(); session.close(); /* update方法执行修改操作, */ public void u

21、pdate(Cost cost) /Session session=HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); session.update(cost);/将cost对象更新到数据库 mit(); session.close(); /* 特殊查询,SQL语句:String sql=select * from COST_CHANG; HQL语句:String hql=from Cost; (Hibernate Query Language)是面向对象的查询语句。from后写映射的类名,它是Hiber

22、nate中特有的查询语句,根据映射的类去查询。 */ public List findAll() /Session session=HibernateUtil.getSession(); String hql=from Cost;/HQL语句 Query query=session.createQuery(hql); List list=query.list();/执行查询,返回List集合 session.close(); return list; 4)新建TestCostDAO类,使用junit测试 Test public void testFindById()/当get方法没有记录时,返

23、回null CostDAO costDao = new CostDAOImpl(); Cost cost = costDao.findById(1); System.out.println(cost.getName();System.out.println(cost.getBaseDuration(); System.out.println(cost.getBaseCost(); System.out.println(cost.getUnitCost(); System.out.println(cost.getDescr(); Test public void testSave()/id主键列由Hibernate管理,这里不用设置 Cost cost=new Cost(); cost.setName(2013计时); cost.setUnitCost(0.8f); cost.setDescr(2013-08-09计时,0.8元/小时。); cost.setStatus(0); cost.setCreaTime(new Date(System.currentTimeMillis(); CostDAO costDao = new CostDAOImpl(); costDao

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1