分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Hibernate简述及入门实例

发布时间:2023-09-06 01:12责任编辑:苏小强关键词: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对象关系映射,以对象形式对数据库数据进行增删改查的操作从而提升了编程的效率。

Hibernate简述及入门实例

原文地址:http://www.cnblogs.com/babycoder/p/7560226.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved