45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:hibernate的原理有哪些?

hibernate的原理有哪些?

2016-08-24 12:59:00 来源:www.45fan.com 【

hibernate的原理有哪些?

hibernate的原理首先在这里给大家讲一讲吧.
其实原理是非常简单的.
我们知道如果用java连接数据库我们首先想到的就是JDBC,那么hibernate是什么呢.
hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,
而数据库返回来的信息hibernate接收之后直接生成一个对象传给java.
什么??对象是什么?做什么用的?
java利用对象才可以有效的进行远程的数据传递.
= =java就是一个面向对象的语言啊.这个地方需要大家慢慢体会了.
下面说说hibernate的文件吧.
我们要写一个hibernate的话自然要在数据库里有我们要操作表对吧.不然我们连什么啊.假设是一个student学生表吧.大多数不都喜欢用学生练手么..咱们也用它.
sql语句:
create table student(id Number(10),name varchar2(20))

随便乱建一个了.
这个我们是一定要用的表了.

接下来呢.我们需要有两个hibernate特有的文件.
一个是以.cfg.xml结尾的文件.一个是以.hbm.xml结尾的文件.
这两个文件做什么用的呢?
.cfg.xml的作用就是连接数据库文件内部其实就是一个由user,password,url,driver组成的一个连接库的基本信息.
文件的内容是这样的:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="connection.username">111</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:ris</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.password">111</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<mapping resource="Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

到这里这个.cfg.xml的文件就结束了这个文件的全称应该是"你的应用名字.cfg.xml"为了让大家好理解.
我建立的项目名称就是one,所以这个cfg的文件全称应该是one.cfg.xml
这里简单再分析一下这个文件.估计先看这个的话不是很明白.但结合程序看就会明白这个文件的含义了.
这个<hibernate-configuration>包含的是程序里面的configuration的实例的信息.通过这个实例的方法configure我们可以
从mapping里得到对应的表的信息和类的信息.
现在再看<session-factory>这个标签.它呢是我们在程序里通过configure的方法BuildSessionFactory所得到的
一个SessionFactory对象这个对象呢可以理解为一个statement我们对数据库的所有操作都是通过它的一系列方法来实现的.
这里面的那些property不用多说啦都是一些连接需要的东西.
其中有个dialect这个一定有不明白吧.这个是hibernate的东西啦.因为咱们不是就用的是hibernate来与数据库连接么.
但数据库不同dialect后面的也就不同.

下面讲这个Student.hbm.xml文件.
这个文件是对数据库的表的映射文件.
我们用这个文件指出哪个类对应着哪个表.
而且还指出哪个类中的属性对应着表中的哪个字段.
我们也来看看内容.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="src.Student" table="student">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="name" column="name"/>
</class>
</hibernate-mapping>

到此这个文件就结束了.特别说一下这个id的问题.我们看到它里面有个<generator class="increment"/>
这个是什么呢这个是可以实现自动id增加.也就是说如果我们往数据库中插入一个name那么就id自动加1.

这个文件解释一下了<hibernate-mapping>这个所包含的就是我们前一个文件里面说的mapping.
我们在java类中configure得到的mapping就是从这个文件里面读取出来的.
类如果带包的话一定要带包名(推荐一切写的类都要带包).包名和类名要注意.包名小写,类名的第一个大写.
我是怕出错,这里提醒大家一下.
<class name="src.Student" table="student">
这个就是先指定了类对应的表.
然后里面的那些就是指定表中的字段与类中的属性的对应关系了.


到这里这两个特殊的文件就写完了.下面就只是我们的java类了..
要两个.一个是Pojo类.一个是我们的Test类.

我们的Pojo类就是简单的一个javaBean.为什么这么叫??(Plain Old Java Objects, 简单洁净Java对象)<--这个是偶从网上找的.
不过没必要深究这个.直接看代码吧.

package src;

public class Student{

private int id;
private String name;

public void setId(int id){
this.id=id;
}
public void setName(String name){
this.name=name;
}

public int getId(){
return id;
}

public String getName(){
return name;
}
}
完了.就是这么简单的一个类.不用想太难.它就是和数据库的字段对应然后取值的

下面是我们关键的Test类


package src;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class Test{
public static void main(String bb[]){
try{
SessionFactory sf=new Configuration().configure().BuildSessionFactory();
Session s=sf.opension();
Transaction ts=s.beginTransaction();
for(int i=0;i<3;i++){
Student st=new Student();
st.setName("begin go "+ i);
s.save(st);
}
ts.commit();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

这里的第一句SessionFactory sf=new Configuration().configure().BuildSessionFactory();
得到configuration的实例.这个开始要和最前面的哪个.cfg.xml对应着看了.
我们取得实例.然后通过configure()读取mapping对应的.hbm.xml文件的信息.
然后我们通过BuildSessionFactory得到SessionFactory对象
然后我们在通过opensession()建立连接.Session就是指一个session被建立.这个需要有servlet的基础理解.
这里等于是一个connection被建立好.
下面通过session对象开启事务(Transaction)这个相当于conn.setAutoCommit(false);先不递交最后通过另外一个方法递交.
我们看到下面我们循环里把咱们写好的Student实例化了.
既然实例化了我们就能用里面的方法了.看到set方法了吧.就是这么简单.
每次都要session来save一下.一个对象set之后要保存.很好理解吧.保存在了session中.
最后递交commit();
这个方法实际上是实现了两个作用.
conn.commit();
conn.setAutoCommit(true);
这样才能把我们的数据放进数据库中.
很奇怪没有sql语句吧.最后提醒一下.想想hibernate的特性.我们对数据库的操作就是对对象的操作.这就是OR-Mapping.呵呵

实例分析结束


本文地址:http://www.45fan.com/a/question/66871.html
Tags: hibernate 习之
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部