Hibernate开发实例

Hibernate开发实例

1. 创建HibernateDemo项目(也可以是其他名称)

(1)在Eclipse中,单击Eclipse菜单中的【File】选择【New】选项,选择创建【DynamicWebProject】(动态Web项目);

(2)Project name我们填写为HibernateDemo(也可以是其他名称);

(3)单击【Finish】,我们的项目便创建完成了。

2. 在Eclipse中部署Hibernate开发包和MySQL驱动包

在这里我们做的是简单项目,所以需要的开发包有限,主要用的是必须开发包。

(1)解压我们在上面“下载Hibernate开发包”步骤中下载好的hibernate-release-5.0.9.Final.zip,可以看到“lib”文件夹,进入其中,看到一个名为“required”的文件夹;

(2)我们拷贝“required”文件夹中所有jar包到我们在Eclipse中创建的项目StrutsDemo的“WebContent”目录下的“WEB-INF”目录下的“lib”文件夹中;

(3)在Eclipse中,选中HibernateDemo项目右键,选中【BuildPath】,将【Order and Export】选项中的所有jar包选中,然后单击按钮【Apply】,在单击按钮【OK】;

(6)通过以上步骤,我们算是把简单Hibernate所需开发包添加完了,下面就剩对代码的编写了。

注释:添加MySQL驱动包可以参考博文:在项目中安装部署MySQL驱动

3. 在数据库中创建数据表

在这里我们简单的实现一个用户登录的功能,因此创建一个简单的数据库User,包含了一个表格userInfo,userInfo表的结构如下:


字段名


字段含义


数据类型


是否为主键


userID


用户标识


Int



userName


用户姓名


