Hibernate入门2.简单的项目开发实例

这一节通过一个简单的项目学习Hibernate项目的配置

代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p348

1.配置Hibernate环境

下载Hibernate的jar,将必须的Hibernate核心类库加入到应用中。这些jar中hibernate3.jar是必需的核心类库文件,此外在lib中的是在hibernate中引用的包,可以有选择的添加。

创建Hibernate配置文件:配置文件主要用于配置和数据库相关的一些共有参数,比如数据库的URL、用户名、密码、是否创建或者更新表的信息,这些信息对于所有持久化类都是通用的。配置文件可以是hibernate.properties或者是hibernate.cfg.xml.两种方式任选其一或者是结合使用。实际开发的过程中,通常是使用XML文件配置的形式,并且将hibernate.cfg.xml配置文件放在类文件的根目录中。

我们查看XML方式配置的Hibernate文件

hibernate.cfg.xml

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

<hibernate-configuration>

<session-factory>

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

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

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test??useUnicode=true&amp;characterEncoding=utf8</property>

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

<property name="hibernate.connection.password">221256</property>

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

<!-- 注册所有的ORM映射文件 -->

        <mapping resource="com/yang/model/mapper/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

上述配置信息中<hibernate-configuration>元素是hibernate配置文件的根元素,在这个根元素中有<session-factory>子元素,该子元素一次有多个<property>元素,这些事配置hibernate连接数据库的必要信息。在<session-factory>中可以有多个<maping>元素,每一个<mapper>指定一个ORM映射文件。

使用Eclipse开发Hibernate应用的时候,可以借助一些插件工具来生成部分嗲吗,如根据表生成POJO,或者是根据POJO生成配置文件、表。这些工具完成的功能仅仅是提高开发者的效率,而不能真正替代开发者去思考。学习框架的时候不推荐使用。

2.创建持久化类和ORM映射文件

持久化类和JavaBean差不多,不过如果有其他的非默认的构造函数的话,需要声明一个默认的构造函数,同时对于每一个属性添加getter和setter方法,建议将持久化类和器对应的ORM映射文件放在同一个目录。

对于映射文件,命名规范是ModelName.hbm.xml

User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!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.yang.model.User" table="user">

<id name="id" column="id">

<generator class="native"/>

</id>

<property name="userName" column="username" type="string" not-null="true"/>

<property name="password" column="password" type="string" not-null="true"/>

</class>

</hibernate-mapping>

3.利用Configuration装载配置信息

每一个配置文件对应一个Configuration对象,代表一个应用程序导数据库的映射配置。根据Hibernate使用的配置文件的不同,创建Configuration对象的方式也是不同的。通常采用hibernat.cfg.xml作为hibernate的配置文件,然后根据配置文件出那个减Configuration对象:

//实例化Configuration

Configuration configuration = new Configuration();

//加载hibernate配置信息configuration.configure(ClassLoader.getSystemResource("hibernate.cfg.xml"));

Configuration对象的作用是读取配置文件并且创建SessionFactory对象。通常一个应用程序会创建一个Configuration,在创建唯一的SessionFactory实例。这就意味着Configuration对象只存在于系统的初始化阶段,然后所有的持久化操作都是通过SessionFactory实例来完成的。

4.利用SessionFactory创建Session

SessionFactory对象时Hibernate进行持久化的必须对象,该对象是整个数据库映射关系经过编译之后形成的内存镜像。Configuration对象提供一个buildSessionFactory,创建一个Sessionfactory实例,并且SessionFactory的实例是不可以改变的。

//创建Sessionfactory实例

SessionFactory sessionFactory = configuration.buildSessionFactory();

//Configuration对象会根据配置文件的内容创建SessionFactory实例,一旦构建完毕,他将包含配置信息,之后任何对于configuration实例的改变都不会影响到已经构建的sessionFactory实例。SessionFactory实例的作用是生成Session对象,调用Sessionfactory对象中的getCurrentSession()或是openSession()都会回的一个Session对象。

Session session= sessionFactory.openSession();

5.利用Session操作数据库

Session对象时Hibernate持久化操作的关键对象,是Hibernate持久化操作的基础,是应用程序和数据库之间交互的一个单线程对象。持久化对象的生命周期、事务管理、对象的查询、更新和删除都是通过Session实现的。Session对象封装了JDBC连接,本身就有一个一级的缓存,在显示执行flush方法之前,所有的持久化操作数据都是保存在Session对象的缓冲中。

Session中的接口方法:

save() 保存持久化对象,在数据库中增加一条记录

get() 获取数据库中的一条记录,如果没有找到符合条件的持久化对象的时候返回null

load()获取数据库中的一条记录,没有找到抛出异常(HibernateException),此外get是在Hibernate一级缓存中查询,找不到在去数据库中查找;而load是在一级缓存中找不到还会去二级缓存中查找,找不到的话再去数据库中查找。

update()更新数据库中对应的数据

delete()删除数据库中的一条对应的记录

6.Transaction事务管理机制

Transaction对象主要用于管理事务,所有持久化操作都需要在事务管理下进行。Transaction通过抽象将应用程序从底层的JDBC,JTA以及CORBA事务中隔离开,允许开发人员使用一个统一的事物操作让自己的项目可以在不同的环境和容器之间迁移。

通过Session中的beginTransaction()方法获得一个Transaction对象实例

Transaction接口中的方法主要是

commit():提交事务

rollback()回滚事务

Transaction trans = session.beginTransaction();

//多个持久化操作

。。。。

//提交事务

trans.commit();

第一次执行,如果数据库中没有该表。那么Hibernate会根据配置文件和映射文件的信息自动生成一个对应的表,以后再次执行更新的时候也会更新对应的表,因为在配置文件中添加了

<property name=”hibernate.hbm2ddl.auto” >update</property>

整理代码:

hibernate.cfg.xml

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

<hibernate-configuration>

<session-factory>

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

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

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test??useUnicode=true&amp;characterEncoding=utf8</property>

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

<property name="hibernate.connection.password">221256</property>

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

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 注册所有的ORM映射文件 -->

<mapping resource="com/yang/model/mapper/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

User.java

package com.yang.model;

public class User {

private int id;

private String userName;

private String password;

public User(){}

public User(String userName, String password){

this.userName = userName;

this.password = password;

}

//属性的getter & setter 方法

public int getId(){ return this.id; }

public void setId(int id){ this.id= id;}

public String getUserName(){ return this.userName;}

public void setUserName(String userName){this.userName = userName;}

public String getPassword(){return this.password;}

public void setPassword(String password){ this.password = password;}

}

User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!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.yang.model.User" table="user">

<id name="id" column="id">

<generator class="native"/>

</id>

<property name="userName" column="username" type="string" not-null="true"/>

<property name="password" column="password" type="string" not-null="true"/>

</class>

</hibernate-mapping>

TestMain.java

package com.yang.main;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import com.yang.model.User;

public class TeatMain {

public static void main(String[] args) {

// TODO Auto-generated method stub

User user = new User("liang","huihui");

//实例化Configuration

Configuration configuration = new Configuration();

//加载hibernate配置信息

configuration.configure(ClassLoader.getSystemResource("hibernate.cfg.xml"));

//创建Sessionfactory实例

SessionFactory sessionFactory = configuration.buildSessionFactory();

//Configuration对象会根据配置文件的内容创建SessionFactory实例,一旦构建完毕,他将包含配置信息,之后任何对于configuration实例的改变都不会影响到已经构建的sessionFactory实例

Session session= sessionFactory.openSession();

Transaction trans = session.beginTransaction();

session.save(user);

trans.commit();

session.close();

}

}

7.利用Query进行HQL查询

Query可以使用HQL、SQL等语句查询数据库中的数据,HQL(Hibernate Query Language)是面相对象的查询语言,有以下特点:

支持各种条件查询、连接查询、子查询

支持分页、分组查询;纸质各种聚集函数和自定义函数;支持动态绑定查询函数。

Query query=session.createQuery(“from User”);

其中的参数是HQL语句,表示读取的是User类型的对象,将User对应的表中的数据封装成为User对象到List集合中。

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

List<User> listUsers = query.list();

for(User user: listUsers){

System.out.println(user);

}

当然这里只是简单地HQL语句,会有更加详细的关于HQL语句的学习。

8利用Criteria进行条件查询

这个Criteria和query十分相似,他是通过Session对象的createCriteria()方法创建的

Criteria criteria = session.createCriteria(User.class);

YangTengfei

2013.11.27

