实验五 入门Hibernate实验

合集下载

hibernate教程

hibernate教程

hibernate教程Hibernate是一个开源的对象/关系映射框架,它提供了一种通过Java类对数据库操作的方式,能够帮助我们更加方便、灵活地操作数据库。

下面是一个简要的Hibernate教程。

1. 配置Hibernate:在使用Hibernate之前,需要先配置Hibernate的相关信息,如数据库连接等。

配置信息可以存放在一个XML文件中,通过读取XML文件来获取。

2. 创建实体类:在Hibernate中,数据库中的表与Java中的类是一一对应的关系,我们需要创建与数据库表对应的Java类。

在Java类中,可以定义属性来表示表中的列,并相应地定义getter和setter方法。

3. 定义映射文件:映射文件定义了Java类与数据库表之间的映射关系。

在映射文件中,需要指定类名、表名、属性与列的对应关系等。

4. 创建SessionFactory:SessionFactory是Hibernate的核心接口之一,用于创建Session对象。

SessionFactory负责初始化Hibernate的配置,以及创建数据库连接池。

5. 创建Session:Session是Hibernate处理持久化操作的接口。

它代表了一次对数据库的操作,可以用于保存、更新、删除对象,以及执行查询操作。

6. 保存对象:在Hibernate中,可以通过Session的save方法将Java对象保存到数据库中。

当调用save方法后,Hibernate会自动将Java对象转换为SQL语句,并执行保存操作。

7. 更新对象:通过Session的update方法可以更新数据库中的对象。

当调用update方法时,Hibernate会根据对象的状态,自动执行更新操作。

8. 删除对象:通过Session的delete方法可以删除数据库中的对象。

当调用delete方法时,Hibernate会自动执行删除操作。

9. 查询对象:Hibernate提供了一种面向对象的查询语言,称为HQL(Hibernate Query Language)。

hibernate菜鸟教程

hibernate菜鸟教程

hibernate菜鸟教程
Hibernate是一个开源的对象关系映射框架,它提供了将Java
对象映射到关系数据库中的功能,并支持数据库的CRUD操作。

通过Hibernate,开发人员可以摆脱传统的JDBC编程,
简化了数据持久化层的开发工作。

Hibernate的主要特点包括:
1. 对象关系映射:Hibernate的核心功能就是将Java对象和关
系数据库之间进行映射,开发人员不需要编写繁琐的SQL语
句来进行数据的持久化操作,只需要操作Java对象即可。

2. 高度可定制化:Hibernate提供了丰富的配置选项,可以根
据项目的需求进行灵活的配置。

开发人员可以使用XML文件
或者注解来定义映射关系。

3. 数据库无关性:Hibernate可以适用于多种关系数据库,开
发人员不需要关心不同数据库的SQL差异,只需要根据Hibernate的API进行开发即可,从而提高了开发的效率。

4. 缓存机制:Hibernate内置了一级缓存和二级缓存的支持,
可以提高数据的访问效率。

一级缓存是在Session级别的缓存,而二级缓存是在SessionFactory级别的缓存。

5. 延迟加载:Hibernate支持延迟加载机制,可以在需要访问
关联对象时再进行查询,提高了性能。

总之,Hibernate是一个非常强大且灵活的对象关系映射框架,能够极大地简化数据持久化层的开发工作,提高开发效率。

它已经成为了Java开发中非常重要的框架之一。

hibernate实验手册

hibernate实验手册

目录新建数据库和表在数据库test 中创建student 表格创建 HibernateDemo Java Project新建一个Java Project命名为:HibernateDemo添加Hibernate Capabilities 到现有项目像添加Spring和Struts支持一样,给项目添加Hibernate Capabilities点击”next”再点击”next”选择好“DB Driver”点击“next”新建一个package得到:点击“Finish”使用反向工程快速生成Java POJO 类,映射文件和DAO找到DB Browser选择我们创建的student表右键点击出现下图:选择“Hibernate Reverse Engineering”出现:在Java Package那里通过“Browser”找到项目的dao包按顺序将要打勾的地方打上勾点击1 处的Java src folder 最右侧的Browse 按钮,查看可用的Hibernate 项目以及源码目录,这些目录将用来存放最终生成的文件。

这里选中HibernateDemo 项目中的src 文件夹.。

点击2 处的Java package 输入框右侧的Browse 按钮,选中dao 包,或者新建一个其它的包来存放生成的代码所在的包。

将3 中的两个复选框选中,这样将为每个数据库表生成Hibernate 映射文件(*.hbm.xml),并在hibernate.cfg.xml 中将新生成的映射文件加入。

在4 中选中复选框Java Data Object(POJO <> DB Table),这样为映射文件和表格生成对应的数据对象(POJO)。

按照图示选中5 处的复选框,这样将能生成普通的DAO 类。

点击“Finish”看到:编写测试类在项目文件夹中新建一个类:学写第一个HQL语句如下图在HQL 1 中输入“From Student s where s.id = 1”。

J2EE项目实训Hibernate框架技术——第1章 Hibernate OR Mapping技术基础(第3部分)

J2EE项目实训Hibernate框架技术——第1章 Hibernate OR Mapping技术基础(第3部分)

import java.util.*; public class Book { private String id; private String bookName; private char bookKind; private float bookPrice; public Book() } public String getId() { return id; } private void setId(String id){ this.id = id; } public String getBookName() { return bookName; } public void setBookName(String newBookName) { this.bookName = newBookName; } public char getBookKind() { return bookKind; } public void setBookKind(char newBookKind) { this.bookKind = newBookKind; } public float getBookPrice() { return bookPrice; } public void setBookPrice(float newBookPrice) {
图 1.19
添加 POJO 类型的 Book 类
(3)编程该 Book 类,其最后的代码请见下面的【例 1-15】所示的代码。 【例 1-15】 持久类 Book 的代码示例 package com.px1987.hexample.pobject;
杨教授工作室,版权所有,盗版必究, 2/22 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

Hibernate 5 教程

Hibernate 5 教程
重写 eqauls 和 hashCode 方法: 如果需要把持久化类的实例 放到 Set 中(当需要进行关联映射时), 则应该重写这两个方法
24
1. 创建持久化 Java 类
Hibernate 不要求持久化类继承任何父类或实现接 口,这可以保证代码不被污染。这就是Hibernate被 称为低侵入式设计的原因
28
4. 通过Hibernate API编写访问数据库的代码
运行效果:控制台打印输出SQL语句
29
4. 通过Hibernate API编写访问数据库的代码
运行效果:数据库增加一张表,表中插入一条字段
30
Helloworld
使用 Hibernate 进行数据持久化操作,通常有如 下步骤:
//1. 创建一个 SessionFactory 对象 StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure("hibernate.cfg.xml").build(); Metadata metadata = new MetadataSources(standardRegistry)
23
1. 创建持久化 Java 类
提供一个无参的构造器:使Hibernate可以使用 Constructor.newInstance() 来实例化持久化类
提供一个标识属性(identifier property): 通常映射为数据 库表的主键字段. 如果没有该属性,一些功能将不起作用,如: Session.saveOrUpdate()
Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC 驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。

实验五Hibernate、Spring及SSH集成

实验五Hibernate、Spring及SSH集成

实验五Hibernate、Spring及SSH集成实验内容学习Hibernate、Spring应用的基本开发,及SSH的简单集成实验目的了解Hibernate、Spring框架的机制掌握Hibernate、Spring应用的配置掌握Spring中Bean注解扫描装配掌握Hibernate基本编程掌握SSH的简单集成环境要求服务器:Tomcat6.0或更高,jboss6或更高集成开发环境:MyEclipse 8.6 或更高实验指导1.Hibernate简单使用1)创建表在MySQL数据库服务器上的test中创建student表,字段如下:字段名类型说明id Integer 自增,主键xh varchar(10)name varchar(10)sex varchar(2)className varchar(16)2)创建数据库连接通过菜单“window”->“show view”打开“DB Browser”窗口,在该窗口中点击右键,在弹出菜单总选择“New”,打开如下窗口。

在“Driver template”中选择“MySQL”,“Driver name”中输入一个名称(mysql),修改“Connection URL”为:jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8,输入数据库的用户名和口令,点击“Add JARS”按钮添加Mysql的驱动Jar包,点击“Finish”按钮完成创建。

3)创建工程及添加Hiberbate支持创建一个Java工程,名称为hh。

在左侧“package explore”窗口的“hh”工程名上点击右键,在弹出的菜单中选择“MyEclipse”->“Add Hibernate Capapilities...”,弹出如下对话框:在本对话框中选择我们需要的Hibernate的Jar包,使用默认选择即可,点击“Next”按钮,弹出如下窗口:在本对话框中用于指定Hibernate的配置文件的位置及名称,使用默认即可。

J2EE项目实训Hibernate框架技术——第9章 对基于Hibernate的DAO单元测试(第2部分)

J2EE项目实训Hibernate框架技术——第9章 对基于Hibernate的DAO单元测试(第2部分)

第九章对基于Hibernate的DAO单元测试(第2/3部分)1.1对基于Hibernate框架技术的DAO组件单元测试1.1.1DAO组件单元测试的测试要点1、对基于Hibernate框架技术的DAO组件的单元测试的内容对基于Hibernate框架技术的DAO组件的单元测试的内容,主要涉及如下两个方面的测试。

(1)对其hibernate.cfg.xml文件以及各个 O/R Mapping(对象/关系映射)的各种*.xml 文件的测试(2)对基于Hibernate框架技术的DAO组件中的各个数据访问功能(CRUD)的方法进行测试。

2、测试要点在测试用例类中利用Configuration类中的configure()方法来定位被测试系统的hibernate.cfg.xml文件,从而获得SessionFactory,最后获得Session。

3、对各个*.xml文件进行测试的测试用例的基本模板程序下面的【例9-4】所示为对基于Hibernate框架技术的DAO组件的各个*.xml文件进行测试的测试用例的基本模板程序。

【例9-4】测试用例的基本模板程序示例,并请注意其中的黑体部分的代码。

package com.px1987.junit.test;import junit.framework.TestCase;import java.io.*;import org.hibernate.cfg.*;import org.hibernate.*;public class TestHibernateXML extends TestCase {protected void setUp() throws Exception {super.setUp();}protected void tearDown() throws Exception {super.tearDown();}public void testHibernateXML(){SessionFactory sessionFactory=null;Session oneSession=null;String hibernateXMLFile="D:\\HibernateExmp\\EclipseJ2SEApp\\hibernate.cfg.xml"; //根据实际改变File xmlFile=new File(hibernateXMLFile);Configuration config = new Configuration().configure(xmlFile);sessionFactory=config.buildSessionFactory();this.assertNotNull(sessionFactory);oneSession=sessionFactory.openSession();this.assertNotNull(oneSession);}}1.1.2DAO组件单元测试的测试示例为了使读者对如何利用JUnit单元测试框架对基于Hibernate框架的DAO组件的单元测试有所掌握,下面给出一个针对本书的第一章中的【例1-19】所示的HibernateDAOBean 组件类,在Eclipse中开发工具中实现对其单元测试的实现过程。

Hibernate试验_03_18-19.清楚缓存对象clear_evict

Hibernate试验_03_18-19.清楚缓存对象clear_evict

实践1 清楚缓存对象-clear()方法
实验目的
在添加批量数据时,采用Clear方法在适当的时候清空缓存,以提高的系统的性能,防止内存被占用过多,导致内存溢出异常。

技术要点
●SQL基础知识;
●Hibernate基础知识。

实验步骤
1.打开项目HibernateProject05,在hibernate.cfg.xml中添加如下属性:
2.
3.修改StudentManager.java的主函数,代码如下:
4.运行StudentManager,查看执行结果
实践2 清楚缓存对象-evict()方法实验目的
采用evict()方法清除缓存中的某个具体的对象
技术要点
●SQL基础知识;
●Hibernate基础知识。

实验步骤
1.在StudentDAO中加入如下方法:
2.修改StudentManager.java的主函数,代码如下:
3.运行StudentManager,查看执行结果。

hibernate实验报告

hibernate实验报告
private Student student;
private String num;
Student.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.pojo.Student" table="student" catalog="user">
<id name="sid" type="ng.Integer">
private Set orders=new HashSet();
private Doublemoney;}
public class Order implements Serializable {
private Long id;
private String orderNumber;
private Double price;
private String detail;
private String street;
}
请把address作为person的表字段进行配置,该如何配置?
4、如下类,
public class Student {
private int id;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>();}
<column name="password" />
</property>
<property name="age" type="ng.Integer">

javaEE Hibernate 基础应用

javaEE Hibernate 基础应用

实验4Hibernate基础应用1 实验目的:1 通过实例开发,熟练掌握Hibernate的开发过程。

2 掌握Hibernate对数据表的映射及相关配置文件的配置。

2 实验内容:对学生表student表进行增、删、改、查操作。

熟练掌握Hibernate持久层对数据表的映射关系。

3 实验程序package org.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.vo.Student;import org.util.HibernateSessionFactory;public class Test {public Session session;public static void main(String[] args) {Test ht=new Test(); //创建类对象ht.getCurrentSession(); //获得session对象ht.saveUser(); //插入一条记录System.out.println("增加一条记录后结果======");ht.queryUser(); //查看数据库结果ht.updateUser(); //修改该条记录System.out.println("修改该条记录后结果======");ht.queryUser(); //查看数据库结果ht.deleteUser(); //删除该条记录System.out.println("删除该条记录后结果======");ht.queryUser(); //查看数据库结果ht.closeSession(); //关闭session }//获得session方法public void getCurrentSession(){//调用HibernateSessionFactory 的getSession 方法创建Session 对象session = HibernateSessionFactory.getSession();}//关闭session方法public void closeSession(){if(session!=null){HibernateSessionFactory.closeSession(); // 关闭Session }}//插入一条记录方法public void saveUser(){Transaction t1 = session.beginTransaction();// 创建事务对象Student user = new Student();user.setId(4);user.setSno("1205");user.setName("赵雪飞");user.setClass_("17341");user.setGrade(85);session.save(user);mit(); // 提交事务}//修改这条记录方法public void updateUser(){Transaction t2 = session.beginTransaction();//get方法的第二个参数是表中主键id的实际值Student user = (Student)session.get(Student.class,new Integer(2));user.setGrade(80);session.update(user);mit();}//查询数据库结果方法public void queryUser(){try{Query query = session.createQuery("from Student");List list=query.list();for(int i=0;i<list.size();i++){Student user = (Student)list.get(i);System.out.println(user.getId());System.out.println(user.getSno());System.out.println(user.getName());System.out.println(user.getClass_());System.out.println(user.getGrade());}}catch(Exception e){e.printStackTrace();}}//删除该条记录方法public void deleteUser(){Transaction t3 = session.beginTransaction();Student user = (Student)session.get(Student.class, new Integer(3));session.delete(user);mit();}}4 实验结果5 实验小结学了Struts框架,主要是用于图形界面的交互,今天学了Hibernate框架,主要是用于对数据库的操作,感觉功能很强大,两者如果结合,想必作用应该非常很轻大。

实验3 Hibernate使用基础

实验3 Hibernate使用基础

实验3Hibernate使用基础一、实验目的1.理解Hibernate的基本概念与作用2.掌握Hibernate体系结构、核心接口及其对象状态和对象特征3.熟悉利用MyEclipse2014进行Hibernate应用开发的基本步骤;4.了解Hibernate对象关系映射5.掌握事务管理的基本方法。

二、实验步骤1.建立数据库及表利用MySQLInstance建立MySQL数据库,数据库名为:hibernatedb,并在其中建立表,表名为:students。

SQL命令如下:CREATE DATABASE `hibernated ;CREATE TABLE `students` (`sid` int(11) NOT NULL,`sname` varchar(45) DEFAULT NULL,PRIMARY KEY (`sid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;2.在MyEclipse 2014中建立MySQL数据库连接驱动Hibernate2(1)启动MyEclipse 2014,选择Windows→OpenPerspective→MyEclipse DatabaseExplorer(2)在MyEclipse Database Explorer中,在左侧窗格中右击鼠标,在快捷菜单中选择New命令,如图6.10所示。

(3)在弹出编辑数据库连接驱动对话框中,编辑如下内容:DriveName:Hibernate2ConnectionURL:jdbc:mysql://localhost:3306/hibernatedbUser Name: rootPassword: 123456单击Add JARs添加Drive JARs:mysql-connector-java-5.1.13-bin(4)勾选SavePassword,单击TestDriver,测试成功后单击Finish。

hibernate 教程

hibernate 教程

Hibernate 教程什么是 HibernateHibernate 是一种 Java 持久化框架,它提供了一种简单的方法来存储、检索和操作 Java 对象与关系数据库之间的数据。

Hibernate 是基于 Java Persistence API (JPA)标准的实现,是一个开放源代码的框架。

Hibernate 的优势1. 简化数据库操作Hibernate 提供了一个简单的面向对象的 API,让开发人员可以直接使用 Java 对象进行数据库操作,而无需编写复杂的SQL 语句。

通过 Hibernate,开发人员可以更专注于业务逻辑的实现,而不必关心底层的数据库细节。

2. 跨数据库的透明性Hibernate 提供了一种数据库无关的开发方式,它支持多种不同类型的数据库,如 MySQL、Oracle、PostgreSQL 等。

开发人员可以通过简单的配置,无缝切换不同的数据库,而不必修改代码。

3. 提高性能Hibernate 提供了一些缓存机制,可以有效地提高数据库访问性能。

通过缓存,Hibernate 可以减少对数据库的频繁访问,提高系统的响应速度。

4. 支持延迟加载Hibernate 具有延迟加载机制,它可以在需要使用对象时才从数据库中加载数据。

这种机制可以减少不必要的数据库访问,提高应用程序的性能。

Hibernate 的基本概念1. 实体类在 Hibernate 中,实体类是指映射到数据库表的 Java 类。

实体类包含了与数据库表中的字段对应的属性,以及与数据库表中的记录对应的对象。

2. 映射文件映射文件是用来描述实体类与数据库表之间的映射关系的配置文件。

通过映射文件,Hibernate 可以知道如何将实体类的属性映射到数据库表的字段,以及如何将数据库表的记录转换为实体类的对象。

3. 会话工厂在使用 Hibernate 之前,需要先创建一个会话工厂。

会话工厂负责创建会话对象,会话对象用于与数据库进行交互。

实验五Hibernate的应用

实验五Hibernate的应用

实验五 Hibernate 的应用一. 目的要求1. 理解Hibernate实现ORM;2. 掌握 Hibernate.cfg.xml文件配置;3. 掌握 Hibernate主要接口4. 掌握常用HQL。

二.实验任务利用Hibernate 实现向图书馆管理系统中添加图书信息功能。

要求如下:book数据库中bookinfo表的表结构如表4-1所示。

三.实验环境、设备PC、Hibernate4.1.7和Eclipse四. 实验指导(一)背景知识简述Hibernate是一种ORM解决方案,需要创建Hibernate配置文件、POJO 类、ORM文件。

(二)实验步骤(1)创建数据库及表;(2)创建 Java 项目并加 hibernate的jar 包和MySQL数据库的驱动程序JAR包导入工程;(3)建立hibernate 配置文件:hibernate.cfg.xml;(4)建立图书信息持久化类:BookInfoVo;(5)建立图书信息持久化类对应的映射文件;(6)创建图书信息管理的测试类,实现图书的添加:AddBook.java;(7)执行Java程序,显示运行结果。

五.实验结果(1)源代码:<?xml version='1.0'encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="dialect">org.hibernate.dialect.OracleDialect</property><property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><property name="ername">lee</property><property name="connection.password">lee</property><property name="connection.driver_class">oracle.jdbc.OracleDriver</property><property name="show_sql">true</property><property name="hibernate.hbm2ddl.auto">update</property><mappingresource="com/shxt/lesson03/hibernate/models/bookInfoModel.hbm. xml"/</session-factory></hibernate-configuration><?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.shxt.lesson03.hibernate.models"> <!-- 每一个类class对应一个表table、table必须包含主键 --><class name="bookInfoModel"><id name="bookId"length="10"><generator class="sequence"><param name="sequence">book_seq</param></generator></id><!-- string 中的 s不能大写,如果使用大写:ng.String --><property name="bookName"type="string"length="20"></property><property name="author"type="string"length="20"></property><property name="bookIsbn"type="string"length="20"></property><property name="typeId"type="string"length="20"></property><property name="publisher"type="string"length="20"></property><property name="price"type="double"></property> </class></hibernate-mapping>package com.shxt.lesson03.hibernate.models;public class bookInfoModel {private int bookId;private String bookName;private String author;private String typeId;private String bookIsbn;private String publisher;private double price;public int getBookId() {return bookId;}public void setBookId(int bookId) {this.bookId = bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) { this.bookName = bookName;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getTypeId() {return typeId;}public void setTypeId(String typeId) {this.typeId = typeId;}public String getBookIsbn() {return bookIsbn;}public void setBookIsbn(String bookIsbn) { this.bookIsbn = bookIsbn;}public String getPublisher() {return publisher;}public void setPublisher(String publisher) { this.publisher = publisher;}public double getPrice() {return price;}public void setPrice(double d) {this.price = d;}}package com.shxt.lesson03.hibernate.util;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;public class HibernateSessionFactory {private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();private static Configuration configuration = new Configuration();private static org.hibernate.SessionFactory sessionFactory;private static String configFile = CONFIG_FILE_LOCATION;static {try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}private HibernateSessionFactory() {}public static Session getSession() throws HibernateException {Session session = (Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {rebuildSessionFactory();}session = (sessionFactory != null) ? sessionFactory.openSession(): null;threadLocal.set(session);}return session;}public static void rebuildSessionFactory() {try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get();threadLocal.set(null);if (session != null) {session.close();}}public static org.hibernate.SessionFactory getSessionFactory() {return sessionFactory;}public static void setConfigFile(String configFile) {HibernateSessionFactory.configFile = configFile;sessionFactory = null;}public static Configuration getConfiguration() {return configuration;}}package com.shxt.lesson03.hibernate.util;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {private static SessionFactory factory = null;public static SessionFactory getSessionFactory() {try {Configuration config = new Configuration();config.configure("/hibernate.cfg.xml");factory = config.buildSessionFactory();} catch (Exception e) {e.printStackTrace();}return factory;}}package com.shxt.lesson03.hibernate.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.shxt.lesson03.hibernate.models.bookInfoModel; import com.shxt.lesson03.hibernate.util.HibernateUtil;public class Test {public void testSave() {try {SessionFactory factory =HibernateUtil.getSessionFactory();Session session = factory.openSession();session.beginTransaction();bookInfoModel bim = new bookInfoModel();bim.setBookName("红楼梦");bim.setAuthor("曹雪芹");bim.setBookIsbn("1267896618496-4");bim.setPublisher("人民出版社");bim.setTypeId("3");bim.setPrice(46.5);session.save(bim);session.getTransaction().commit();session.close();} catch (Exception e) {e.printStackTrace();}}public void testList() {try {SessionFactory factory =HibernateUtil.getSessionFactory();Session session = factory.openSession();Query query = session.createQuery("from bookInfoModel");List<?> list = query.list();System.out.println("图书标号"+ " "+ "书名" + " "+ "作者"+" "+"图书编号"+" "+"出版社"+""+"图书类型"+" "+"价格");for (int i = 0; i < list.size(); i++) {bookInfoModel bim =(bookInfoModel)list.get(i);System.out.println(bim.getBookId() + " "+ bim.getBookName() + " " + bim.getAuthor()+""+bim.getBookIsbn()+" "+bim.getPublisher()+""+bim.getTypeId()+" "+bim.getPrice());}session.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {Test t = new Test();t.testList();}}(2)运行效果截图六.思考题1. 简述DAO模式的工作原理.DAO(Data Access Object)是一个数据访问接口,为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。

Hibernate实践

Hibernate实践

Hibernate实践一.序在实际项目中使用Hibernate有两年多了,在两年多的实践过程中既体验到了Hibernate带来的N多好处,同时也碰到不少的问题,特写此篇文章做个总结,记录自己在Hibernate实践中的一些经验,希望对于新使用Hibernate的朋友能有个帮助,避免走过多的弯路。

二.开发环境Hibernate开发环境的搭建非常的简单,不过为了提高基于Hibernate开发的效率,通常都需要使用一些辅助工具,如xdoclet、middlegen等。

尽管Hibernate已经封装提供了很简单的进行持久的方法,但在实际项目的使用中基本还是要提供一些通用的代码,以便在进行持久的相关操作的时候能够更加的方便。

2.1. lib2.1.1.Hibernate libHibernate相关的lib自然是开发环境中首要的问题,这部分可以从Hibernate的官方网站进行下载,在其官方网站中同时提供了对于Hibernate所必须依赖的lib以及其他可选lib的介绍。

2.2. xdocletHibernate作为ORM工具,从名字上就能看出它需要一个从O R的Mapping的描述,而这个描述就是在使用Hibernate时常见的hbm.xml,在没有工具支持的情况下,需要在编写持久层对象的同时手写这个文件,甚为不便。

在jdk 5.0未推出之前,xdoclet支持的在javadoc中编写注释生成相关配置文件的方式大受欢迎,减少了编写hibernate映射文件的复杂性,手写一个完整的hibernate映射文件出错几率比较的高,再加上手写容易造成编写出来的风格相差很大,因此,基于xdoclet来生成hbm.xml的方式被大量的采用,基于xdoclet来编写能够基于我们在持久层对象上编写的javadoc来生成hbm.xml文件,非常的方便。

2.2.1.Hibernate template如果没记错的话,大概在04年的时候javaeye上有位同仁整理了一个这样的template文件,^_^,非常感谢,我一直都在用着,呵呵。

Hibernate实验指导

Hibernate实验指导

Hibernate 实验指导1环境配置JDK 5.0Eclipse 3.3MyEclipse 6.1GA数据库MySQL 5.0数据库客户端MySQL-FrontMySQL JDBC驱动mysql-connector-java-3.1.13-bin.jar2第一个Hibernate示例构建一个Hibernate项目主要分为以下几个步骤:创建数据库创建支持Hibernate的Java project构建Hibernate基础代码日志器配置编写测试类2.1 创建数据库创建名为“hibernate_db”的数据库,以及库表t_user,t_user表中包含以下字段:●自增主键“id”●用户名字段“name”●生日字段“birthday”●Email字段“email”●性别字段“sex”构建脚本如下:在MySQL-Front中刷新后可以看到创建的数据库和库表:2.2 创建支持Hibernate的Java project打开Eclipse,创建Java project:将MySQL JDBC驱动copy到lib目录下,然后将其纳入项目的构建路径(build path):选中HibernateSample project,增加Hibernate支持:Next,保留默认值:Next:Next,取消“Create SessionFactory class”选项:在hibernate.cfg.xml的编辑界面中增加hibernate属性配置:查看hibernate配置文件的源码(调整顺序并增加注释):2.3 构建Hibernate基础代码Hibernate基础代码包括POJO(Plain Old Java Object)类,也称为实体类和Hibernate映射文件。

与t_user表对应的实体类为User:User类体现的是ORM中的O(Object),即对“用户”实体对象的封装,包含了用户的两个属性。

t_user是关系型(Ralational)数据库表,Hibernate使用映射文件将实体对象(Object)和关系型数据(Ralational)相关联,在Hibernate 中,映射文件通常以“.hbm.xml”作为后缀。

Hibernate入门应用的实践教程

Hibernate入门应用的实践教程

第2章Hibernate入门Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。

Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。

在Java应用中使用Hibernate包含以下步骤。

(1)创建Hibernate的配置文件。

(2)创建持久化类。

(3)创建对象-关系映射文件。

(4)通过Hibernate API编写访问数据库的代码。

本章通过一个简单的例子helloapp应用,演示如何运用Hibernate来访问关系数据库。

helloapp应用的功能非常简单:通过Hibernate保存、更新、删除、加载及查询Customer 对象。

图2-1显示了Hibernate在helloapp应用中所处的位置。

Array图2-1 Hibernate在helloapp应用中所处的位置helloapp应用既能作为独立的Java程序运行,还能作为Java Web应用运行,该应用的源代码位于配套光盘的sourcecode/chapter2/helloapp目录下。

精通Hibernate:Java对象持久化技术详解462.1 创建Hibernate的配置文件Hibernate从其配置文件中读取和数据库连接有关的信息,这个配置文件应该位于应用的classpath中。

Hibernate的配置文件有两种形式:一种是XML格式的文件;还有一种是Java属性文件,采用“健=值”的形式。

下面介绍如何以Java属性文件的格式来创建Hibernate的配置文件。

这种配置文件的默认文件名为hibernate.properties,例程2-1为示范代码。

例程2-1 hibernate.propertieshibernate.dialect=net.sf.hibernate.dialect.MySQLDialecthibernate.connection.driver_class=com.mysql.jdbc.Driverhibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDBername=roothibernate.connection.password=1234hibernate.show_sql=true以上hibernate.properties文件包含了一系列属性及其属性值,Hibernate将根据这些属性来连接数据库,本例为连接MySQL数据库的配置代码。

Hibernate使用实例步骤

Hibernate使用实例步骤

Hibernate使用实例步骤用MyEclipse, 就有必要把MyEclipse 快速开发的功能熟悉一下. 当我们熟悉了基本的开发过程之后, 就需要考虑用顺手的 IDE 来让我们的开发速度有个飞跃了.这次讨论的主题包括: Hibernate 快速开发, Spring 快速开发, Struts 登录应用开发, UML 建模, 可视化Swing界面开发这些个内容.首先就是大家可以看 MyEclipse 的帮助文档进行学习了, 里面很全, 图文并茂, 唯一缺点呢就是文档是英文的. 具体方法:菜单 Help -> Help Contents, 然后会在浏览器里打开 MyEclipse 帮助文档, 展开左边的 MyEclipse Learning Center, 就能看到详细的开发教程了. 其中 "JEE Application Development" 的部分是我们重点关注的内容.使用的开发工具是 MyEclipse 5.5.1 GA, Windows/Linux 版本均可.好了, 现在简单介绍一下用 MyEclipse 2 分钟开发一个 Hibernate 应用的步骤.1. 在 MyEclipse 视图下的 Servers 面板上, 启动 MyEclipse Derby 这个服务器. 相信大家都很熟悉这个过程了.2. 选择菜单Window -> Open Persipective -> MyEclipse Database Explorer, 打开新的数据库浏览视图.3. 在最左边的 DB Browser 面板下选中 MyEclipse Derby 项, 点击右键并选择弹出菜单中的菜单项Open Connection 来打开数据库连接并显示所有的数据库和表格.4. 展开 MyEclipse Derby 节点, 单击选中第一项 Connected to MyEclipse Derby, 点击右键并选择弹出菜单中的菜单项New SQL Editor.5. 在 SQL 编辑器里键入下列建表语句:create table testUser(id int not null,username varchar(200),age int,primary key ("ID")), 然后点击编辑器上面的绿色的运行向右箭头按钮来创建表格.6. 新建一个 Java Project 名字为 MyHibernateTest, 这个过程无需赘述了, 建议建项目的时候将 src 目录和 bin(或者classes)目录分开, 另外提示你切换透视图的时候一定要切换过去到Java 透视图, 此时默认会在 Package Explorer 中选中刚才已经建好的 Java Project, 但是背景为灰色.7. 首先单击一下左边的Package Explorer 中新建的MyHibernateTest 项目来使其高亮选中, 接着点击菜单项 MyEclipse -> Add Hibernate Capabilities..., 接着会弹出对话框New Hibernate Project 提示你设置当前项目的 Hibernate 属性.对话框的第一页选择 Hibernate 3.1, 其它保持默认;第二页同样如此, 保持默认来创建新的 Hibernate 配置文件;第三页Specify Hibernate database connection details则点击DB Driver 下拉框选择 MyEclipse Derby, 这时候下面的输入框会自动填好数据库连接对应的值.第四页Define SessionFactory properties 则先点击Java Package 一行最右侧的 New... 按钮来新建一个名字为 dao 的包. 这时候你可以看到Finish 按钮终于不为灰色了, 点击它完成给项目加入Hibernate 开发功能的操作, 包括Hibernate 类库, jdbc 驱动和Hibernate 配置文件都已经设置完毕了.8. 选择菜单Window -> Open Persipective -> MyEclipse Database Explorer, 打开数据库浏览视图. 展开Connected to MyEclipse Derby 下面的 APP 节点, 再选中下面的 TABLE 目录, 点击右键并选择弹出菜单中的菜单项 Refresh 来刷新数据库表格列表, 这时候展开此节点可以看到下面出现了一个名为 TESTUSER 的表.9. OK, 最关键的操作即将开始了. 请在TESTUSER 节点上点击右键并选择弹出菜单中的菜单项 Hibernate Reverse Engineering..., 弹出一个对话框提示你 Save All Modified Resources, 点击 OK 并且选中MyHibernateT est, 在File name 右侧的文件名输入框中输入create.sql 来保存我们最开始所写的那个建表的 SQL 文件.10. 接着 Hibernate Reverse Engineering 对话框弹出了.点击 Java src folder 一行最右侧的 Browser.. 按钮来选择源码目录, 并把下面的 Java package 右侧的输入框中输入包名 dao, 我们选择/MyHibernateT est/src 目录并点击完成, 接着选中下面的三个复选框:[x] Hibernate mapping file (*.hbm.xml) for each database table[x] Java Data Object (POJO <> DB Table)[x] Java Data Access Object (DAO) (Hibernate 3 only)好了, 点击 Finish 按钮, 就可以看到反向工程的忙碌对话框. 最后当一切结束后弹出对话框提示切换视图到MyEclipse Hibernate perspective 的时候点击 "OK" 按钮, 您就可以看到工作成果了, 包括下列文件:HibernateSessionFactory.javaTestuser.hbm.xmlBaseHibernateDAO.javaIBaseHibernateDAO.javaTestuser.javaTestuserDAO.javahibernate.cfg.xml. 那么, 我们的 POJO 已经生成了, 就是 T estuser.java, DAO 的代码也已经生成, 就是 TestuserDAO, 这些代码都已经帮我们写好, 当然我们可以做进一步的修改来适应我们的要求. 当你用工具生成代码的时候, 请确保您已经了解了 Hibernate 手工开发的步骤. 好了, 接下来的事情, 我们就可以11. 修改 Testuser.hbm.xml 里面的主键生成方式为合适的方式(默认的是 <generator class="assigned" />), 或者一些属性映射关系, 这些仍然要求开发人员对 Hibernate 的配置文件有一定的了解;或者12. 继续重复 1, 3, 5, 8, 9, 10 来生成更多的 POJO 或者 DAO.13. 编写测试代码来运行测试.小结: 虽然这些步骤很繁琐, 但是当你熟练之后完全可以在2分钟内完成所有操作, 这样就省去了手工编写大量 Java 代码和 XML 配置文件的痛苦, 这也是实际中程序员采取的偷懒的步骤.前提: 您一定要理解 Hibernate 手工开发的步骤和 JDBC 驱动的概念, 否则生成的文件有时候是有潜在的问题的, 工具只能帮你完成部分工作, 不能完成全部工作.更多提示: 当你执行第9 步的时候, 还可以看到弹出的菜单中有JPA 和 EJB 3 反向工程的选项, 这个就留给大家做练习了, 同样也能生成类似的JPA 或者EJB 3 实体类, 当然您实现要建好支持JPA 或者EJB 的项目.。

05-Hibernate实战讲解

05-Hibernate实战讲解

5 HQL查询语法
SQL原生查询(Native SQL) 有时候HQL可能不能满足我们的要求。我们需要使用原始的SQL来完成我们的功 能。我们可以通过如下方式,在hibernate中使用SQL查询
自动增长字段类型与序列
数据库 MySQL Oracle DB2 MS SQL Server Sybase HypersonicSQL PostgreSQL SAP DB HSQLDB Infomix
Hibernate优势
开源(LGPL) 成熟 流行(约13 000 downloads/month) 自定义API JBoss 将用Hibernate3实现Entity Beans
2-1什么是O/R Mapping
对象-关系映射是一门非常实用的工程技术, 它实现了Java应用中的对象到关系数据库中的表的自 动的(和透明的)持久化,使用元数据(meta data) 描述对象与数据库间的映射。
@Formula("(select count(*) from _user u where u.id>id)")
用一个查询语句动 private int countUser;
态的生成一个类的
属性. 表示这个属 要点: 性是一个虚拟的列,1. Sql语句必须位于括号中 表中并没有这个列。2. 这里最好写完全的sql语句。表名最好使用别名 需要通过查询语句 3. 如果要引用当前对象的属性值,可以直接使用属性,如:
5 HQL查询语法
Join(内连接、外连接)
SQL中我们有内连接、右外连接、左外连接、全外连接,在HQL中我们也 有这些概念。不过,有如下几点不一致: 1、如果两个实体类之间没有任何关系,那么不能使用join 2、由于只有两个实体类之间有关联关系才能使用join,因此不需要像SQL那样通过 on指明连接条件。

=实验五 Hibernate 的应用(二)

=实验五    Hibernate 的应用(二)

实验五 Hibernate 的应用五.实验结果(1)源代码:Domain包中的BookInfoVo.javapackage domain;public class BookInfoVo {private int id;private String bookISBN;private String bookName;private String author;private float price;private int typeId;private String publisher;private BookTypeVo bookType;public int getId(){return id;}public void setId(int id){this.id=id;}public String getBookISBN(){return bookISBN;}public void setBookISBN(String bookISBN){this.bookISBN=bookISBN;}public String getBookName(){return bookName;}public void setBookName(String bookName){this.bookName=bookName;}public float getPrice(){return price;}public void setPrice(float price){this.price=price;}public int getTypeId(){return typeId;}public void setTypeId(int typeId){this.typeId=typeId;}public String getPublisher(){return publisher;}public void setPublisher(String publisher){ this.publisher=publisher;}public String getAuthor(){return author;}public void setAuthor(String author){this.author=author;}public BookTypeVo getBookType() {return bookType;}public void setBookType(BookTypeVo bookType) { this.bookType = bookType;}}BookTypeVo.javapackage domain;import java.util.HashSet;import java.util.Set;public class BookTypeVo {private int id;private String typeName;private Set<BookInfoVo> bookInfo=new HashSet<BookInfoVo>();public int getId(){return id;}public void setId(int id){this.id=id;}public String getTypeName(){return typeName;}public void setTypeName(String typeName){this.typeName=typeName;}public Set<BookInfoVo> getBookInfo() {return bookInfo;}public void setBookInfo(Set<BookInfoVo> bookInfo) {this.bookInfo = bookInfo;}}BookInfoVo.hbm.xml<?xml version='1.0'encoding='UTF-8'?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="domain.BookInfoVo"table="bookinfo"><id name="id"type="ng.Integer"><column name="id"/></id><property name="typeId"type="ng.Integer"><columnname="typeId"/></property><property name="bookISBN"type="ng.String"><column name="bookISBN" length="17"/></property><property name="bookName"type="ng.String"><column name="bookName" length="100"/></property><property name="author"type="ng.String"><column name="author" length="100"/></property><property name="price"type="ng.Float"><columnname="price"/></property><property name="publisher"type="ng.String"><columnname="publisher"length="100"/></property><many-to-one name="bookType"column="typeId"class="domain.BookTypeVo" insert="false"update="false"></many-to-one></class></hibernate-mapping>BookTypeVo.hbm.xml<hibernate-mapping><class name="domain.BookTypeVo"table="booktype"><id name="id"type="ng.Integer"><column name="id"/></id><property name="typeName"type="ng.String"><columnname="typeName"length="60"/></property><set name="bookInfo"cascade="all-delete-orphan"inverse="false"lazy="false"><key column="typeId"></key><one-to-many class="domain.BookInfoVo"/></set></class></hibernate-mapping>Action包中的SelectBookpackage action;import java.util.List;import java.util.Set;import java.util.Iterator;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import domain.BookInfoVo;import domain.BookTypeVo;public class SelectBook {public static SessionFactory sessionFactory;static{try{Configuration configure=new Configuration().configure();configure.addClass(BookInfoVo.class);configure.addClass(BookTypeVo.class);sessionFactory=configure.configure().buildSessionFactory();}catch(Exception e){e.printStackTrace();}}public void getAllProduct(){try{Session session=sessionFactory.openSession();Transaction tx=session.beginTransaction();tx.begin();Query query=session.createQuery("from BookTypeVo as a order by a.id");List<?> list=query.list();System.out.println("图书的ISBN号 \t图书类型\t\t书名\t \t\t作者姓名\t\t价格\t\t出版社");System.out.println("************************************************** ******************************************");for(int i=0;i<list.size();i++){BookTypeVo sort=(BookTypeVo)list.get(i);Set<BookInfoVo>BookInfo=sort.getBookInfo();Iterator<BookInfoVo>it=BookInfo.iterator();while(it.hasNext()){BookInfoVo book=(BookInfoVo)it.next();System.out.print(book.getBookISBN()+" \t\t ");System.out.print(sort.getTypeName()+" \t\t ");System.out.print(book.getBookName()+" \t\t ");System.out.print(book.getAuthor()+"\t\t");System.out.print(book.getPrice()+" \t\t ");System.out.print(book.getPublisher());System.out.println();}}catch(Exception e){e.printStackTrace();System.err.println(e);}}public static void main(String[] args) {SelectBook sp=new SelectBook();sp.getAllProduct();}}Hibernate.cfg.xml文件盒hibernate.properties文件配置与试验四一样(2)运行效果截图MySQL数据库中的相关表格:book.bookinfobook.booktype。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五入门Hibernate实验姓名:宋x 班级:计科16xx 学号:1609xxxxx 一、实验目标
掌握在Hibernate中插入、更新、删除对象的基本方法。

二、实验要求
熟练掌握Session的get()方法和delete()方法,实现对象查询和删除。

三、实验内容
对部门表department(int depId,varchar depName,varchar depFlag)进行添加、查询、删除操作。

四、实验步骤
(1)创建MySQL数据库test和班级表部门表department(int depId,varchar depName,varchar depFlag),如图1所示。

图1 创建department表
(2)在MyEclipse中创建与数据库test的连接,如图2所示。

图2 选择MySQL
(3)创建一个Java项目工程chap51,如图3所示。

图3 项目结构
(4)为工程添加Hibernate支持。

a、右击要添加的项目——MyEclipse——Add Hibernate Capabilities…如图4
所示。

图4 添加关系
b、第1、2步依次点击下一步就可了,第3步选择添加过的数据库MySQL,完成,如图5所示。

图5 添加数据库连接
(5)在DB Browser中打开与test的连接,利用MyEclipse提供的反向工程生成department表的POJO类和映射文件。

右击department表——Hibernate Reverse Engineering…——完成,如图6所示。

图6 创建映射文件
(6)在Java项目中创建一个测试类HibTest1.java,在类中根据表中的一个ID查询一个班级的信息,并显示在控制台上,然后删除此记录,如图7所示。

最后的项目结构,如图8所示。

图7 输出结果
图8 最终项目结构
五、实验结果
在这一次实验中,要注意从用户界面放数据到数据库中和从数据库中拿数据到用户界面显示的时候,要注意编码问题,不然中文会出现乱码,hibernate.cfg.xml 中添加这一句语句:
<![CDATA[jdbc:mysql://localhost:3306/MySQL?useUnicode=true&characterEncoding
=utf8]]> 把原来的:jdbc:mysql://localhost/MySQL 替换掉就可以解决编码问题了。

- 11 -。

相关文档
最新文档