Hibernate是一种基于ORM的思想来实现与数据库交互的框架,使用这个框架来操作数据库更为方便也更符合
面向对象的对象的思想,下面整理了一些Hibernate基础入门的知识,掌握这些基础知识对深入学习Hibernate框架原理有更好的推动
首先,Hibernate框架是基于ORM思想的,要使用这个框架首先要准备一个符合JavaBean规范的类
public class Student {
int id;
String name;
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;
}
}
在这里,我们准备了一个很简单的学生类,他只提供了两个成员变量id(用于作为表的主键),name
下面,我们要导入Hibernate的JAR包以及他所依赖的JAR包,对于初学者,因为还不熟悉Hibernate框架,所以推荐整套下载资源(因为不同的Hibernate版本所依赖的JAR包有严格的规范)在这里,我分享了一套资源用于供大家下载:
百度网盘:https://pan.baidu.com/s/13mi1KTNa5bU8uKbxpiD48A 密码:3qpn
然后我们把对应的JAR包导入项目中(至于如何导入JAR包以及如何使用,在这里就不过多阐述,如果还不熟练这些操作,那看到这里的朋友就有点心急了,要把基础打牢)
我们创建好类并且导入Hibernate框架之后,下一步,我们需要创建两个xml文件,用于把我们创建的学生类映射到Hibernate框架中,在这里,我们先简单的讲一下Hibernate的工作原理,Hibernate框架是先会读取hibernate.cfg.xml这个配置文件来读取要操作数据库的策略(具体配置的内容,后面会讲到,这里大家先了解有这么一个概念),在hibernate.cfg.xml中我们会配置操作数据库相关的操作信息,以及另一个xml文件的映射(前面我们说过,我们要准备两个xml文件),而这个xml文件的名字就是XXXXX.hbm.xml,比如,我们要把我们之前创建的Student类映射到Hibernate框架,就需要在hibernate.cfg.xml中映射Student.hbm.xml文件,在Student.hbm.xml中,我们就需要配置一些类对表的关系了(可能看到这里比较绕,不过没有关系,跟着这篇教程走,过一遍之后再回来看这句话相信你可以完全理解其中的含义),简单的总结一下就是,Hibernate框架工作会先读取hibernate.cfg.xml文件hibernate.cfg.xml,而hibernate.cfg.xml文件会读取Student.hbm.xml文件,经过这两步之后,我们就实现了类对应表的连接,而具体连接的细节,是Hibernate框架已经封装好的,不需要我们操心(但是学完Hibernate框架基础后,操心一下总是好的,更深入的理解Hibernate框架的实现细节,对于我们来说也可以更好的理解和使用,并且可以借鉴他的思想)
下面放一张图来表示对应的关系
(画图水平有限还没有鼠标,不过我已经很努力的)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面,让我们来配置Student.hbm.xml(这个文件的位置应当与我们要映射的类在同一个包下,在这里,也就是与Student这个类在同一个包下)
<?xml version="1.0"?>
<!-- 导入约束 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 在这里填写Student所在的包路径,我的Student类在cn.encore.bean这个路径下 -->
<hibernate-mapping package="cn.encore.bean">
<!-- 这里配置主要的映射关系,我们要把Student类映射到student这个表中,name属性填类名,table属性填表名 -->
<class name="Student" table="student">
<!-- 把我们的学生类的id属性作为主键,<generator class="native"> 意味着id的自增长方式采用数据库的本地方式-->
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<!-- 把学生类中name属性做一下映射,在这里,我们只设置了name属性,而没有声明他对应表中的哪个元素,也就是table属性,这是因为只要我们保证自己编写的JavaBean属性与表中的元素名如果相同,那么我们是可以省略配置table属性的 -->
<property name="name" />
</class>
</hibernate-mapping>
下面,让我们来配置一下hibernate.cfg.xml(这个文件的位置要在项目根目录的src文件夹下)
<?xml version='1.0' encoding='utf-8'?>
<!-- XML约束 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<!-- 配置数据库驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置数据库url -->
<property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
<!-- 数据库账户 -->
<property name="connection.username">root</property>
<!-- 数据库密码 -->
<property name="connection.password">admin</property>
<!-- SQL dialect -->
<!-- 数据库使用的方言,这里使用了MySql方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 这句代表一个线程启动一个session -->
<property name="current_session_context_class">thread</property>
<!-- 这句代表在控制台输出执行的sql语句 -->
<property name="show_sql">true</property>
<!-- 这句代表自动更新表结构,我们之前是根本没有创建表的,当配置这条后,Hibernate会为我们自动生成表以及自动更新表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射的XXXXXX.hbm.xml文件 -->
<mapping resource="cn/encore/bean/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
配置好之后,我们就可以使用Hibernate框架了,下面我们编写一个测试类
package cn.encore.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import cn.encore.bean.Student;
public class TestHibernate {
public static void main(String[] args) {
//先得到一个Session工厂,用于得到Session
SessionFactory sf = new Configuration().configure().buildSessionFactory();
//获取一个Session对象
Session s = sf.openSession();
//打开事务
s.beginTransaction();
//创建一个学生类,并为其设置名字
Student stu = new Student();
stu.setName("王闪火");
//把这个学生保存到student表中
s.save(stu);
//获得事务并提交
s.getTransaction().commit();
//关闭session以及session工厂
s.close();
sf.close();
}
}
运行这段代码后,我们再去查看数据库,会发现在test数据库中,多了一个student表,其中有一条叫做王闪火的记录,看到这里