一个Hibernate小程序

基本步骤

在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境。今天,为大家带来一个Hibernate小例子,让大家能够快速上手。

步骤如下:

1.配置hibernate.cfg.xml

2.编写映射文件User.hbm.xml

3.编写一个持久化类User.java

4.编写辅助类HibernateUtil.java

5.加载并存储对象UserManager.java

配置Hibernate.cfg.xml

a、在新建的XHibernate项目的src目录下新建Hibernate配置文件hibernate.cfg.xml。

b、将下面内容复制到新建的文件中,注意更改数据库连接的设置。其他不用动。

hibernate.cfg.xml(路径是src/hibernate.cfg.xml)

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">[email protected]</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">10</property>
        <!-- Enable Hibernate‘s automatic session context management -->
        <property name="current_session_context_class">thread</property>
        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>
        <property name="javax.persistence.validation.mode">none</property>
        

<mapping resource="User.hbm.xml" />

    </session-factory>
</hibernate-configuration>

解释:

1.映射文件的路径

<mapping resource="User.hbm.xml"/>

2.实现自动建表:在Hibernate启动时删除并重新创建数据库架构。

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

其中value的值如下:

create:表示启动的时候先drop,再create

create-drop: 也表示创建,只不过再系统关闭前执行一下drop

update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新

validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新

如果没做配置,那么就需要在数据库中手动建表。

3.数据库连接方言

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

4.输出sql语句是必须的。

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

5.使用Hibernate内建的连接池,并设置最大连接数为10

<property name="connection.pool_size">10</property>

6.javax.persistence.validation.mode默认情况下是auto的,就是说如果不设置的话它是会自动去你classpath下面找一个bean-validation**包,但是找不到,就会报错误。

<property name="javax.persistence.validation.mode">none</property>

7.禁止二级缓存。

<property name="cache.provider_class">
    org.hibernate.cache.NoCacheProvider
</property>

编写映射文件User.hbm.xml

Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。

<hibernate mapping package="

映射的实体的包

">

其根元素是hibernate-mapping,通过属性package指定类所在的包。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。

注意 Hibernate 的 DTD 是非常复杂的。你的编辑器或者 IDE 里使用它来自动完成那些用来映射的 XML 元素(element)和属性(attribute)。

User.hbm.xml(路径是src/User.hbm.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="test">

    <class name="User" table="user">
        <id name="ID" column="ID">
            <generator class="native" />
        </id>
        <property name="name" />
        <property name="passwd" />
    </class>
</hibernate-mapping>

编写一个持久化类User.java

在项目中新建一个包test,并编写一个持久化类User.java。

通过IDE的getter and setter可快速生成。在myeclipse中使用快捷键的方法是:

ALT + SHIFT + S让后按下键盘上的r键。在使用ALT + A 表示选择所有的属性都生成getter、setter方法。最后回车。

User.java(路径是src/test/User.java)

package test;

public class User {
    int ID;
    String name;
    String passwd;
    public int getID() {
        return ID;
    }
    public void setID(int iD) {
        ID = iD;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}

编写辅助类HibernateUtil.java

我们必须启动 Hibernate,此过程包括创建一个全局的 SessoinFactory。SessionFactory 可以创建并打开新的 Session。一个 Session 代表一个单线程的单元操作,org.hibernate.SessionFactory 则是个线程安全的全局对象,只需要被实例化一次。单例模式

src目录下新建一个utils包,并new一个java类

UserManager.java(路径是src/utils/UserManager.java)

package utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // 根据配置文件hibernate.cfg.xml创建一个SessionFactory对象
            return new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            // 确保异常被打印并被你看到
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

加载并存储对象UserManager.java

现在是时候看看效果了,让我们试着向数据中存储一个User对象。

package test;

import org.hibernate.Session;

import utils.HibernateUtil;

public class UserManager {
    public static void main(String args[]) {
        createAndStoreUser("hibernate","hibernate");
    }

    private static void createAndStoreUser(String name, String passwd) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        User user = new User();
        user.setName(name);
        user.setPasswd(passwd);
        session.save(user);
        session.getTransaction().commit();
    }
}

运行结果,控制台输出sql,恭喜你,成功了!

Hibernate: insert into user (name, passwd) values (?, ?)

关于getCurrentSession()

1、getCurrentSession()与openSession()的区别?

* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()

创建的session则不会

* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()

创建的session必须手动关闭

2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

* 如果使用的是本地事务(jdbc事务)

<property name="hibernate.current_session_context_class">thread</property>

* 如果使用的是全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>

Hibernate运行过程

我们可以查看控制台输出的日志信息,并了解其运行的过程。

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mappingresource="User.hbm.xml"/>读取并解析映射信息

4.连接数据库,并根据映射文件更新数据库

5.通过config.buildSessionFactory();//创建SessionFactory

6.sessionFactory.openSession();//打开Sesssion

7.session.beginTransaction();//创建事务Transation

8.persistent operate持久化操作 //一般指Save这个方法

9.session.getTransaction().commit();//提交事务

10.关闭Session

11.关闭SesstionFactory

参考

1.Hibernate官方文档

2.Hibernate详解(5)——Hibernate核心接口和工作原理

时间: 2024-11-05 16:08:42

一个Hibernate小程序的相关文章

MyEclipse10下开发第一个Hibernate小程序

一.首先,我们新建一个Java项目,取名为HibernateTest. 二.因为Hibernate框架是用面向对象的思想来操作数据库,那么一定要建立数据库和表. (1).这里我使用的是MySQL 5.6版本的数据库,大家可以去网上下载MySQL,我没有使用MySQL自带的管理工具和命令行工具,使用的是一款SQLyog工具,下载地址:http://download.csdn.net/detail/u012561176/8728955 ,其中关于一些数据库的jar包,也可以通过这个地址下载:http

Hibernate 第一个Hibernate应用程序

Chapter 1. Tutorial   第一章 使用说明书 Table of Contents   目录 1.1. Part 1 - The first Hibernate Application   第一节 第一个Hibernate应用程序 1.1.1. Setup   设置开发环境 1.1.2. The first class  创建第一个类 1.1.3. The mapping file  创建类与数据库表的映射文件 1.1.4. Hibernate configuration  Hi

Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序

1.首先,先要去MyEclipse和Tomcat的官网去下载Linux版的压缩文件,而MyEclipse的中文官网是需要登录并有可能要付钱,大家可以去网上下载,还有就是Tomcat的linux版,这个直接上官网就可以下载了,下载后我还是通通把它们放在我E盘下的as目录底下,如果大家还没配置好jdk,即Java环境的话,可看我这篇文章:http://blog.csdn.net/u012561176/article/details/45119047 这里我就直接进行操作了! 我E盘下的as文件夹

第一个python小程序,2进制转10进制

#Bin to Dec #my first python programe n = c = itm = 0 a = raw_input('please input Binary number:\n') for n in range(0,len(a)):    b = a[n:n+1] #   print 'n is', n #   print 'b is',b #   print 'len',len(a[n:])       if b == '1':    c = 2**(len(a[n:])-

Linux下搭建Java环境变量并实现第一个Java小程序

1.首先,我们打开虚拟机里面的Linux操作系统,然后点击下图菜单下的虚拟机选项: 在点击虚拟机下的设置菜单,如下图所示: 这里我已经添加进去我所需要的文件夹了,我放在本机E盘下的as文件夹里面到底放了什么呢? 上图这两个压缩文件,一个是android studio的压缩包,上年发布出来的,一直没用它,今天本来想在windows下安装这个软件,发现所需要的jdk是1.7,而我在windows下的jdk版本为1.6,所以打算在Linux操作系统下安装jdk1.7,并安装andoid studio工

手把手教你写一个RN小程序!

时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现在我开始学react native,那么现在对于react native也算是有所了解了,就用网上的接口开发一个小程序,现在带大家来写这个程序!接口是用看知乎的API,简简单单的只有get,可以从这里入门,也算是带大家入门吧,过后我会把源代码放在我的github上,前期项目肯定特别简陋,后面慢慢来优

第一个mpvue小程序开发总结

前言 说起小程序,其实在去年我都还只试着照着官方文档写过demo的,不过现在这家公司小程序做得比较多,我来之后也参与了几个小程序的开发了,最开始那几个是用的wepy,最近一个开始转用mpvue开发,最近这个项目终于上线了,我也来试着总结回顾一波吧. 关于框架的选择 我刚来现在的公司时,我就了解过有一个小程序框架叫mpvue被美团开源了,有过一个大致的了解.来了公司之后了解到我们公司已经有了一套自己的小程序技术栈那就是基于wepy的,而不是原生小程序,毕竟我们要开发的小程序不是简单的几个页面,而且

从入门到上线一个天气小程序

作者:wuwhs segmentfault.com/a/1190000017388333 前言 学习了一段时间小程序,大致过了两遍开发文档,抽空做个自己的天气预报小程序,全当是练手,在这记录下.小程序开发的安装.注册和接入等流程就不罗列了,在小程序接入指南已经写得很清楚了,以下只对开发过程常用到得一些概念进行简单梳理,类比 Vue 加强记忆,最后选取个人项目天气小程序中要注意的几点来说明. 欢迎扫码体验: 源码请戳这里,欢迎start~ 初始化项目目录结构 安装好开发者工具,填好申请到的 App

开源一个golang小程序商城后台(moshopserver)

开源一个golang小程序商城后台(moshopserver) golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多乱七八糟的语法.学一门新的语言,最好的方法就是动手写一些东西,最近小程序也比较火,也想学一下,网络上搜索的一些开源项目,基本上没有golang实现的,大部分都是nodejs和java写的,那么我就来实现一个golang版的吧,一石二鸟. 开发小程序前后端都需要开发,自己的前端经验很少,搜索了一些开源