您的位置:首页 > 其它

hibernate学习笔记(一)

2015-07-19 21:46 288 查看
hibernate是经典的ssh三大框架之一(另两个是struts和spring),hibernate是一个orm(object relation mapping)框架,也就是对象关系框架。实际上简单来说,hibernate就是把我们的JDBC进行了简单的封装,这个框架是基于Java的反射机制。我们的项目中使用hibernate这个框架的最大的好处就是一旦项目要换数据库,只需要更改其中极少的部分就可以了,不用所有的表重建或是所有的sql语句重写,这个庞大的工程就可以交给hibernate这个框架,它会帮你生成,这就是它的优势之一。

我们先来实现一个小的项目。

1.创建一个新的项目

2.画出简单的项目框架图

3.使用hibernate,

引入hibernate 开发包 (从网上下载 google hibernate http://www.hibernate.org)

工具方面我使用的是MyEclipse,安装及破解详情见我的另一篇博客,这里就不详细说明了。新建一个Java project就可以了,举个小例子不用web项目,要不还得传服务器,略麻烦。下面就是核心问题hibernate的配置问题,其实学习hibernate的核心就是学习怎么配置hibernate.cfg.xml这个核心的配置文件

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- hibernate 设计者,给我们提供了一写常用的配置 -->
<!-- 配置使用的driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">1</property>
<property name="connection.url">jdbc:mysql://localhost:3306/exercise1</property>
<!-- 配置dialect方言,明确告诉hibernate连接是哪种数据库 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示出对于sql -->
<property name="show_sql">true</property>
<!-- 自动创建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定管理的对象映射文件 -->
<mapping resource="com/cyj/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>


这个是配置的MySQL数据库

<property name="hbm2ddl.auto">update</property>
这句是转换其他的数据库时根据你的表和对象的对应关系自动装换的,当然了,要想做到转化到别的数据库,前边的驱动等等那一大片也要改成相应的数据库。

总体来说,hibernate框架就是完全用对象的关系代替了数据库内部的操作,其实在底层仍然是对数据库的sql语句操作,但是进行了封装之后就可以直接用对象控制了,比较好管理也简单易行。

下面我们来实现CRUD,首先是增加一条记录

public static void addEmployee() {
//使用hibernate来完成crud操作
//1.先创建一个configuration
Configuration configuration = new Configuration().configure();
//2.创建一个sessionfactory这是一个会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.创建一个会话,表示与数据库的对话
Session session  = sessionFactory.openSession();
//4.在hibernate中增删改查都是事务提交的方法
Transaction transaction = session.beginTransaction();
//添加一个雇员
Employee employee = new Employee();
employee.setName("aaaa");
employee.setEmail("aaaa@outlook.com");
employee.setHiredate(new Date());
session.save(employee);//会被hibernate封装,变为对应数据库的语言
transaction.commit();
session.close();
}
这个是对数据库进行操作的标准动作,分为四步,在hibernate中CRUD都是通过事务的提交在实现的也就是transaction

然后是修改update

public static void updateEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
//获取了一个session(从自己的会话工厂里获取一个session)
Transaction ts = session.beginTransaction();
//获取要修改的用户,然后在修改
//load是通过主键属性获取该对象实例,与表的记录对应
Employee emp = (Employee)session.load(Employee.class,1);
emp.setName("ada");
emp.setEmail("ada@outlook.com");
ts.commit();
session.close();
}


这里的MySessionFactory是我自己写的一个类:

final public class MySessionFactory {
private static SessionFactory sessionFactory = null;
private MySessionFactory(){

}
static{
sessionFactory  = new Configuration().configure().buildSessionFactory();

}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}


然后是删除

public static void deleteEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction ts = session.beginTransaction();
Employee emp = (Employee)session.load(Employee.class, 1);
session.delete(emp);
ts.commit();
session.close();
}


这里使用了load,load是通过主键属性获取该对象实例,就如代码写的这么用即可。

总结:主要是要不hibernate的核心配置文件hibernate.cfg.xml配好,剩下的熟悉开发流程,没有很大的技术困难。刚开始的时候会报各种错,hibernate是一把双刃剑,优势是很大的,不过如果用的不好甚至效率会下降。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: