Hibernate简述及入门实例

一.Hibernate简述

总的概括,Hibernate是一个ORM的轻量级持久层框架,解决了对象和关系数据库中表的不匹配问题(阻抗不匹配)以及拥有开发代码不用去继承hibernate类或接口的优势(无侵入性)。hibernate框架实现使得开发人员可以避免反复地编写javajdbc部分代码,应用面向对象的思维操作关系型数据库。

二.使用myeclipse创建hibernate实例两种方法(以hibernate3.5.2及mysql为例)

a)手动编写hibernate.cfg.xml及*.hbm.xml文件

1.新建java项目,导入相应所需jar包(lib\required文件夹内所有jar包+mysql相应jar包+hibernate3.jar包)到java项目下新建的lib文件

夹中,选中所有jar右键Build Path->Add Build Path,在src文件夹下新建一个pro包test包和hibernate.cfg.xml文件

2.在pro包下建Student实体类(PS:myeclipse自动生成get/set方法:Ctrl+Shift+s -> Generate Getters and Setters)

 1 package test.hibernate.pro;
 2
 3 public class Student {
 4     int id;
 5     int age;
 6     String name;
 7     int classid;
 8     public int getId() {
 9         return id;
10     }
11     public void setId(int id) {
12         this.id = id;
13     }
14     public int getAge() {
15         return age;
16     }
17     public void setAge(int age) {
18         this.age = age;
19     }
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     public int getClassid() {
27         return classid;
28     }
29     public void setClassid(int classid) {
30         this.classid = classid;
31     }
32 }  

3.使用MysqlGUI工具或cmd窗口建表(也可使用hibernate的SchemaExport方法自动生成表结构)。这里使用cmd窗口,进入mysql文件夹下lib目录输入mysql –hlocalhost –u root –p,之后Enter Password进入数据库create建表

4.在pro包下建*.hbm.xml文件导入头文件,完成object与表结构的映射关系

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="test.hibernate.pro.Student" table="student">
 7         <!-- name值为对象属性名,column值为相应列名 ,相互对应    -->
 8         <id name="id" column="stu_id">
 9             <!-- 主键生成策略 -->
10             <generator class="native"></generator>
11         </id>
12         <!-- 实体类属性 -->
13         <property name="age" column="stu_age"></property>
14         <property name="name" column="stu_name"></property>
15         <property name="classid" column="stu_classid"></property>
16     </class>
17 </hibernate-mapping>  

5.配置hibernate.cfg.xml文件

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5
 6 <hibernate-configuration>
 7 <session-factory>
 8     <!-- 配置资源信息 -->
 9     <!-- mysql默认端口号为3306 -->
10     <property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property>
11     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
12     <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
13     <property name="connection.username">root</property>
14     <property name="connection.password">123456</property>
15     <property name="format_sql">true</property>
16     <property name="show_sql">true</property>
17
18     <!-- 数据库方言 -->
19     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
20
21     <!-- 注册调用*。hbm.xml文件 -->
22     <mapping resource="test/hibernate/pro/Student.hbm.xml"></mapping>
23 </session-factory>
24 </hibernate-configuration>  

6.运行test包下test.java测试

 1 package test.hibernate.test;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7
 8 import test.hibernate.pro.Student;
 9
10 public class test {
11     public static void main(String[] args) {
12         Configuration cfg = new Configuration().configure();
13
14         // hibernate3.5写法
15         SessionFactory sf = cfg.buildSessionFactory();
16         // hibernate4.0 -hibernate4.2 写法
17         // ServiceRegistry reg = new
18         // ServiceRegistryBuilder().applySettings(cfg.getProperties())
19         // .buildServiceRegistry();
20         // hibernate4.3 写法
21         // ServiceRegistry reg = new
22         // StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
23         // .build();
24         // SessionFactory sf = cfg.buildSessionFactory(reg);
25
26         Session session = null;
27         Transaction ta = null;
28         try {
29             session = sf.openSession();
30             ta = session.beginTransaction();
31
32             Student stu = new Student();
33             stu.setAge(17);
34             stu.setName("Neo");
35             stu.setClassid(2);
36             session.save(stu);
37
38             ta.commit();
39         } catch (Exception e) {
40             e.printStackTrace();
41             if (ta != null) {
42                 ta.rollback();
43             }
44         } finally {
45             if (session != null && session.isOpen()) {
46                 session.close();
47             }
48         }
49     }
50 }  

b)使用myeclipse自动生成hibernate.cfg.xml及*.hbm.xml文件

1.新建java web项目,src目录下建pro,factory,dao,test包

2.打开任务栏window -> Show View -> DB Browser,导入mysqljar包新建mysql jdbc Driver。右键项目 -> MyEclipse -> ProjectFacets -> Install Hibernate Facet创建hibernate.cfg.xml及SessionFactory文件命名为SF.java


3.DB Browser中右键表结构Hibernate Reverse Engineering反向生成实体类到pro包,选项三个勾一个点,选择主键增长策略,实例中选择native(默认为native)

4.dao包中创建dao层类

 1 package test.hibernate.dao;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5
 6 import test.hibernate.factory.SF;
 7 import test.hibernate.pro.Student;
 8
 9 public class StudentDao {
10     Session session = null;
11     Transaction ta = null;
12
13     public void addStudent(Student stu) {
14         try {
15             session = SF.getSession();
16             ta = session.beginTransaction();
17             session.save(stu);
18             ta.commit();
19         } catch (Exception e) {
20             e.printStackTrace();
21             if (ta != null)
22                 ta.rollback();
23         } finally {
24             if (session != null)
25                 session.close();
26         }
27     }
28 }  

5.test包中创建test测试类测试

 1 package test.hibernate.test;
 2
 3 import test.hibernate.dao.StudentDao;
 4 import test.hibernate.pro.Student;
 5
 6 public class Test {
 7     public static void main(String[] args) {
 8         StudentDao sd = new StudentDao();
 9
10         Student stu = new Student();
11         stu.setStuAge(19);
12         stu.setStuName("Mike");
13         stu.setStuClassid(1);
14
15         sd.addStudent(stu);
16     }
17 }  

总结,hibernate实现了orm对象关系映射,以对象形式对数据库数据进行增删改查的操作从而提升了编程的效率。

时间: 2024-12-26 17:47:18

Hibernate简述及入门实例的相关文章

【转】Hibernate入门实例

1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate ORM,可以下载最新的hibernate,还有配套的document教程 http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/ .下载到的hibernate文件夹中有document文档(hibernate\documenta

Nhibernate系列学习之(一) ORM and Nhibernate入门实例解析

最近框架项目需要,数据层想使用Nhibernate,代替传统的sql语句的写法,更加使用面向对象的思维来维护实体与数据库的这层关系映射(ORM),好在之前接触过Java时学习使用了Hibernate,先来了解ORM.    什么是ORM? 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务

DWR之入门实例(一)

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

Java AIO 入门实例(转)

Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: Java代码   public class SimpleServer { public SimpleServer(int port) throws IOException { final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(por

FPGA入门实例一:LFSR

一:任务: 要求使用Verilog语言在Xilinx Virtex-6开发板上实现线性反馈移位寄存器(LFSR)的硬件逻辑设计. 二:前期准备: 基本上完成一个简单的设计需要用到以下几个软件 逻辑:Uedit32(硬件狗吐血推荐) 综合:ISE14.1 仿真:Modelsim SE 10.1b 分析:Chipscope Pro 三:设计流程 逻辑: 首先当然是RTL级设计,俗称硬件逻辑设计.使用的是Uedit32,这个软件相当于一个记事本,但编辑功能十分强大,简直是写Verilog代码的神器,具

php页面get方法实现ajax,入门实例教程

ajax,入门实例教程 本例针对php页面,做了一个小的demo加深对ajax的理解 1.文档结构: 共有ajax.php 和action.php 2个页面. 2.源码如下: /*ajax.php页面*/<!DOCTYPE html> <html lang="en"> <head> <title> ajax</title> <script type="text/javascript"> func

Omnet++ 4.0 入门实例教程

http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用.照着做就能完成,有些小地方不同而已 Omnet++ 4.0 入门实例教程根据http://omnest.com/webdemo/ide 上的实例,自己动手做了做.新版本的4.0 跟它视频上的版本有些差别,配图说明一下我的操作过程,供大家一起学习.现在开始.首先,开发环境选择simulation 的视

freemarker入门实例与源码研究准备工作

首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的是:freemarker的ftl文件解析使用javacc实现的,所以源码中没有解析类(FMParse.java).要想研究freemarker源码,往往还需要引入freemarker.jar(含有FMParse.class),否则源码会出现编译问题.另外,还需要引入的jar包有:commons-lo