hibernate_01_基本配置与查询_关键类_HQL_条件查询_C3p0_第1页
hibernate_01_基本配置与查询_关键类_HQL_条件查询_C3p0_第2页
hibernate_01_基本配置与查询_关键类_HQL_条件查询_C3p0_第3页
hibernate_01_基本配置与查询_关键类_HQL_条件查询_C3p0_第4页
hibernate_01_基本配置与查询_关键类_HQL_条件查询_C3p0_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate王健为什么用Hibernate?l为什么要有Hibernate在原始操作数据库的过程中,我们都是将JavaBean传递到Dao中,然后再从Dao中解析成SQL语句。而Hibernate可以直接处理JavaBean,保存一个Bean就是执行一个SQL.l然后就是:处理分页,一般应用程序都会有分页功能.数据移植,可能你的项目要运行在多个不同的数据库上。目录l1:认识Hibernatel 1、完全借助MyEclipse工具开发Hibernate应用。l 2、分析MyEclipse生成的配置文件和工具类。l 3、修改工具类,并进行简单的查询。l 4、使用hibernate进行CRUD

2、操作。必须打开事务。l 5、更好的认识Hibernate-体系结构。l 6、Session,与SessionFactory介绍。l 7、 主键生成策略。l 8、关键类介绍。Query,CriteirHibernate的体系结构:认识Hibernate:l在今日的企业环境中,把面向对象的软件和关系型数据库一起使用可能是相当麻烦和浪费时间l的。Hibernate 是一个面向 Java 环境的对象/关系型数据库映射工具。对象/关系型数据库映射l(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射l到基于 SQL 的关系模型数据结构中去,即将

3、数据表影射为JavaBean.lHibernate 不仅管理 Java 类到数据库表的映射(包括 Java 数据类型到 SQL 数据类型的映射),l还提供数据查询和获取数据的方法,可以大幅度减少开发时对人工使用 SQL 和 JDBC 处理数据的l时间。HQLlHibernate 的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的 95%。对于以数l据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate 可能不l是最好的解决方案;对于那些在基于 Java 的中间层应用中,它们实现面向对象的业务模型和商l业逻辑的应用,Hibernate 是最有用的。不管怎

4、样,Hibernate 一定可以帮助你消除或者包装那l些针对特定厂商的 SQL 代码,而且帮助你结果集从表格式的表示形式转换到一系列的对象中去。Hibernate核心接口lSession,一个Session就是一个Connection,也是一个一级缓存.l持久化对象状态 是在缓存中已经被托管还是已经从缓存中删除.lConfiguration 配置对像,此类用于读取hibernate.cfg.xml文件.lServiceRegistry为SessionFactory提供注册服务。lSessionFactory 通过Configuration生成一个Session工厂,用于管理所有的Session

5、,即连接.lTransaction -事务.lCriteria标准/QueryHQL/SQLQuerySQL 查询对像.用UML时序图表示上面的创建过程:2、完全借助MyEclipse开发第一个Hibernate应用l第一步:使用DB Browser建立与MySql数据库的连接。l第二步:建立一个Java项目。l第三步:通过MyEclipse的Add功能,加入它对Hibernate的支持。l第四步:修改生成的类文件。l第五步:进行简单的查询。第一步:建立数据表:,第二步:建立一个Java项目:第三步:加入对Hibernate的支持:第五步:进行简单的查询操作首先在要生成JavaBean:3、配

6、置和修改Hibernate的配置文件:l1、修改获取SessionFacotry/Session的类:2、修改配置文件:3、认识*.hbm.xml影射文件:内建的映射类型:-基本映射类型Java类型标准的SQL类型 integer int/java.lang.IntegerINTEGER long long/java.lang.LongBIGINT short short/java.lang.ShortSMALLINT float float/java.lang.FloatFLOAT double double/java.lang.DoubleDOUBLE big_decimal java.m

7、ath.BigDecimalNUMERIC character java.lang.StringCHAR(1) string java.lang.StringVARCHAR byte byte/java.lang.ByteTINYINT boolean boolean/java.lang.BooleanBIT yes_no boolean/java.lang.BooleanCHAR(1) (Y or N) true_false boolean/java.lang.BooleanCHAR(1)(T or F)内建的映射类型:-时间映射类型Java类型标准的SQL类型date java.util.

8、Date/java.sql.DateDATE time java.util.Date/java.sql.DateTIME timestamp java.util.Date/java.sql.TimestampTIMESTAMP calendar java.util.CalendarTIMESTAMP calendar_date java.util.CalendarDATE内建的映射类型:-二进制映射类型Java类型标准的SQL类型 binary byteVARBINARY text java.lang.StringCLOB clob java.sql.ClobCLOB blob java.sq

9、l.BlobBLOB serializable 实现了Serializable的java类VARBINARY4、完成CRUD使用hibernate进行CRUD操作。必须打开事务:Session,与SessionFactory介绍:lSession是运行在Java程序与Hibernate之间最主要的类。它为 应用程序提供持久化的服务。它包含一些重要的方法:l save,persist 对应 insert语句。lDelete 对应 delete语句。lUpdate,merge对应update语句操作Session进行数据执行的模板代码如下:SessionFactory介绍:l每一个项目,只拥有一个

10、此类的对像。SessionFactory是線程安全的。l此类,负责获取或是创建Sessions.l它同样包含一些重要的方法,如从二级缓存中清除某个对像。l考虑以下代码:Hibernate初始化过程分析:l第一步:hibernate会先实例化org.hibernate.cfg.Configuration类.此类在实例化的过程中,会同时实例化SettingsFactory类,SettingsFactory类的作用是保存用户的配置信息.默认读取perties资源文件。l第二步:调用configuration.configure方法,此方法于接收用户的配置文件即:hibern

11、ate.cfg.xml文件.此方法默认在classpath下查找hibernate.cfg.xml文件.l第三步:调用configuration.buildSessionFactory方法.此方法用于读取所有在hibernate.cfg.xml中的配置,从而构造出一个SessionFactoryImpl类.在SessionFactoryImpl(即SessionFactory)中,保存着二级缓存用的计数器,所有影射类都保存在map中,查询缓存,拦截器.此类的构造方法应该是最为复杂的一个.l第四步:在SessionFactory中,通过openSession可以获取一个连接,一个Session,

12、其实它的实现类为SessionImpl,即为一个Connection,但此Connection是经过动态代理以后的.见BorrowedConnectionProxy的源代码,此类负责动态代理Connection,而真正的连接则是由DriverManagerConnectionProvider来负责,通过查看它的源代码可知,它的连接方式仍然是使用DriverManager注册的JDBC连接.l第五步:将创建的N个Session,放到ThreadLocale以便于线程局部共享.主键生成策略1:l经常使用的几个主键生成策略为:1:assigned -表示在新增数据时由应用程序(用户自己)指定主键的值

13、。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。 其缺点为在执行新增操作时,需查询数据库判断生成的主键是否已经存在。 2:increment -表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。 (1)新增数据前先查询一遍,影响了性能。 (2)主键的类型只能为数值型的int或者long (3)并发操作时的冲突问题多线程,多CPU。 主键生成策略2:l3:identity -不如说是为sqlerver数据

14、库量身定做的。主要适用于sqlserver数据库的自动增长列的表。 l4:native 本地-表示根据不同的数据库采用不同的主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用 oracle中的sequence等。区分数据库的不同是以hibernate主配置文件中sessionFactory中配置的数据库方言。mysql 就用不了了, 这个oracle中必须创建一个名字为 hibernate_sequence的序列。 l5:UUID-这个就不用说了吧。适合于各种不同的数据库,生成32位的唯一字符串。但字段必须是varchar类型。建议使用此种形

15、式。Hibernate的查询:l对于保存、修改、删除可以直接使用session,但如果需要更为复杂的查询,则可以使用以下几个类:lQuery 用于执行HQL session.createQuery(HQL);lSQLQuery 用于执行原生的SQL. session.createSQLQuery(SQL);lCriteria 查询JavaBean. session.createCriteria(JavaBean.class);l条件查询- Restrictions- Restrictions.eq(propertyName,”value”);首先介绍Criteria:-1:简单查询,2:条件查

16、询,3:使用mapCriteria:iLikeCriteria:in:在任意情况下都可以使用分页:l以下使用的是排序lc.addOrder(Order.desc(name);findByExample 根据给定的示例查询:lSession ss = HibernateSessionFactory.getSession();lss.beginTransaction();lStud s = new Stud();ls.setName(“EE”);/根据给定的字段查询,但不包含主键但不包含主键lList list = ss.createCriteria(Stud.class)l .add(Examp

17、le.create(s)l .list();lSystem.err.println(list);lss.getTransaction().commit();Query类:-用于执行HQL语句:lQuery类,提供使用HQL语言的查询方式:如lfrom Stud;注意Stud是类名,不是表名,所以第一个单词必须大写。Query条件查询: - 占位符查询和命名的查询Query-通过指定map/JavaBean的方式使用参数:uniqueResult返回一个唯一的值:Query的executeUpdate功能可以执行更新操作:Execute the update or delete statemen

18、t. merge(合并)与saveOrUpdate的区别lmerge(合并)和saveOrUpdate都可以用于保存数据。它们的区别关键在于所处理的类是否存在id.l在id(主键自动生成的主键)为null的情况下,都是保存。l如果存在Id(主键)的情况下merge的处理方式:如果id对应的记录数据存在,则为修改。如果id对应的记录数据不存在 ,则为保存。l如果存在Id(主键)的情况下saveOrupdate的处理方式:如果id对应的记录数据存在则为修改。如果id对应的记录不存在则抛出异常。关于Query的其他说明:lQuery的方法有很多,请大家参考API文档并结合代码练习。l其他方法如:setParameterListsetFirstResult.setMaxResults更多方法不一一列举,请同学们自己查看API。再次分析hibernate.cfg.xml文件:JDBC连接:l就像你刚才看到的,如果希望让Hibernate帮助你建立数据连接必须要在配置文件中配置数据连接所需要的属性,它们是:l(前面的hibernate可以省略)l如果仅使用以上配置,即会使用Hibernate自带的数据连接池,但lHibernate建议你使用c3p0连接池做为实现。l如果要使用c3p0的连接,请将c3p0.jar添加到classpath,并添加以下配置通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论