Hibernate入门2.简单的项目开发实例的更多相关文章

  1. 如何实现从Java入门到服务端项目开发的进阶?

    对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而言,应该对于学习时间.目标和内容规划有一个清晰的定 ...

  2. 走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    原文地址:Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate ...

  3. vuejs2从入门到精通与项目开发实战

    vuejs2从入门到精通:一.基础部分0.课件1.介绍2.vue实例3.模板语法4.计算属性和观察者5.Class与Style绑定6.条件渲染7.列表渲染8.事件处理9.表单输入绑定10.1.组件(1 ...

  4. WCF揭秘(一)——简单的WCF开发实例

    一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...

  5. Qt项目开发实例 (含源码)

    源码传送门: 啊渊 / QT博客案例 · GitCode 目前QT的研发都是基于windows操作系统的,本文分享在国产操作系统中学QT的路线图,其实学习路线差不多,为了全面的回顾自己的学习知识,打算 ...

  6. 迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派

    免费视频教程: 为初学者精心录制的整套视频教程全部免费,随IT技术发展而不断增添的视频教程仍然免费!一支有经验的工程师团队会始终成为您的后盾. 项目实战---全开源: 手机远程控制开发板 门禁系统 W ...

  7. Django项目开发实例之我的博客

    1.开发环境 2.创建virtualenv 3.安装相关包 Django Pillow 4.创建项目 添加应用: 5.设置静态文件和模板 6.运行测试 参考(http://www.cnblogs.co ...

  8. 详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例

    第一次搞资源更新方面,这里只说更新,加载,AssetBundle资源加载,谈谈自己的理解,以及自己在项目中遇到的那些神坑,现在回想一下,真的是自己跪着过来的,说多了,都是泪. 我这边是安卓AssetB ...

  9. Newbe.Claptrap 框架入门,第二步 —— 创建项目

    接上一篇 Newbe.Claptrap 框架入门,第一步 -- 开发环境准备 ,我们继续了解如何创建一个 Newbe.Claptrap 项目. Newbe.Claptrap 是一个用于轻松应对并发问题 ...

随机推荐

  1. Integer.valueof 和 Integer.parseInt

    System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); System.out.p ...

  2. Linux下tomcat启动项目原因排查

    先停掉tomcat服务器: 然后把文件删除: 这时候启动服务器: 看下有没有启动成功: 接着把重新优化过的代码用X ftp传上去. 等几分钟就可以. 如果老是出现问题,就去catalina.out文件 ...

  3. qt——类大全

    qt类总结地址 http://www.kuqin.com/qtdocument/ QWidget.QDialog及QMainWindow的区别 QWidget类是所有用户界面对象的基类. 窗口部件是用 ...

  4. ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能

    搭建ftp服务器 1:首先,更新软件源,保证源是最新的,这样有利于下面在线通过apt-get install命令安装ftp. 2:使用sudo apt-get install vsftp命令安装vsf ...

  5. Nginx 403 forbidden原因及故障模拟重现(转载)

    这篇文章是转载过来的一篇文章,觉得不错,因此做个记录. 访问Nginx出现状态码为403 forbidden原因及故障模拟 1) nginx配置文件里不配置默认首页参数或者首页文件在站点目录下没有 i ...

  6. 关于使用ubuntu的那些事儿

    最近把笔记本的系统由windows改成了ubuntu的最新版系统了,其实改变系统最主要的目的就是希望自己能够快速的学会使用linux系统. 所以这是一篇记录了关于一个ubuntu小白第一次使用ubun ...

  7. chrome 调试 ios的 H5 页面

    原文地址http://www.cnblogs.com/kelsen/p/6402477.html 本文重点讨论如何在 Windows 系统中通过chrome 浏览器调试运行在 iPhone Safar ...

  8. bat笔记

    背景介绍 现入职的公司包含发送EDM的项目,每天都有各种题型邮件需要发送,但是由于各种原因,发送EDM程序的服务器老是被网管各种重启 :) 作为负责人,对这事很恼火,隔几天就被投诉,怎么又没收到考勤邮 ...

  9. 千亿级SaaS市场:企业级服务的必争之地

    2015年企业级服务融资案例数量飙升,大额融资频现.不少企业纷纷涉足企业级服务市场,其中,以IM为主打的阿里钉钉,以企业CRM为主的纷享逍客高调进入人们的视野,以产品管理为核心.集成多种工具服务的iC ...

  10. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...