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. Python开发【模块】:CSV文件 数据可视化

    CSV模块 1.CSV文件格式 要在文本文件中存储数据,最简单的方式是讲数据作为一系列逗号分隔的值(CSV)写入文件,这样的文件成为CSV文件,如下: AKDT,Max TemperatureF,Me ...

  2. 解决SpringMVC中文乱码

    第一种:表单提交后controller获得中文参数后乱码解决方案 注意: 1: form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果 2: jsp页面编码设置为UTF-8 ...

  3. raspberry pi 树莓派作为比特比矿机

    http://www.instructables.com/id/Bitcoin-Mining-using-Raspberry-Pi/ Step 5: Installing Required Libra ...

  4. (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...

  5. 77. Combinations(回溯)

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...

  6. 2018 Multi-University Training Contest 4 Solution

    A - Problem A. Integers Exhibition 留坑. B - Problem B. Harvest of Apples 题意:计算$\sum_{i = 0}^{i = m}C( ...

  7. Arthur and Brackets

    n<605设计出n对夸号  给出n个条件每个条件为[l,r] 表示第i对夸号右夸号离左夸号的距离,然后夸号的右夸号出现的顺序必须按照给的顺序 出现, 那么如果存在就输出否则输出impossilb ...

  8. MySQL基础语句【学习笔记】

    放在这里,以备后查. 1. 数据库, 数据库服务器, 数据库语言 数据库,是持久性数据的集合,供给定企业的应用程序系统使用,并且由一个数据库管理系统来管理: 数据库服务器,又称数据库管理系统,用来管理 ...

  9. docker 容器目录挂载 | 进出容器

    docker run --name wnginx -d -p 9001:80 -v /home/www:/usr/share/nginx/html nginx --name   别名 -d      ...

  10. FM/AM收音机原理

    收音机这东西很早就开始用了,但一直都没有了解过它的原理,听说是很简单.下面记录一些笔记. 1. 基本概念 收音机是一种小型的无线电接收机,主要用于接受无线电广播节目,收听无线电发射台.首先说一下收音机 ...