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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Hibernate个人学习笔记.docx

1、Hibernate个人学习笔记Hibernate使用之后JDBC大部分不用再编写了轻量级框架没有侵入性适合对象关系清晰、不适合聚集性批量操作不适合需要使用数据库特定性功能的情况 课程目标: 理解O/R Mapping原理 掌握Hibernate开发的相关知识 能使用Hibernate进行实际项目开发 Hibernate高手进级:性能优化策略目录 什么是Hibernate 快速体验Hibernate的开发步骤 认识Hibernate基本核心接口 Hibernate的对象关系映射 Hibernate查询语句(HQL) 直接使用JDBC操作数据库的步骤很繁琐 JDBC操作的是关系型数据库 我们用JA

2、VA开发程序,则使用面向对象的思想 Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口Hibernate能做什么? - 理解O/R映射 Hibernate能帮助我们利用面向对象的思想,开发基于关系型数据库的应用程序 第一:将对象数据保存到数据库 第二:将数据库数据读入对象中1、第一个hibernate项目,入门1.1、Hibernate_first创建步骤1、新建java项目2、创建User Library,加入如下jar * HIBERNATE_HOME/hibernate3.jar * HIBERNATE_HOME/

3、lib/*.jar * MySql jdbc驱动 3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件 位于:hibernate-3.2etc 目录下4、定义实体类 User.java 5、定义User类的映射文件User.hbm.xml 6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中 7、编写hbm2ddl工具类:ExportDB.java将实体类 生成数据库表 public static void main(String args) /读取hibernate.cfg.xml文件 Configurat

4、ion cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); 8、开发客户端 Client.java 为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入 truepublic static void main(String args) /读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); /创建SessionFa

5、ctory SessionFactory sf = cfg.buildSessionFactory(); Session session = null; try session = sf.openSession(); /开启事务 session.beginTransaction(); User user = new User(); user.setPassword(jbjb); user.setName(不得了); user.setCreateDate(new Date(); user.setExpireDate(new Date(); /保存数据 session.save(user); /提

6、交事务 session.getTransaction().commit(); catch(Exception e) e.printStackTrace(); /回滚事务 session.getTransaction().rollback(); finally if(session != null) if(session.isOpen() /close session session.close(); 1.2、步骤总结 实体类(持久化类)的设计 实体类与关系数据库的映射 应用的开发1.3、Hibernate核心接口1.3.1 Configuration 概述:Configuration 类负责管

7、理Hibernate 的配置信息。它包括如下内容: Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。 Hibernate映射文件(*.hbm.xml)。 Hibernate配置的两种方法: 属性文件(hibernate.properties)。调用代码:Configuration cfg = new Configuration(); xml文件(hibernate.cfg.xml)。调用代码:Configuration cfg = new Configuration().configure(); com.mysql.jdbc

8、.Driver jdbc:mysql:/localhost/hibernate_first Root Root Org.hibernate.dialect.MySQLDialect true 1.3.2 SessionFactory 概述:应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,是线程安全的,整个应用只有唯一的一个会话工厂例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。 会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。

9、 他的创建很耗时的,通常放在一个静态方法里面只创建一次 static try Configuration cfg = new Configuration().configure(); factory = cfg.buildSessionFactory(); catch(Exception e) e.printStackTrace(); 调用代码:SessionFactory sessionFactory = cfg.buildSessionFactory(); 说明:SessionFactory由Configuration对象创建,所以每个Hibernate配置文件,实际上是对SessionF

10、actory的配置1.3.3 Session(会话) 概述: Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。 Session也称为持久化管理器,因为它是与持久化有关的操作接口。 Session通过SessionFactory打开,在所有的工作完成后,需要关闭。 它与Web层的HttpSession没有任何关系。 调用代码Session session = sessionFactory.openSession();2测试实体对象的生命周期2.1 junit简介: * 编写测试类xxxTest,需要继承TestCase *

11、 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如: public void testHello1() * 最好单元测试的代码单独建立一个目录 2.2了解Hibernate中CRUD操作public class SessionTest extends TestCase public void testSave1() Session session = null; Transaction tx = null; User user = null; try session = HibernateUtils.getSession(); tx = session.begin

12、Transaction(); /Transient状态 user = new User(); user.setName(李四); user.setPassword(123); user.setCreateTime(new Date(); user.setExpireTime(new Date(); /persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步 session.save(user); user.setName(王五); /session.update(user); mit(); catch(Exception e) e.printStackTrace()

13、; tx.rollback(); finally HibernateUtils.closeSession(session); /detached状态 user.setName(张三); try session = HibernateUtils.getSession(); session.beginTransaction(); /persistent状态 session.update(user); session.getTransaction().commit(); public void testReadByGetMethod1() Session session = null; try se

14、ssion = HibernateUtils.getSession(); session.beginTransaction(); /马上发出查询sql,加载User对象 User user = (User)session.get(User.class, 402880d01b9bf210011b9bf2a2ff0001); System.out.println(user.name= + user.getName(); /persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步 user.setName(龙哥); session.getTransaction().com

15、mit(); public void testReadByGetMethod2() Session session = null; try session = HibernateUtils.getSession(); session.beginTransaction(); /采用get加载数据,如果数据库中不存在相应的数据,返回null User user = (User)session.get(User.class, asdfsafsdfdsf); session.getTransaction().commit(); public void testReadByLoadMethod1() S

16、ession session = null; try session = HibernateUtils.getSession(); session.beginTransaction(); /不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载) /延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句) /hibernate延迟加载实现原理是代理方式 User user = (User)session.load(User.class, 402880d01b9bf210011b9bf2a2ff0001); System.out.println(user.name= + us

17、er.getName(); /persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步 user.setName(发哥); session.getTransaction().commit(); public void testReadByLoadMethod2() Session session = null; try session = HibernateUtils.getSession(); session.beginTransaction(); /采用load加载数据,如果数据库中没有相应的数据 /那么抛出ObjectNotFoundException Use

18、r user = (User)session.load(User.class, 55555555); System.out.println(user.getName(); session.getTransaction().commit(); public void testUpdate1() Session session = null; try session = HibernateUtils.getSession(); session.beginTransaction(); /手动构造的detached状态的对象 User user = new User(); user.setId(402

19、880d01b9be8dc011b9be9b23d0001); user.setName(德华); session.update(user); session.getTransaction().commit(); public void testDelete1() Session session = null; try session = HibernateUtils.getSession(); session.beginTransaction(); / /手动构造的detached状态的对象/ User user = new User();/ user.setId(402880d01b9be

20、8dc011b9be9b23d0001);/ user.setName(德华);/ session.delete(user); User user = (User)session.load(User.class, 402880d01b9be8dc011b9be9b23d0001); session.delete(user); session.getTransaction().commit();2.3了解get和load的区别? * get不支持lazy,load支持lazy * 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常2.4 Transient、persist

21、en 、detached的状态特征transient状态的特征? * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 persistent状态的特征? * persistent状态,当属性发生改变的时候,Hibernate会自动和数据库同步库数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步 detached状态的特征? * 在数据库中有与之匹配的数据 * 没有纳入session的管理 2.5 QueryTestpublic void testQuery() Session session = null; try ses

22、sion = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); Query query = session.createQuery(from User); query.setFirstResult(0); query.setMaxResults(2); List userList = query.list();for(Iterator iterator=userList.iterator();iterator.hasNext();) User user = (User)iterator.next(

23、); System.out.println(user.getId(); System.out.println(user.getName(); mit();3、Hibernate基本映射3.1 映射关系实体类-表实体类中的普通属性-表字段采用标签映射成数据库表,通过、标签将普通属性映射成表字段所谓普通属性指不包括自定义类、集合和数组等注意:如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名3.2 实体类的设计原则 * 实现一个默认的(即无参数的)构造方法(constructor) * 提供一个标识属性(identifier property)(可选) *

24、使用非final的类 (可选),final之后就不能继承了 * 为持久化字段声明访问器(accessors) get、set方法3.3 主键生成策略: uuid、native和assigneduuid 用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。native 根据底层数据库的能力选择identity, sequence 或者hilo中的一个。assigned 让应用程序在save()之前为对象分配一个标示符。这是 元素没有指定时的默认生成策略。 主键这个时候必须手动分配4. hiberna

25、te多对一关联映射4.1 多对一关联映射的本质: * 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用,多个用户(user)属于一个组(group)会在多的一端加入一个外键,指向一的一端,这个外键是由中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致public class User private int id; private String name; private Group group;标签的定义示例: * many-to-one的映射最常用,也是最容易理解和编写的 生成的DDL语句如下create table T_Group (id varchar(255) not null, name varchar(255), primary key (id)create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime datetime, expireTime datetime, groupid varchar(255

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

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