Hibernate笔记

 一、hibernate-extensions和Middlegen-Hibernate-r5都是hibernate工具,可以独立完成从表创建hbm.xml文件及POJO

二、通过对象持久化数据时的步骤:
        1、Configuration config = new Configuration().configure();
        2、SessionFactory sessionFactory = config.buildSessionFactory();
        3、Session session = sessionFactory.openSession();

        之后便可以使用session提供的save,get,delete,find等方法完成持久层操作了。

三、连接池可以看作一个程序,在hibernate的配置文件中配置好,并将连接池需要的jar包放到classpath路径中
       ,那么在使用hibernate的时候就由此连接池来管理数据库的连接,在程序中就不用做建立连接和释放连接的
       操作了,由连接池来管理。
       常用的连接池1、默认连接池,有缺点,建议不用
                               2、c3po连接池
                               3、dbcp连接池
                               4、proxool连接池,后三种根据习惯任选其一。
                               5、JNDI连接池,数据源已经由应用服务配置好(如Web服务器),Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如:
hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class =
org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect

四、orm:hibernate映射是以应用设计的POJO为依据的,通常一个POJO对应一个Hbm.xml文件
        一个类中包含了另一个类(业务设计需要),则出现数据关联的情况,便于从一个类导航到另一个类。
        最后决定hbm.xml文件的书写方式的是域模型和关系模型的设计(二者都起作用)

类与类之间的关系包括:关联、聚集、继承,如果对象包含的不是类的集合,而是值的集合,那么就是值集合
                                               map,list,set

五、hibernate默认情况下,session在执行查询、commit、flush方法时清理缓存。session.flush()显示清理缓存用于一下情况:
         1、session.save()方法引起数据库触发器动作
         2、在程序中混用hibernate API和JDBC API时
         3、JDBC驱动不健壮,导致hibernate自动清理缓存模式无法正常运行时

六、实体对象的状态(针对以个特定的session来说)
        1、持久化状态:save()或者load()、find()、get()的实体对象
        2、临时状态:通过new创建的对象,数据库中没有记录对应
        3、游离状态:通过session的方法操作过,但是已经不在session的缓存里的实体对象
        注:持久化对象属性的改变会对应到数据库记录的改变,hibernate缓存和数据库记录维持同步

七、hibernate的检索策略
       1、类级别检索策略:<class>标签中lazy属性设置,默认为false,即采用立即检索,此属性之对load()方法起作用,对get()和find()方法不起作用
       2、关联级别检索策略:<set>标签中lazy属性的设置,默认为false,此属性最好设置为延迟检索,即lazy设置为true
       3、关联级别批量检索策略:<set>标签中batch-size属性的设置,如果此属性设置为3,lazy=true时那么在第一次访问关联对象时,类级别查询出的N个对象中,其中3个完成关联检索,lazy=false,那么立即完成其中3个的关联检索。
       4、<set>元素的lazy为false时,outer-join设置为true,则采用立即左外连接检索策略,lazy为true时,outer-join不用设置,没有意义,因为左外一次全部查询出来级联的对象,而延迟检索当时不用检索关联的对象

八、hibernate的检索方式
       1、HQL方式:Query query = session.createQuery("from Customer as c where c.name=:customerName");
                               query.setString("customerName","zhangsan");
                               List result = query.list();
       2、SQL方式:Query query = session.createSQLQuery("select * from CUSTOMER where NAME like:custemerName")
                               query.setString("customerName","zhangsan");
                               List result = query.list();
注:HQL查询语句的关键字不区分大小写!

九、连接查询:
       1、迫切内,迫切左外,是hibernate才有的,针对检索策略,如果使用迫切连接,则忽略hibernate映射文件的配置,立即检索。如果不是迫切连接,则使用hibernate配置文件的检索策略。
       2、内连接,只包含符合条件的结果,左外连接除了符合条件的还包含左边表的其他记录,右外连接除了符合条件的还包含右边表的其他记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值