guokehua(@yahoo.com.cn oy Java 1010 17 Hibernate详角 2008-3-10 郭克华EE框架实战教学视频
2008-3-10 1 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 17Hibernate Hibernate详解
guokehua(@yahoo.com.cn 了y持久化层- O/R Mapping 」基于BS的典型三层架构 1d展现层( Presentation 业务逻辑层 持久化层(Data Laver) ( Buseness Layer) source Layer) Web Work/Struts loc Spring loc Hibernate loC容器, 映射文件 Action. Form Bean ,配 置文件,模板页面 AOP, Hibernate的支 Hibernate接口, 持,事务管理 DAO模式 Domain Model Business Objects 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 2 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 持久化层-O/R Mapping O/R Mapping 基于B/S的典型三层架构 的典型三层架构
guokehua(@yahoo.com.cn oy yava! ibernate核心接口 业务逻辑层 Lifecycle Persist Interceptor 1010 Class Validatable UserType 持久化层 Session Factory Session Transaction Query Configuration JNDI JDBC JTA 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 3 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 Hibernate Hibernate核心接口
guokehua(@yahoo.com.cn oy Java! org.hibernate. cfg Configuration 作用: Configuration类负责管理 Hibernate的 配置信息: hibernate. cfgxmi Hibernate映射文 1010 件(* lbm.xn);生成 session Factory 使用方法: 口读Xm文件( hibernate cfe g-xml 9 Configuration cfg new Configuration O;, 然后调用它的 configured方法,默认读 hibernate. cfg xml 1口 configur方法可以指定参数 o a add Resource(String path)方法指定hbm文件路径 口 add class(class persistentClass)方法指定类 口注意:这是一个瞬态对象,一旦 sessionFactory 建立成功就被丢弃了,占据资源较少 008-3-10 郭克华J2E框架实战教学视频
2008-3-10 4 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 org.hibernate.cfg.Configuration ¾ 作用 :Configuration Configuration 类负责管理Hibernate Hibernate 的 配置信息:hibernate. hibernate.cfg .xml ;Hibernate Hibernate映射文 件(*.hbm .xml );生成sessionFactory sessionFactory ¾ 使用方法 : 读Xml文件(hibernate. hibernate.cfg .xml ) Configuration Configuration cfg = new Configuration() = new Configuration(); , 然后调用它的configure configure()方法,默认读 hibernate. hibernate.cfg .xml configure configure()方法可以指定参数 方法可以指定参数 addResource addResource (String path) 方法指定hbm文件路径 addClass addClass (Class persistentClass persistentClass ) 方法指定类 注意: 这是一个瞬态对象,一旦 这是一个瞬态对象,一旦sessionFactory sessionFactory 建立成功就被丢弃了,占据资源较少 建立成功就被丢弃了,占据资源较少
guokehua(@yahoo.com.cn oy Java! org. hibernate Session Factory >概述:应用程序从 Session Factory里获得 Session 实例。通常情况下,一个数据库只有唯一的一个 Session Factory,例如在应用初始化时被创建。 会话工厂缓存了生成的SQL语句和 Hibernate在运行 时使用的映射元数据。 >言下之意: session Factory消耗内存,目的是为每 个客户生成连接,问 session Factory实例适合放在 哪里?( application内) >怎样生成? Session Factory session Factory cfg. buildSessionFactoryo 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 5 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 org.hibernate.SessionFactory ¾ 概述:应用程序从SessionFactory SessionFactory里获得Session Session 实例。通常情况下, 实例。通常情况下,一个数据库只有唯一的一个 只有唯一的一个 SessionFactory SessionFactory ,例如在应用初始化时被创建。 例如在应用初始化时被创建。 ¾ 会话工厂缓存了生成的 会话工厂缓存了生成的SQL语句和Hibernate Hibernate在运行 时使用的映射元数据。 时使用的映射元数据。 ¾ 言下之意:sessionFactory sessionFactory消耗内存,目的是为每一 个客户生成连接 个客户生成连接,问:sessionFactory sessionFactory实例适合放在 哪里?(application application内) ¾ 怎样生成? SessionFactory SessionFactory sessionFactory sessionFactory = cfg.buildSessionFactory buildSessionFactory();
guokehua(@yahoo.com.cn oy Java! org.hibernate Session 代表与数据库之间的一次操作 Session通过 Session Factory打开,在所 有的工作完成后,需要关闭。 口它与Web层的 Httpsessi。n没有任何关系 口 Session适合保存在哪里? SessIon内 怎样生成? Session session session Factory. open Session O; 怎样得到 sessIon是一个重要的问题,我们可以借助一个帮助类进 行优化 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 6 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 org.hibernate.Session org.hibernate.Session ¾ 代表与数据库之间的一次操作。 代表与数据库之间的一次操作。 Session Session通过SessionFactory SessionFactory打开,在所 有的工作完成后,需要关闭。 有的工作完成后,需要关闭。 它与Web层的HttpSession HttpSession没有任何关系。 没有任何关系。 Session Session适合保存在哪里? 适合保存在哪里?session session内 怎样生成? Session session = Session session = sessionFactory sessionFactory.openSession openSession(); 怎样得到session是一个重要的问题,我们可以借助一个帮助类进 行优化
guokehua(@yahoo.com.cn oy av Session API((简单增删改查) 保存 Serializable save(objectobject) void saveOrUpdate(Object object) 1010 不存在时抛出异常的载入 Object load(Class theClass, Serializable id) void load(Object object, Serializable id) >不抛出异常的载入 Object get(classclass, Serializable 修改 void update(Object object >删除 void delete(objectobject) 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 7 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 Session API(简单增删改查) ¾ 保存 ¾ Serializable Serializable save(Object object) save(Object object) ¾ void saveOrUpdate saveOrUpdate(Object object) (Object object) ¾ 不存在时抛出异常的载入 不存在时抛出异常的载入 ¾ Object load(Class Object load(Class theClass theClass, Serializable Serializable id) ¾ void load(Object object, load(Object object, Serializable Serializable id) ¾ 不抛出异常的载入 不抛出异常的载入 ¾ Object get(Class class, Object get(Class class, Serializable Serializable id) ¾ 修改 ¾ void update(Object object) update(Object object) ¾ 删除 ¾ void delete(Object object) delete(Object object)
guokehua(@yahoo.com.cn oy Java! org.hibernate. Transaction Transaction tx session, beginTransaction(; void commit( void rollback( 1010 boolean was Committed( boolean wasRolledBack() 令注:使用 Hibernate进行操作时(增、删、改)必须显式的调 用 Transaction(默认: autoCommitafalse)。 项目实施中,记住我的口诀:请求对应 Session, Session同 步事务 没有被关掉的 Session可以根据 getcurrentSession来得到 定要注意,如果抛出异常,要回滚事务,关闭 sessIon 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 8 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 org.hibernate org.hibernate.Transaction Transaction ¾ Transaction Transaction tx = session. = session.beginTransaction beginTransaction(); ¾ void commit() commit() ¾ void rollback() rollback() ¾ boolean boolean wasCommitted wasCommitted() ¾ boolean boolean wasRolledBack wasRolledBack() 注:使用Hibernate Hibernate进行操作时(增、删、改)必须显式的调 用Transaction Transaction(默认:autoCommit autoCommit=false)。 项目实施中,记住我的口诀:请求对应Session Session,Session Session同 步事务 没有被关掉的Session Session可以根据getCurrentSession getCurrentSession来得到 一定要注意,如果抛出异常,要回滚事务,关闭session session
guokehua(@yahoo.com.cn Jyi批量查询方法1:oL 基本语法 from类名as对象名 where属性条件) > Select内容from类名as对象名 where属性条件) 1010 其他支持: 连接,聚合函数等等请参考HQL的文档(或者教师提供的 Hibernate参考书 List里面装的可能不是对象!!! 编程方法: Query Session. createQuery string hql) 将条件值设置为参数::参数名 >例子: Query q= session. createQuery( sfrom Cat as c where c.name=:name); q setxXx函数传入参数 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 9 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 批量查询方法1:HQL ¾ 基本语法 ¾ from 类名 as 对象名(where 属性条件) ¾ Select 内容 from 类名 as 对象名(where 属性条件) ¾ 其他支持: ¾ 连接,聚合函数等等,请参考HQL的文档(或者教师提供的 Hibernate Hibernate参考书) ¾ List里面装的可能不是对象!!! ¾ 编程方法: ¾ Query Session. Query Session.createQuery createQuery(String (String hql) ¾ 将条件值设置为参数: 将条件值设置为参数: :参数名 ¾ 例子:Query q = session. Query q = session.createQuery createQuery(“from Cat from Cat as c where c.name=:name as c where c.name=:name”); ¾ q.setXXX函数传入参数
guokehua(@yahoo.com.cn yav批量查询方法2 org.hibernate. Criteria 步骤: l:Criteria session. createCriteria(class persistent1ass)将 Criteria绑定到 Javabean 1010 2: Criteria.add(规则); Criteria. addorder(); 3:规则由 Restrictions类得到 4:用st方法得到结果 >注意这种方法也支持聚合连接等操作,但使用的比较 少,可以参考文档或者参考书 注意 Criteria的两个重要方法: c. setFirstResultoi c. setMaxResults(; 给分页带来了方便(经过优化的) 008-3-10 郭克华J2EE框架实战教学视频
2008-3-10 10 oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 批量查询方法2: org.hibernate.Criteria ¾ 步骤: ¾ 1:Criteria session. Criteria session.createCriteria createCriteria(Class persistentClass persistentClass)将Criteria Criteria绑定到JavaBean JavaBean ¾ 2: Criteria.add( Criteria.add(规则); Criteria. Criteria.addOrder addOrder(); ¾ 3: 规则由Restrictions Restrictions类得到 ¾ 4: 用list方法得到结果 ¾ 注意,这种方法也支持聚合 这种方法也支持聚合,连接等操作,但使用的比较 少,可以参考文档或者参考书 可以参考文档或者参考书 ¾ 注意Criteria Criteria的两个重要方法: ¾ c.setFirstResult setFirstResult(); ¾ c.setMaxResults setMaxResults(); ¾ 给分页带来了方便(经过优化的)