Hibernate (介绍一)

[img]http://dl.iteye.com/upload/attachment/178791/6339f244-f11a-3e0a-adc9-a1386b7edf11.jpg[/img]


随着java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE得到了长足的发展。借助于J2EE规范中包含的多项技术。Enterprise javaBean(EJB),Java Servelts(servlet),java server Pages(jsp) java Message Services(JMS)等 开发出许多应用的系统,但是,在传统的J2EE应用开发过程中也出现了一些问题 1) 数据模型和逻辑模型之间的矛盾,目前使用的数据库基本上都是关系型数据库,而java本质上一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据操作,降低了编程的效率以及系统的可维护性。 2) 传统的J2EE应用多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但是使用EJB容器进行开发和调试需要耗费大量时间,为降低代码大的耦合性,提高系统的开发效率 提出了一种基于struts框架和Hibernate框架的J2EE 应用的开发策略! 以前大体的接触过但是没有仔细研究过,这两天刚开始进行学习,写本博客的目的是为了加深技术的巩固,如果有不准确的地方请多多包含!

废话不多说了 咱就先从Hibernate数据持久层框架开始说起!

HIbernate是一个数据持久层框架,是一种实现的对象和关系之间映射(O/R Mapping)的工具,他能支持 它对JDBC进行了轻量级的对象封装,是程序员可以是用对象编程思想来操作数据库,它不仅提供了从java类 到数据表的映射,也提供了数据查询和恢复机制,相对于使用JDBC和SQL来操作数据库,使用了Hibernae能大大的提高实现效率!

HIbernate框架用配置文件的形式来定义java对象和数据库表之间的映射关系,同时在更深的层面讲数据库表之间的关系解释为对象之间java对象之间的继承以及包含等关系,通过HQL语句将复杂的关系算法用对象的方式描述。在很大程度上简化了对象的数据查询,加快了开发的效率,在hibernate种有一个简单而之间的API,用于对数据库说表示的对象执行查询,要创建或修改这些对象,只需在在程序与他们进行交互。然后告诉hibernate保存即可。这样,大量封装持久化操作的业务逻辑也不再需要编写繁琐的JDBC语句,从而使数据持久层得到极大的简化!


1 新建一个java项目 (java项目即可,因为我们知道hibernate它能支持透明持久化从这个角度来看它没有侵入性 所谓侵入性它没有侵入hibernate任何的API所以它叫轻量级框架,轻量级框架的好处是没有侵入性 另外的一个好处是为测试带来了好处,测试非常简单 测试就行我们写普通的java应用程序一样不需要什么环境只需要几个jar包就可以了写个main函数一侧就可以了 它没有侵入性和测试非常简单 这是它流行的一个原因。所以我们建立一个java项目就可以了 )
2 创建User Library 假如jar

导入jar文件 这样很麻烦的 所以我们建立一个自定义的库 以后用的时候直接导入就可以了

创建方式:windows-Preferences--java 里面有一个Build Path 选中User Libraies 就可以了 new 一下,名称可以随便起 我们这里叫Hibernate3就可以了 需要注意的是下面的那个单选框 不要选中!下一步为这个库导入需要的jar就可以了 这样我们的User Libeaies库就已经建立好了 但是我们还需要引用到工程里面

单击工程--右键 --properties---Java Build Path ----Libraries ---add Library 找到User Library 然后Next 选中 点击OK就可以了
3 创建hibernate配置文件 hibernate.cfg.xml 为了便于调试 最好加入log4j配置文件 在这里面配置数据库我们先放到src目录下吧


<?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">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databasename=xinyang</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="myeclipse.connection.profile">many2one</property>
<property name="hibernate.show_sql">true</property>

<mapping resource="com/xinyang/bean/Users.hbm.xml"/><!-- 要放到property属性后面 -->
</session-factory>
</hibernate-configuration>


下面我们架构配置完成了下面我 我说点废话 :

使用Hibernate我们正确的使用方式是什么 ,应该先建立对象模型不应该先建表,这是正确的思维方式 但是有些公司还是先创建表 在做 在使用hibernate 这样就不O了 ,因为表式面向关系的,所以我们先建立实体类


4:定义实体类


package com.xinyang.bean;
import java.util.Date;
public class Users {
private String id;//表示ID
private String name;
private String password;
private Date createTime;//生效日期
private Date expireTime;//过期日期

get ,set ()方法

}

5:我们建立映射文件 这个映射文件的名字和路径是可以随便取的,他的目录通常是和实体类放在一起,因为这个映射文件时描述实体类中的属性的 所以通常称为元数据,元数据是描述类和类中属性关系的 ,


<?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.xinyang.bean.Users"><!-- 实体类的目录 -->
<id name="id">
<generator class="uuid"/><!-- 全局的唯一标识 配置生成策略-->
</id>
<property name="name"/> <!-- 普通属性用property -->
<property name="password"/>
<property name="createTime"/><!-- hibernate有一套java到数据库的映射机制根据属性自己配置字段的数据类型 -->
<property name="expireTime"/>
</class>
</hibernate-mapping>

当然表名和列名可以重新命名 我们以后在讲 ,它们默认的和属性名一致,表明和实体类名一致


6 编写hbm2ddl工具类讲实体类生成数据库表

package com.xinyang.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
* 生成表-
* @author Administrator
*-
*/
public class ExportDB {

public static void main(String[] args){
//用到Hibernate API Configuration 作用 :读取配置文件-hibernate.cfg.xml
// Configuration cfg=new Configuration(); 读取hibernate.properties文件
Configuration cfg=new Configuration().configure();
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);

}
}

注意在生成之前 要把数据库建立起来 ,数据库名称它不会自动创建

7 我们写一个客户端 往里面插入一条数据测试下

package com.xinyang.servlet;

import java.util.Date;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.xinyang.bean.Users;

public class Client {
public static void main(String[] args){
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//一个数据库对应一个sessionFactory
//创建SessionFactory
SessionFactory factory=cfg.buildSessionFactory();

//session对connection进行封装
org.hibernate.Session session=null;

try{
session=factory.openSession();
//开启事物
session.beginTransaction();
Users user=new Users();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
session.save(user);
//提交事物
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//回滚事物
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值