资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
SSH基础知识之Hibernate主讲人:周文敏主讲人:周文敏2012-2-132012-2-13www.avit.com.cnORMORM介绍介绍看广州人与北京人做生意何谓ORMORM介绍看广州人与北京人做生意ORM介绍ORM视图ORM介绍何谓ORM对象关系映射对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 Hibernate介绍Hibernate介绍Hibernate组成部分Hibernate使用流程Hibernate介绍hibernate 是一个O/R mapping框架,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。 HibernateHibernate程序的组成部分程序的组成部分q先看看联合国大会的组成有各个国家的老外们参加有开会的发言人老外们需要翻译HibernateHibernate程序的组成部分程序的组成部分q使用了Hibernate的程序:有数据库中的各张表有程序里的各个对象当然需要一个“翻译”来告诉程序里的各个对象“各张表在程序里分别对应那个对象”HibernateHibernate程序的组成部分程序的组成部分qHibernate配置文件:hibernate.cfg.xmlq数据库q与数据库对应的各个对象:POJOqJavaBean与库表的映射配置:*.hbm.xmlhibernate.cfg.xmlhibernate.cfg.xml样例样例qqqqqqcom.mysql.jdbc.Driverqjdbc:mysql:/localhost:3306/hibernate_learningqroot123qq1qqorg.hibernate.dialect.MySQLDialectqqthreadqqorg.hibernate.cache.NoCacheProviderqqtrueqq!-create-qqqPOJOPOJO样例样例qpackage base_action.common.beans;qpublic class Student qprivate String id;qprivate String name;q qpublic String getId() qreturn id;qqpublic void setId(String id) qthis.id = id;qqpublic String getName() qreturn name;qqpublic void setName(String name) qthis.name = name;qq*.hbm.xml*.hbm.xmlqqqqqqqqqqHibernate使用流程建立库表(找发言人)编写hibernate.cfg.xml(总体配置)编写POJO(找各国代表)配置POJO与库表的映射(请翻译)编写数据库操作代码(开始开会)Hibernate查询方案HQL方案 统计函数调用方案 嵌套子查询方案 本地SQL查询方案(选讲) Hibernate查询方案普通查询查询部分字段查询一个字段查询多个字段实例化多字段查询结果Hibernate查询方案HQL方案Hibernate查询方案在HQL中,使用的是对象,而不是库表。返回的是保存着要查询的数据的对象。Query q = session.createQuery( “FROM Student s WHERE s.age 18” );HQL方案 - 普通查询Hibernate查询方案在HQL中指定要查询的对象的属性。取得查询结果时,查询到的属性的值不在以所属对象的形式保存在List中,而是以自身类型的形式保存在List中。HQL方案 - 查询一个字段Hibernate查询方案Query q = session.createQuery( “SELECT s.name FROM Student s WHERE s.age 18” );List list = q.list();for ( int i = 0 ; i list.size() ; i + ) String name = ( String )list.get(i);HQL方案 - 查询一个字段Hibernate查询方案在HQL中指定要查询的对象的各个属性。取得查询结果时,查询到的属性的值不在以所属对象的形式保存在List中,而是以Object数组的形式保存在List中。HQL方案 - 查询多个字段Hibernate查询方案Query q = session.createQuery( “SELECT s.name, s.age FROM Student s WHERE s.age 18” );List list = q.list();for ( int i = 0 ; i list.size() ; i + ) Object res = ( Object )list.get(i);String name = ( String )res0;Integer age = ( Integer )res1;HQL方案 - 查询多个字段Hibernate查询方案将多字段查询的结果保存在对应的实例中,让查询结果以对象的形式被程序使用。在HQL中要显示实例化结果。对应的POJO要拥有实例化自身的构造函数。HQL方案 实例化多个字段查询结果Hibernate查询方案Query q = session.createQuery( “SELECT new Student( s.name, s.age ) FROM Student s WHERE s.age 18” );List list = q.list();for ( int i = 0 ; i list.size() ; i + ) Student stu = ( Student )list.get(i);Student类要拥有Student( String, int )的构造函数。HQL方案 实例化多个字段查询结果Hibernate查询方案COUNT():统计记录条数。MIN():求最小值。MAX():求最大值。SUM():求和。AVG():求平均值。统计函数调用方案Hibernate查询方案Query q = session.createQuery( “SELECT COUNT(*) FROM Student);Query q = session.createQuery( “SELECT MIN(s.age) FROM Student s);Query q = session.createQuery( “SELECT MAX(s.age) FROM Student s);Query q = session.createQuery( “SELECT SUM(s.age) FROM Student s);Query q = session.createQuery( “SELECT AVG(s.age) FROM Student s);统计函数调用方案Hibernate查询方案All:所有记录。Any:记录中的任意一条。Some:与Any一样。In:与“Any”一样。Exists:查询至少要返回一条记录。嵌套子查询方案Hibernate查询方案求平均年龄以上的学生姓名:Query q = session.createQuery( “SELECT s.name FROM Student s WHERE s.age exists( SELECT AVG(s.age) FROM Student s );嵌套子查询方案Hibernate查询方案基本查询命名查询本地SQL检索方案Hibernate查询方案使用session的createSQLQuery方法。获取查询结果以前要将别名与实体类关联起来。本地SQL检索方案 - 基本查询Hibernate查询方案String sql = “SELECT s.* FROM Student s”;SQLQuery q = session.createSQLQuery( sql );q.addEntity( “s”, Student.class );List list = q.list();本地SQL检索方案 - 基本查询Hibernate查询方案在POJO映射文件中对查询命名和设定。在代码中用session的getNamedQuery方法来执行某命名查询。本地SQL检索方案 -命名查询Hibernate查询方案 :age 本地SQL检索方案 -命名查询Hibernate查询方案Query q = session.getNamedQuery( “QueryStudents” );/sql语句参数赋值q.setInteger( “age”, 18 );本地SQL检索方案 -命名查询Hibernate其它功能集合映射 -Map,Set映射关联表的操作一对一,一对多 与 多对一,多对多多线程数据共享解决方案 -Hibernate官方不推荐多线程共享同一个Session。 -使用ThreadLocal批处理解决方案 Cache缓存控制一级缓存:Session 二级缓存:SessionFactoryClob与Blob数据处理方案Hibernate处理非文本数据和大容量数据的解决方案使用java.sql.Clob和java.sql.Blob数据检索策略立即检索 lazy=false延迟检索 lazy=true预先抓取 fetch=joinThanks & Question?
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号