您的位置:首页 > 其它

hibernate初学

2017-11-20 21:11 316 查看

一.什么是hibernate?

定义:



通俗的讲就是用来操作数据库的。它把数据库中的表,转换成java类,通过xml文件来实现类和表之间的映射。这样的好处在于,可以面向对象的思想来操作数据库。

二.与jdbc的区别

可能有些人会觉得这个框架没什么用,认为已经有了jdbc连接数据库了,为什么还要用这个框架去连接数据库。当然有这个框架自然有用处的。jdbc也是有缺点的,比如效率就低,每一次请求,打开连接、发送sql语句,在数据库中解析sql语句等需要消耗大量的资源,重复性代码特别多, 每一次都需要关闭connection,statement,rs,没有做到面向对象编程,没有做到数据缓存(就是把页面上的数据缓存到本地磁盘上,当应用程序再次访问的时候,直接从磁盘上读取数据就可以了)等缺点。jdbc有的这些缺点,当然hibernate框架就完善了它。

三.hibernate有些什么?

1. hibernate.cfg.xml配置文件:主要写是链接数据库的四个信息,指定加载哪个数据库,mysql还是oracle等,驱动器,数据库用户名和密码等一些其他配置信息。

2. xxx.hbm.xml配置文件:hbm指的是hibernate的映射文件,在 hibernate.cfg.xml中管理,在项目启动的时候加载到内存,提供关于将对象持久化到关系数据库中的信息。简单来说就是你要在数据库怎么样建表参照这个配置文件。

3. hibernate的增删该查,对数据库数据的增加,删除,修改,查找,在java里操作。

4. hibernate的三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(离线状态)。瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session(缓存)中不存在该对象。当然他们之间也可以互相转换。

5. 一对多和多对多的关系:就是数据库中的表之间有一对多和多对多的关系。举个简单例子:宿舍和学生是一对多的关系,一个宿舍住多个学生,查询宿舍列表的时候,假如一个宿舍里面住着三个学生,当我查询宿舍列表的时候,就也会有住这宿舍的学生信息。还有一些其他关系也不多说了。

6. hibernate还有很多种查询方式,我也不细讲了。

7. annotation:在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,就是annotation里的一些标签可以代替xml配置文件,你也就不需要去配置xxx.hbm.xml,感觉annotation可以少写一些配置文件代码要好点,看个人喜好吧。

当然还有一些细的知识点我也不一 一列出来了。

四.hibernate怎么运行的?

1 通过传过来的对象,得到类名称,然后根据这个名称,得到该目录下的对应的xxx.hbm.xml文件。

2 解析xxx.hbm.xml文件,生成相应的表。

3 应用反射,得到类中的相关字段的值。

4 进行保存

举个例子如定义一个user对象,有个属性name,然后有一个user.setName(Name)方法,然后session.save(user);(保存到数据库)trans.commit();(提交),session.close();就可以了。

五.hibernate例子

第一步,先配置hibernate.cfg.xml:

<hibernate-configuration>
<session-factory name="mySessionFactory">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>//MySQL驱动类
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>//MySQL连接端口号(3306)与数据库(hibernate)
<property name="hibernate.connection.username">root</property>//MySQL用户名
<property name="connection.password">123456</property>//MySQL用户密码

<property name="hibernate.show_sql">true</property>//显示hibernate对数据库操作语句
<property name="hibernate.format_sql">true</property>//格式化Hibernate的SQL输出语句
<property name="hibernate.hbm2ddl.auto">update</property>//自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"
常用属性有create、update

<mapping resource="com/hibernate/Student.hbm.xml"/>

</session-factory> </hibernate-configuration>


第二步,配置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="com.hibernate.Student">
<id name="id" />
<property name="name" />
<property name="age" />
</class>

</hibernate-mapping>


第三步,创建Student.java:

package com.hibernate;

public class Student {
private int id;

4000
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


第四步,创建Test.java

package com.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class Test {
public static void main(String[] args) {
Student s = new Student();
s.setId(1);
s.setName("zhangsan");
s.setAge(8);

SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();

}
}


运行效果:



六.hibernate心得

刚开始也是对这个框架有疑惑的,为什么有了JDBC访问数据库,还要有这个框架出现,当然每个东西自然有自己的用处,前面我也讲了一些它们的区别,配置也是差不多的套路,不要去记,要写的时候去拷贝修改就行了,hibernate每个东西可以不用去记,知道有这个东西就行,最重要还是会用,我感觉用多了,也差不多记住常用的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: