目录
MyEclipse10下使用Hibernate框架实例... 1
第1节 什么是Hibernate. 1
第2节 什么是ORM... 1
第3节 Hibernate快速入门... 1
第一步:下载Hibernate. 1
第二步:创建数据库与表... 2
第三步创建实体类... 4
第四步导入Hibernate框架相关依赖jar包... 4
第五步Hibernate的相关配置文件... 5
第六步设置映射配置文件... 6
第七步设置核心配置文件... 7
第八步Hibernate快速入门开发测试... 8
第4节 Hibernate执行原理总结... 12
第5节 遇到的问题与解决... 12
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
从中,我们可以得出这样的结论:Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。它是在dao层去使用的。
对象关系映射(Object Relation Mapping,简称ORM,或O/RM),一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
对象-关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。
简单来说,我们使用ORM可以将我们的对象(或类)去进行映射,使得我们可以去操作对象就能完成对表的操作。
介绍完Hibernate轻量级框架以后,接下来我们用一个实例来对Hibernate有一个直观的了解(在这之前,希望大家能够简单的了解下JDBC)。
下载链接:http://hibernate.org/orm/releases/5.3/#get-it
mySqlJAR驱动包+Navicat+mySql:https://pan.baidu.com/s/1w3FIeesc1INIu-WYJBexGA
密码;nu82
我下载的版本是:
解压缩以后,我们可以看到该目录结构:
图:Hibernate目录结构
其中,在lib/required目录下,包含运行Hibernate项目必须的jar包有:
图:Hibernate所在需要的JAR包
Hibernate是一个轻量级的JDBC封装,也就是说我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是数据的交互操作。
接着我们创建一个测试库和测试表。
在测试样例中,我使用的mySql,并用的是Navicat for MySql可视化操作工具。
图:Navicat for MySql界面
接着我们点击左上角的连接,新建一个新建一个Demo连接:
图:新建Demo连接
注意:mysql安装 的端口号为3306,root为一个用户,大家可以新建用户。
创建连接以后,右键点击连接Demo,选择连接命令列界面,并且运行如下命令,即可:
create database hibernateTest;
use hibernateTest;
create table t_customer(
id int primary key auto_increment,
name varchar(20),
address varchar(50)
);
图:创建测试库
我们创建的hibernatetest库完成了。
图:创建库
首先在MyEclipse上创建一个Web Project,比如我创建的是hibernate_demo1,然后再切到Java透视图。这儿我们在cn.itheima.domain包中创建一个实体类——Customer.java。
public class Customer {
private int id;
private String name;
private String address;
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";
}
}
首先导入hibernate/lib/required目录下所有的jar包:
图:导入包
再导入mysql数据库的驱动jar包:
导入完成以后,我们的工程架构如下:
准备好以上工作以后,接下来我们要踏入Hibernate的学习了,首先我们要编写Hibernat的相关配置文件,Hibernate的相关配置文件分为如下两种:
有关这两个文件的详细介绍会在下面的章节,简答来说就是让系统明白我们采用什么方法连接,我们怎样连接,我们的数据的类型是什么。
1、首先我们要学会如何编写映射配置文件,大家要知道编写完的映射配置文件应与实体类在同一个包下,并且名称应是:类名.hbm.xml,所以我们要在cn.itheima.domain包下创建一个Customer.hbm.xml文件,但是它的约束应该怎么写呢?可以在Hibernate的核心jar包——hibernate-core-5.0.12.Final.jar的org.hibernate包下查找到hibernate-mapping-3.0.dtd文件,打开该文件,找到如下内容:
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
2、然后复制黏贴到Customer.hbm.xml文件中。然后我们把Customer.hbm.xml文件的内容修改为:
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
图:配置映射配置文件
核心配置文件主要是Hibernate框架所使用的,它主要包含了连接数据库的相关信息和Hibernate的相关配置等。 现在我们要学会如何编写Hibernate核心配置文件,核心配置文件应该放在src目录下,并且名称应是hibernate.cfg.xml。
所以我们要在src目录下创建一个hibernate.cfg.xml文件,但是它的约束应该怎么写呢?可以在Hibernate的核心jar包——hibernate-core-5.0.7.Final.jar的org.hibernate包下查找到hibernate-configuration-3.0.dtd文件,打开该文件,找到如下内容:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
然后复制黏贴到hibernate.cfg.xml文件中,接着我们把下面的内容添加到该文件中:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.url">jdbc:mysql:///hibernateTestproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.connection.password">yeziproperty>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty>
<mapping resource="cn/itheima/domain/Customer.hbm.xml" />
session-factory>
hibernate-configuration>
图:配置核心配置文件
在cn.itheima.test包下创建一个单元测试类——HibernateTest1.java。将下面的代码赋值进去,并且开始进行单元测试,测试无误后则样例成功:
package cn.itheima.domain;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class HibernateTest1 {
// 保存一个Customer
@Test
public void saveCustomerTest() {
// 创建一个Customer
Customer c = new Customer();
c.setName("叶子");
c.setAddress("武汉");
System.out.println("sucess1");
// 使用Hibernate的API来完成将Customer信息保存到mysql数据库中的操作
Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
System.out.println("sucess2");
SessionFactory sessionFactory = config.buildSessionFactory();
System.out.println("sucess3");
Session session = sessionFactory.openSession(); // 相当于得到一个Connection
// 开启事务
session.beginTransaction();
System.out.println("sucess4");
// 操作
session.save(c);
System.out.println("sucess5");
// 事务提交
session.getTransaction().commit();
session.close();
sessionFactory.close();
System.out.println("提交完成");
}
// 根据id查询一个Customer对象
@Test
public void findCustomerByIdTest() {
Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession(); // 相当于得到一个Connection
// 开启事务
session.beginTransaction();
System.out.println("开启事务");
// 根据业务来编写代码
// Customer c = session..get(Customer.class, 1);
System.out.println("加载类");
//加载数据库中的第几个数据
Customer c = session.load(Customer.class, 3);
System.out.println("加载成功");
// System.out.println(c.getName());
int i = c.getId();
String name = c.getName();
System.out.println("cId = "+i+"cName = "+name);
// 事务提交
session.getTransaction().commit();
session.close();
sessionFactory.close();
System.out.print("查找完成");
}
// 修改操作
@Test
public void updateCustomerTest() {
Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession(); // 相当于得到一个Connection
// 开启事务
session.beginTransaction();
// 根据业务来编写代码
Customer c = session.get(Customer.class, 1);
c.setName("郑敏");
session.update(c); // 修改操作
// 事务提交
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
// 删除操作---根据id进行删除
@Test
public void deleteCustomerTest() {
Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession(); // 相当于得到一个Connection
// 开启事务
session.beginTransaction();
// 根据业务来编写代码
Customer c = session.get(Customer.class, 2);
session.delete(c); // 删除操作
System.out.println("删除成功");
// 事务提交
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
// 查询所有Customer
@Test
public void findAllCustomerTest() {
Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession(); // 相当于得到一个Connection
// 开启事务
session.beginTransaction();
// 根据业务来编写代码
org.hibernate.Query query = session.createQuery("from Customer"); // HQL语句,它类似于SQL语句
List
System.out.println(list);
// 事务提交
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
图:创建xml文件
注意:该映射文件所放的位置要放在我们的实体类的所在包下。
注意:该文件要放在src目录下。