Hibernate初学者容易遇到的问题

一、首先介绍一下jar包

在这里面进行对hibernate的需要的jar的介绍

1.hibernate3.jar    Hibernate的核心类库
2.antlr-2.7.6.jar     语言转换工具,Hibernate利用它来实现HQL到SQL的转换
   antlr:Another Tool for Language Recognition  另一个语言识别工具   ,总之就是关于语言,对语言的操作的

3.commons-collections-3.1.jar   collections Apache的工具集,用来增强Java对集合的处理能力
   collection类是一个最基本的集合接口,大家熟知的List和Set都是都是它的子接口
  
4.dom4j-1.6.1.jar     一个JavaXML的API,类似于JDOM,用来读写XML
   JDOM是一个开源项目,它是基于树形结构的,利用纯Java技术对XML文档进行实现解析、生成、序列化以及多种操作,简单来说就是实现对xml的读、写、操作


5.javassist-3.12.0.GA.jar   一个开源的分析、编译和创建字节码的类库


6.jta-1.1.jar         标准的Java事务(跨数据库)处理接口
    jta:即Java Transaction API    
    


7.hibernate-jpa-2.0-api-1.0.1.Final.jar    JPA接口开发包
    jap:Java  Persistence  API  Java持久层API


/*关于日志的jar包*/
8、slf4j-api-1.6.1.jar    只是一个接口,用于整合log4j
log4j-1.2.17.jar    Loh4j日志文件核心JAR
slf4j-log4j12-1.7.12.jar    Hibernate使用的一个日志系统


9、/*hibernate自带的日志jar包*/
jboss-logging-3.1.0.GA.jar


以上有两种日志的jar包,我认为hibernate默认使用的是自带的日志,当然如果想用log4j的日志可以试着这样做:首先添加log4j.properties文件,还有相关jar包,然后就是一下两种办法可以实现

  1.设置系统属性:jboss.logging.provider=slf4j

  2.就是将hibernate的jboss-logging.xxxjar包换成3.2版本以上的,目前hibernate4.3.10自带的jboss-logging还是3.1的

  我认为hibernate日志加载顺序应该是:

   1.JBoss的自己的日志实现
   2.log4j的2.x的
   3.log4j的1.x的
   4.SLF4J -
   5.java.util.logging中

二、hibernate执行流程

 (1)初始化Hibernate,构建Configuration实例,这一步就是将hibernate核心配置文件和映射文件加载到Configuration对象中

 (2)创建SessionFactory实例。通过Configuration对象读取到的配置文件信息创建SessionFactory,并将Configuration对象中所有的配置文件信息存入到 SessionFactory内存中。

 (3)创建Session实例,建立 数据库连接。Session是通过SessionFactory打开的,创建一个Session相当于建立一个新的数据库连接

 (4)创建Transaction实例,开启一个事务,Transaction用于事务管理,一个Transaction对象对应的事务可以包含多个操作,在Hibernate中执行增删改操作时,必须创建Transaction对象。事务默认是关闭的,如果进行查找操作不需要开启事务

 (5)利用Session接口通过的各种方法进行持久化操作

 (6)提交事务。对实体对象持久化操作之后,必须提交操作

 (7)关不Session,断开与数据库的连接

下面,我们用一个实例来描述上方的步骤

 (1)Configuration configuration = new Configuration().configure();

 (2)SessionFactory sessionFactory = configuration.buildSessionFactory();

 (3)Session session= sessionFactory.openSession();

 (4)Transaction transaction = seession.beginTransaction();

 (5) 

     User user = new User();

     user.setUsername("张三");

     user.setPassword("123456");

    session.save(user);

 (6)transaction.commit();

 (7)session.close(); 

  sessionFactory.close();

上面的这个保存操作每一步和上面的Hibernate执行流程是一一对应的

三、简单说一下,懒加载(lazy属性)

 1、  在<many-to-many>中lazy有三种取值:false(立即加载)、proxy(使用延迟加载)、no-proxy(无代理延迟加载)。默认是proxy

 2、 <class> 中的lazy有两种取值 false(立即加载)、true(延迟加载)。 默认是true

 3、<set> 中的lazy有三种方式false(立即加载)、true(延迟加载)、extra(增强延迟加载)。默认是true

lazy作用:关联延迟加载,记住是关联、关联、关联,重要的话说三遍,为什么是很重要这个等下再说,因为和下面的内容有联系

四、简单说一下get()和load()方法

   作用都是相同的,就是通过传入两个参数

      

     

   参数类型都是相同的,相信稍微有点基础的朋友都会知道怎么传参

   不同点:

     当想取得的的数据在数据库中不存在时,get会返回null,load会返回一个异常

     然后就是数据存在时,load是什么时候用什么发出请求,get是不论是否有需要都要发送请求

五、将延迟加载和get()、load()方法结合起来

 falsetrue
get()       立即查询,并且是一次性加载完,包括关联对象立即查询,用什么加载什么,如果用不到关联对象,就不会执行查询关联度向的操作
load()什么时候用什么时候查询,并且是一次性加载完,包括关联对象什么时候用什么时候查询,用什么加载什么,如果用不到关联对象,就不会执行查询关联度向的操作
注:至于例子就不和大家分享了,我也是完全测试了一遍才确定了,感觉如果例子贴出来是害了大家




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值