Hibernate学习笔记

Hibernate学习笔记

  • Hibernate API

Hibernate API对 JDBC API 进行封装,提供面向对象的数据库访问API,这样不懂数据库语言的人,也能通过Hibernate的接口来访问数据库,无需书写sql语句即可实现对数据的查询操作。增强了代码的独立性和可维护性。

  • 对象-关系映射元数据

Hibernate 将对象-关系映射元素放到对象-关系映射文件中,以hbm.xml命名作为文件扩展名。
下面是monkey类和MONKEYS表的映射关系

  <hibernate-mapping>
    //指定类和表的映射
    <class name="mypack.Monkey" table="MONKEYS">
      //主键
      <id name="id" column="ID" type="long"> 
       //<generator>指定对象标识符生成器,为对象OID生成唯一标识符
       <generator class="increment"/">  ​
      </id>    
      //属性和表的字段映射
      <property name="name" column="NNAME" type="string" not-null="true" />    

    </class>   
    </hibernate-mapping>
  • Hierbnate的配置文件

1.XML格式,同上。小tips:可通过直接将数据库中的表与java中对应的实体bean类进行映射,如:

<mapping class="com.zhilehuo.Monkey.bean.EntityMonkey">

2.hibernate.properties:java属性文件,采用“健=值”形式

//指定数据库使用的sql方言
hibernate.dialect=org.hibernate.dialect.MYSQLDialect
//指定数据库驱动程序
hibernate.connoction.dirver_class=com.mysql.jdbc.Drivcer
//指定连接数据库的URL
hibernate.connection.url=jdbc:mysql://localhost:3306/sampleDB
//指定连接数据库的用户名、口令
hibernate.connection.username=root
hibernate.connettion.password=123456
//值为true时,控制台输出sql语句
hibernate.show_sql=true
  • Hibernate API中的接口

1.Configuration接口:配置并启动Hibernate

//创建一个Configuration类实例,读入hibernate.properties配置文件中的配置信息
Configuration config = new Configuration();  
config.addClass(Monkey.class);
//创建一个sessionfactory实例,把配置信息放入sessionFactory缓存
sessionFactory=config.buildSessionFactory();  

也可以写成:

seessionFactory = new Configuration().addClass(Monkey.class).buildSessionFactory();     

2.SessionFactory接口:一个SessionFactory实例对应一个数据存储源

3.Session接口:提供了和持久化相关的操作,如保存、更新、删除、加载对象,可通过SessionFactory实例的openSession()方法获取Session实例。
Session提供了save()方法,update()方法,delete()方法,get()/load()方法

Session session = factory.openSession(); 
tx=session.beginTransaction();
session.save(monkey);
tx.commit();

4.Transaction接口:是hibernate的数据库事物接口

Transaction tx;
    try{
       tx=session.beginTransaction();
       //执行事务;
       ..
       //提交事务
       tx.commit();
    }catch(RuntimeException e){
       if(tx!=null) tx.rollback();
       throw e;
    }finally{
       session.close();
    }

5.Query接口:Hibernate的查询接口,

Query query=session.createQuery("from Monkey as m order by m.name by m.name asc");
  • OID

Hibernate通过OID来维持java对象和数据库表中的对应关系。Hibernate会保证在一个Session对象的缓存中,每个Monkey对象都有唯一的OID(提取两个Monkey1,Monkey2对应的是同一个对象)

Monkey monkey1 =(Monkey)session.get(Monkey.class,new Long(1));
Monkey monkey2 =(Monkey)session.get(Monkey.class,new Long(1));
  • Session缓存的作用

Session缓存可以减少访问数据库的频率;
Session缓存中保证数据库中的相关记录与缓存中的相应对象保持同步。

  • Hibernate的检索方式

1.HQL检索(hibernate Query Language)
与sql相似,通过Session的createQuery方法创建一个Query对象,然后动态绑定参数,通过list方法执行查询语句。

Query query=session.createQuery("from Monkey as m where m.name=:monkeyName "+"and m.age=:monkeyAge")

query.setString("MonkeyName","Tom");
query.setInteger("monkeyAge",21);

List result=query.list();

或者采用方法链编程风格:

Query query=session.createQuery("from Monkey as m where m.name=:monkeyName "+"and m.age=:monkeyAge")
.setString("MonkeyName","Tom")
.setInteger("monkeyAge",21)
.list();

2.QBC检索方式
QBC API由org.hibernate.Criteria接口和org.hibernate.criterion.Criterion接口和org.hibernate.criterion.Restrictions类组成

List result=session.createCriteria(Monkey.class)
.add(Restrictions.like("name","T%"))
.add(Restrictions.eq("age",newInteger(21)))
.list();

3.sql检索方式
有的时候可能需要根据底层数据库的sql方言来生成一些特殊的查询语句,这时候将sql语句代入即可

Query query=session.createQuery("select * from MONKEYS where NAME like :monkeyName "+"and AGE=:monkeyAge")
.setString("MonkeyName","Tom")
.setInteger("monkeyAge",21)
.list();
  • 实际使用

在实际使用时,一般会根据自己的需求情况对Hibernate进行封装,通过将Hibernate类封装形成自己的Dao父类,实现ListBySQL(String sql,Class c),ListByCriteria(DetachedCriteria criteria)等方法,将会在自己写接口,调用数据库时事半功倍!只用考虑接口如何实现而不需在繁琐的建立JDBC连接等等一系列操作啦~~非常方便快捷~

原文地址:https://www.cnblogs.com/weberweber/p/6828324.html