Varchar(20



userPwd


用户密码


Varchar(20)



userType


用户类型


Varchar(10)


在MySQL中创建创建数据库User,并创建userInfo表的SQL语句如下:

create database  User;

use User;

CREATE TABLE `userInfo` (

`userID` int(11) NOT NULL,

`userName` varchar(20) ,

`userPwd` varchar(20) ,

`userType` varchar(10) ,

PRIMARY KEY (`userID`)

);

4.  创建持久化类

持久化类指定是类的对象能够被持久化(保存)到数据库中。在Hibernate中使用POJOs(普通的java对象(Plain Old Java Objects))的编程方法来进行持久化操作。在POJO类中包含了与数据库表中相对应的各个属性,并设置了getter和setter方法以便向外部隐藏内部的细节。

下面我们创建对应数据库表userInfo的持久化类User:

package edu.test.entity;

import java.io.Serializable;

public
class
User implements Serializable{

private
int
id;
//用户标识

private Stringname;//用户名

private Stringpassword;//用户密码

private Stringtype;//用户类型

//默认构造方法

public User(){

}

public
int 
getId() {

returnid;

}

public
void 
setId(int id) {

this.id =id;

}

public String getName() {

returnname;

}

public
void 
setName(String name){

this.name =name;

}

public String getPassword() {

returnpassword;

}

public
void 
setPassword(String password){

this.password =password;

}

public String getType() {

returntype;

}

public
void 
setType(String type){

this.type =type;

}

}

注意:持久化类必须遵循以下规则:

1.     所有的持久化类必须有一个默认的构造方法。(这是为了使Hibernate可以使用Java的反射机制,调用java.lang.reflect.Constructor.newInstance()方法来实例化持久化类。)

2.     持久化类应该提供一个标识属性,用于映射到底层数据库表中主键列,如:这里的id属性。

3.     必须为持久化类的各个属性声明getters方法和setters方法。

4.     建议不要将持久化类声明为final。因为Hibernate的延迟加载要求定义的持久化类是非final的、或者是该持久化类实现了某个接口。(如果确实需要将一个持久化类声明为final,且该类未实现某个接口,则必须禁止生产代理,即不采用延迟加载)

5.  设计映射文件

为了完成对象到关系数据库的映射,Hibernate需要知道持久化类的实例是如何存储和加载的,我们使用XML文件类设置它们之间的映射关系。

在这里我们创建一个名为User.hbm.xml的映射文件,在该文件中我们定义了持久化类User的属性如何映射到userInfo表的列上。

1.   在Eclipse中,选中HibernateDemo项目中的【src】目录中User.java类的包目录(这里是edu.test.entity)右键,选中【New】,将【other】选项,在弹出框中的【Wizards】输入框中输入Hibernate,然后在结果中选择【Hibernate XML Mapping file(hbm.xml)】,在单击按钮【Next】;

2.   进入如下的新建配置文件对话框,我们单击【AddClass】,

3.   弹出如下图所示的界面

4.   选中刚才添加的类,单击【Next】;

5.   可以看到类以及与类对应的映射文件

6.   可以看到可以开始创建User.hbm.xml文件了,单击【Finish】按钮,文件创建完成;

7.   编写后,User.hbm.xml的代码如下:

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping

SYSTEM

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mappingpackage="edu.test.entity">

<!--name指定持久化类的类名,table指定数据表的表名 -->

<class   name="User"   table="userInfo">

<!-- 将User类中的id属性映射为数据表中的主键userID
-->

<idname="id"  type="java.lang.Integer" 
 column="userID">

<generatorclass="increment"/>

</id>

<!-- 映射User类中name属性为数据表userInfo中的userName列
-->

<propertyname="name"   type="java.lang.String" 
 column="userName"   length="20"/>

<!-- 映射User类中password属性为数据表userInfo中的userPwd列
-->

<propertyname="password"  type="java.lang.String"
  
column="userPwd"   length="20"/>

<!-- 映射User类中type属性为数据表userInfo中的userType列
-->

<propertyname="type"  type="java.lang.String" 
 column="userType"   
length="10"/>

</class>

</hibernate-mapping>

或者如下:

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2016-7-13 0:12:08 by Hibernate Tools 3.4.0.CR1-->

<hibernate-mapping>

<classname="edu.test.entity.User"  table="userInfo">

<idname="id"  type="int">

<columnname="userID"/>

<generatorclass="assigned"/>

</id>

<propertyname="name"  type="java.lang.String">

<columnname="userName"/>

</property>

<propertyname="password"   type="java.lang.String">

<columnname="userPwd"/>

</property>

<propertyname="type"   type="java.lang.String">

<columnname="userType"/>

</property>

</class>

</hibernate-mapping>

注意:上面创建的User.hbm.xml文件同User.java 文件放在同一个包edu.test.entity中

6. 创建配置文件Hibernate.cfg.xml

Hibernate为了能够适应各种不同的工作环境,它需要使用配置文件,我们可以通过它提供的大量的配置参数,来进行配置。这些参数大都有直观的默认值,在使用时所要做的仅仅是根据使用环境来修改配置文件中的相关的参数值。

Hibernate的配置文件主要是用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。

Hibernate的配置文件的格式有两种:一种是properties属性文件格式的配置文件,使用键值对的形式存放信息,默认文件为hibernate.properties;还有一种是XML格式的配置文件,默认名称是hibernate.cfg.xml。(两个文件的配置是等价的,若两个文静同时存在,则hibernate.cfg.xml文件会覆盖hibernate.properties文件)

大多数情况下,我们都选择配置hibernate.cfg.xml文件(易于修改),下面我们就讲解一下hibernate.cfg.xml文件的配置。

1.   在Eclipse中,选中HibernateDemo项目中的【src】目录右键,选中【New】,将【other】选项,在弹出框中的【Wizards】输入框中输入Hibernate,然后在结果中选择【Hibernate Configuration File(cfg.xml)】,在单击按钮【Next】;

2.   进入如下的新建配置文件对话框,我们输入相关相关信息(如:文件名为hibernate.cfg.xml),单击【Next】;

3.   进入如下图的对话框,在这里我们可以进行Hibernate配置文件相关属性的配置;

4.   单击【Finish】按钮,弹出如下图的界面,表示Hibernate配置文件创建完成;

5.   编写后,hibernate.cfg.xml文件的代码如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEhibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"htt//hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- 数据库连接配置 -->

<!-- 配置数据库JDBC驱动 -->

<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- 配置数据库连接URL -->

<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/user</property>

<!-- 配置数据库用户名 -->

<propertyname="hibernate.connection.username">root</property>

<!-- 配置数据库用户密码 -->

<propertyname="hibernate.connection.password">123456</property>

<!-- 配置JDBC内置连接池的个数 -->

<propertyname="hibernate.connection.pool_size">1</property>

<!-- 配置数据库方言 -->

<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 输出运行时生成的SQL语句 -->

<propertyname="hibernate.show_sql">true</property>

<!-- 列出所有的映射文件 -->

<mappingresource="edu/test/entity/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

下面我们对hibernate.cfg.xml文件中的相关属性进行简单讲解:

1.   Hibernate JDBC属性(可以参考博文:)

Hibernate JDBC的相关属性:


属性名称


属性说明


hibernate.connection.driver_class


JDBC驱动类


hibernate.connection.url


JDBC URL


hibernate.connection.username


数据库用户名


hibernate.connection.password


数据库用户密码


hibernate.connection.pool_size


最大的池连接数

注释:关于常用的三种数据库的驱动和连接URL可以参考博文:JDBC连接数据库详细指南(包含MySQL、SQLServer、Oracle三种数据库)

2.   hibernate.dialect属性

该属性用于定义建立数据库连接是所使用的方言,该属性是为了使Hibernate能够针对特定的关系数据库生成适合的SQL语句。大部分情况下,Hibernate可以根据JDBC驱动返回的JDBC metadata来选择正确的org.hibernate.dialect.Dialect方言。

例如:

MySQL数据库中

<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

Oracle数据库中:

<propertyname="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>

SQLServer数据库中:

<propertyname="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

3.   hibernate.show_sql属性

该属性可以将SQL语句输出到控制台,它的作用是为了方便调试,我们可以在控制台看到Hibernate执行的SQL语句。

4.   映射文件列表

为了将对象的映射信息加入到Hibernate的配置文件中,加入的方法就是在hibernate.cfg.xml配置文件中加入类似以下语句:

<mappingresource="edu/test/entity/User.hbm.xml"/>

其中,resource属性指定了映射文件的位置和名称,如果有多个映射文件,则需要使用多个mapping元素进行分别指定每个映射文件的位置和名称。

注释:在配置文件中指定了项目中所有的映射文件后,每次启动Hibernate时就可以自动装载映射文件,而无须手动处理。

7.  编写测试类

新建一个类HibernateTest,相关信息如下:

编写代码如下:

package edu.test.test;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import edu.test.entity.User;

public
class
HibernateTest {

public
staticint
id=1;

public
staticvoid
main(String[]
args){

Configuration cfg=new Configuration().configure();

SessionFactory sf=cfg.buildSessionFactory();

Session session=sf.openSession();

Transaction ts=session.beginTransaction();

User user=new User( );

user.setId(id);

user.setName("test"+id);

user.setPassword("123456");

user.setType("学生");

session.save(user);

ts.commit( );

Query query=session.createQuery("from User");

List list=query.list();

User user2=(User)list.get(0);

System.out.println("用户标识:"+user2.getId());

System.out.println("用户名:"+user2.getName());

System.out.println("用户密码:"+user2.getPassword());

System.out.println("用户类型:"+user2.getType());

session.close( );

id++;

}

}

测试结果为:

用户标识:1

用户名:test1

用户密码:123456

用户类型:学生

从上面可以看出我们使用Hibernate进行持久化操作已经成功啦!

时间: 2024-10-08 15:28:03

Hibernate开发实例的相关文章

持久化框架Hibernate 开发实例(二)

1 简述 通过使用Hibernate框架,开发者可以使用面向对象的方式来进行数据库访问,从而取代 以前使用JDBC进行数据库访问的方式.通过使用Hibernate框架,web应用可以通过面向 对象的方式来进行数据库的各种访问操作,如插入,更新,删除,查询数据等. 1.1 创建Hibernate配置文件 hibernate从其配置文件中读取和数据库有关的信息.hibernate的配置文件分为两种形式, 一种是XML格式的配置文件,还有一种是资源文件格式的配置文件.分为XML文件或propertie

Spring2.5整合Ibatis入门级开发实例

分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看spring和ibatis的东西,由于目前SSH的流行,大多讲Spring和Hibernate的整合开发,作者一直对Hibernate不是很感冒,也许是因为日常开发程序对性能要求比较高,和Hibernate比较起来Ibatis更合适.虽然网络上有很多讲Spring和Ibatis整合的文章,但查看了许多,

Struts2、Spring和Hibernate应用实例(上)

Struts2.Spring和Hibernate应用实例 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用.功能齐全的标志库(Tag Library).开放源代码.而Spring的出现,在某些方面极大的方面了Struts的开发.同时,Hibernate作为对象持久化的框架,能显示的提高软件开发的效率与生产力.这三种流行框架的整合应用,可以发挥它们各自的优势,使软件开发更加的快速与便

SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程

刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样的搭建平台也需要有经验才可以,并不是说你会搭建一个开发平台然后公司就会用你搭建的开发平台,一个项目或者一个公司看中的也不是你可以搭出框架,而是在这个框架使用过程中出现的各种问题你可以解决掉. 也就是说呢,无论开发什么项目要做到稳定.环境稳定.开发成本稳定.技术稳定.换句话说就是"风险可控"

Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐) 于浩洋 著   ISBN 978-7-121-23998-4 2014年9月出版 定价:59.00元 356页 16开 编辑推荐 以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法 以热门游戏2048.卡牌为例,完整再现手游的开发过程 Cocos2d-x作者之一林

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

《HTML 5网页开发实例详解》目录

第一篇  从宏观上认识HTML 5 讲述了HTML 5引发的Web革命.HTML 5的整体特性.HTML 5相关概念和框架和开发环境搭建. 第1章 HTML 5引发的Web革命 1.1  你是不是真的了解HTML 5 1.1.1  通过W3C认识HTML 5的发展史 1.1.2  HTML 5.HTML4.XHTML的区别 1.1.3  什么人应该学HTML 5 1.1.4  一个图告诉你如何学习HTML 5 1.2  浏览器之争 1.2.1  说说这些常见的浏览器 1.2.2  浏览器的兼容烦

JDBC - 开发实例 - MVC模式

JDBC - 开发实例 - MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server</param-name> //主机名 <param-value>localhost</param-value> </context-param> <context-param> <param-name>db</param-name&