`
moshowgame
  • 浏览: 42300 次
  • 性别: Icon_minigender_1
  • 来自: 潮州
社区版块
存档分类
最新评论

初学hibernate,hibernate入门

阅读更多

 

*.关于持久化这个概念!

■顾名思义就是把缓存中的java对象放到数据库中使之持久.对于需要持久化的对象,它的生命周期分为三个状态:临时状态,持久化状态,游离状态.

●临时状态:刚刚用new语句创建,没有被持久化,不处于session的缓存中

●持久化状态:已经被持久化,而且加入到session的缓存中

●游离状态:已经被持久化,但不放在session的缓存中

◆Session具有一个缓存,位于缓存中的对象处于持久化状态,它和数据库中的相关记录对应,Session能够在某些时间点,按照缓存中持久化对象的属性变化来同步数据库,这一过程称为清理缓存.

◆Session的save()方法把临时状态变为持久化状态.

◆Session的update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法方法使游离状态变为持久化状态.

 

*。关于ORM这个概念!

对象关系映射(ORM)提供了概念性的、易于理解的模型化数据的方法。

ORM名字中就可以看出其原理:参照mapping,将object转换成sql语句,然后持久化到RDB中。

mapping记录objectRDB(表)的映射关系;这种映射关系可以是一个xml文件或者注解。

*AnnotationJPA

Hibernate对类的映射的实现一个是通过Annotation注释,另一个是通过XML配置,现在是重AX了。

JPA全称Java Persistence API持久化编程接口,Hibernate就是JPA Provider中很强的一个,JPA现在就是Hibernate功能的一个子集。Hibernate实体对象的状态,有自由、持久、游离三种,JPA里有newmanageddetachedremoved,这些状态都是一一对应。而其他的如Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了manager,所以从HibernateJPA的代价应该是非常小的 。

 

 

Hibernate的流程:

1.工具eclipsemyeclipse,然后先下载hibernate以及slf4j还有MySQL-JDBCjar类库


2.Newweb项目,create个数据库和表,create database hibernate; use hibernate;create table student (id int primary key,name varchar(20),age int);


3.把需要用到的类库bulid path进来

4.可以右键>myeclipse>add Hibernate capabilitieseclipse下直接建立hibernate.cfg.xml文件,模板可以在http://www.hibernate.org/docs搜一下或者直接到以下地址copy

http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html/tutorial.html#tutorial-firstapp-mapping


5.然后根据实际修改该配置文件


<session-factory>会话工厂,生产会话,每次请求就建个会话

<property name="dialect">数据库方言,数据库各种数据语言就像全国各地的话,如白话、潮州话、湖南话,方言是将其统一的普通话,人人都能通话。各个数据库的方言可以在百度一下或者官方文档查看

org.hibernate.dialect.MySQLDialect

</property>

<property name="connection.url">数据库的URL,本地的mysql一般的URL是这样的jdbc:mysql://IP地址:3306/数据库名称

jdbc:mysql://127.0.0.1:3306/hibernate

</property>

<property name="connection.username">root</property>用户名

<property name="connection.password">moshow</property>密码

<property name="connection.driver_class">数据库JDBC驱动,hibernate底层依然是通过jdbc实现的,只不过包装起来了,操作方便了

com.mysql.jdbc.Driver

</property>

<mapping resource="./Guests.hbm.xml" />映射的文件名,如果用xml映射的话,一般每个被映射的类都要对应一个xxx.hbm.xml

</session-factory>

 

6.接↑,就是为每个要映射的类建立一个对应的xxx.hbm.xml

<hibernate-mapping>hibernate映射

    <class name="Guest"  table="guests">这个类名叫什么,对应数据库中哪张表 

        <id name="gname" column name="gname"> 类中和数据库对应的主键名称,用id来表示,如果类中的名称和数据库名不一样则idcolumn都要写,不然只写id就可以了,这里写出来可以对照一下

        </id>

        <property name="guest" column name="guest"> 其它属性

                    </property>

    </class>

</hibernate-mapping>

 

7.写测试类

 

 

Student s = new Student();  新建一个student对象并设置对应值

s.setId(1);

s.setName("zhangsan");

s.setAge(8);

 

SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 根据配置文件创建一个会话工厂SessionFactory

Session session = sessionFactory.getCurrentSession();

session.beginTransaction(); 

session.save(s);

session.getTransaction().commit();进行会话的过程

 

 

要注意的几点就是:

 

使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,也就是不用再session.close().但是如果使用的是openSession方法创建的session的话,那么必须显式的关闭session,也就是调用session.close()方法.这样commit后,session并没有关闭。

 

save()之后,不会马上对数据库进行更新,而是在Transactioncommit()之后才会对数据库进行更新,在Transaction之间的操作要么全部成功,要么全部失败,如果失败,则会回滚全部操作,就当做本次会话什么都没发生。

 

 

 

附上学习资源项目一个!

 

*.以上是我初学Hibernate的小结,很适合初学者,对于高手来说这绝对是小小菜,不知道对不对,大家可以看看,不对、不通、不好理解的地方都可以提出来!

 

我是学尚学堂马士兵的视频的,觉得很不错,大家想学可以去下载!

  • 大小: 37.6 KB
  • 大小: 18 KB
  • 大小: 56.2 KB
  • 大小: 13.7 KB
  • 大小: 11.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics