Hibernate--入门(一)
来源:互联网 发布:刘意java就业班视频 编辑:程序博客网 时间:2024/05/21 18:31
1.什么叫hibernate?
Hibernate是一个框架(framework)是一个orm(objectrelation mapping对象映射关系)框架,hibernate处于项目持久层位置(又有人称为持久层框架),hibernate实际上是对jdbc进行了轻量级的封装。
可以这样来说:Hibernate是对jdbc进行轻量级封装的orm框架,充当项目的持久层,基础是java的反射机制。
什么是数据持久层?
(J2EE的三层结构是指表示层(Presentation),业务逻辑层(Business Logic)以及基础架构层(Infrastructure),这样的划分非常经典,但是在实际的项目开发法中,开发者通常对三层结构进行扩展来满足一些项目的具体要求,一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。由于对象范例和关系范例这两大领域之间存在“阻抗不匹配”,所以把数据持久层单独作为J2EE体系的一个层提出来的原因就是能够在对象-关系数据库之间提供一个成功的企业级映射解决方案,尽最大可能弥补这两种范例之间的差异。)
--摘自于百度百科
说白了就是在业务层和数据库之间增加一个转换,数据库本身是关系模式,体现的是关系(比如外键,主键什么的),而业务层(java操纵的是对象)操作的是对象模型,对象模型向关系模式转换时形成了一个阻抗,为了解决这个阻抗,必须在他们之间搭一个桥,这个桥就是数据持久层。
2、使用hibernate的好处:
1, 引入hibernate可以是工作人员角色细化,让程序员更关心业务流程,让数据库人员关注数据库相关的操作。
2, 分层更清晰,耦合性更小(耦合性:软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差)。
3, 通用性强:可以更轻松的从一个数据库平台转移到别的平台。
4, 对象化:把关系数据库变成了java的对象,更加方便操作。
5, 性能保证:hibernate可以按照不同的数据库,处理不同的操作是用最优化的sql语句,不用我们去想,对于分等算法,在hibernate中会显得更加简单,可靠。
6, 增加了程序的鲁棒性(指程序的健壮性和强壮性)。
快速入门的一个小案例(手动配置)
开发流程:
1、 创建一个项目
打开myeclipse,新建一个Java Program
2、 引入hibernate开发包(从网上下载:http://www.hibernate.org(官方网站)),
3、 Hibernate开发有三种方式:
(1) 由Domain object->mapping->db。(官方推荐)(Domain类,然后再映射关系,在根据Domain自动在数据库生成相应的表)
(2) 由DB开始,用工具生成mapping和Domain object。(使用较多)。
(3) 由映射文件开始。
我们使用第二种方法开发项目:
创建表employee
Create tableemployee(
Id number primary key,
Name varchar2(64) not null,
Email varchar2(64) not null,
)
数据库创建成功后建立Domain对象,然后再写对象关系映射文件(数据持久层)
4、 开发Domain和对象关系映射文件
package com.domain;
public class Employee{
//建议domain对象的名称就是对应表的首字母大写的名字,因为以后用工具生成默认也是这样的。有人称这为javabean,也有人称为domain的对象,pojo(plain old/ordinary java object 译:简单的java对象)的,其实都是一样的。
}
对象关系映射文件:作用是用于指定 domain对象和表的映射关系. ,该文件的取名有规范:
domain对象.hbm.xml,一般放在和domain对象同一个文件夹下(包下)
Employee.hbml.xml配置文件 :
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="com.hsp.domain"> <classname="Employee" table="employee"> <!--id元素用于指定主键属性--> <id name="id" column="id"type="java.lang.Integer"> <!--该元素用于指定主键值生成策略--> <generatorclass="sequence"> <paramname="sequence">emp_seq</param> </generator> </id> <!--对其它属性还有配置--> <propertyname="name" type="java.lang.String"> <columnname="name" not-null="false" /> </property> <propertyname="email" type="java.lang.String" > <columnname="email" not-null="false"/> </property> <propertyname="hiredate" type="java.util.Date"> <columnname="hiredate" not-null="false" /> </property> </class></hibernate-mapping>
5. 配置hibernate.cfg.xml文件,该文件用于配置连接的数据库的类型,driver,用户名,密码 ,url同时管理对象关系映射文件 ,该文件的名称
<?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.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <propertyname="show_sql">true</property> <mappingresource="com/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>
然后再编写测试文件:
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.*;import com.domain.Employee;public class TestMain {/** * @param args */public static void main(String[] args) {//查询[load]->hql语句(hibernate query language)}public static void delEmp() {//删除//获取一个sessionSession session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();Employee emp=(Employee) session.load(Employee.class, 3);session.delete(emp);ts.commit();session.close();}public static void updateEmp() {// TODO Auto-generated method stub//修改用户//获取一个会话Session session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//修改用户1. 获取要修改的用户,2.修改//load是通过主键属性,获取该对象实例.<--->表的记录对应Employee emp=(Employee) session.load(Employee.class, 3);emp.setName("chen");//update...emp.setEmail("abc@sohu.com");ts.commit();session.close();}public static void addEmployee() {//我们使用hibernate完成crud操作[这里我们只见对象,不见表]//现在我们不是用service ,直接测试.//1。创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化Configuration configuration=new Configuration().configure();//2.创建SessoinFactory[这是一个会话工厂,是一个重量级的对象]SessionFactory sessionFactory=configuration.buildSessionFactory();//3.创建Sessoin 相当于jdbc Connection[ servelt HttpSession ,也不是 jsp session]Session session=sessionFactory.openSession();//4.对hiberate而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交,Transaction transaction = session.beginTransaction();Employee employee=new Employee();employee.setName("chenxin");employee.setEmail("aec@sohu.com");employee.setHiredate(new Date());//insert .............//保存session.save(employee);//save employee就是持久化该对象 (把对象保存到了数据库中称为一条记录)//==>insert into ....[被hiberante封装]//提交transaction.commit();session.close();}}
这样就完成了一个小的入门程序。
- Hibernate (一)hibernate入门
- Hibernate--入门(一)
- Hibernate入门(一)
- hibernate入门(一)
- Hibernate入门(一)
- Hibernate入门(一)
- Hibernate入门应用(一)
- Hibernate入门学习(一)
- hibernate入门实例(一)
- Hibernate入门(一)HelloWorld
- 【Hibernate】(一)快速入门
- hibernate入门学习(一)
- 【Hibernate】(一)快速入门
- hibernate入门案例(一)
- hibernate入门实例(一)(初学者)
- Hibernate入门(一:简单配置)
- hibernate入门(一)配置文件详解
- 【Hibernate】(一)入门及原理
- 我自回眸一笑
- PHP语法速查表手册(1)
- PHP语法速查表手册(2)
- 史上20大计算机病毒
- hosts
- Hibernate--入门(一)
- JS写的将鼠标放到数字上就能换图片…
- 自己写Makefile编译当前文件夹下子文件夹中的文件
- JS传参写的点击按钮或点击超链接a…
- 面试准备(1)
- win7 iis 安装部署问题
- Photoshop视频教程全集
- WPF 播放资源音频文件
- 常用快捷键—Webstorm