由于目前我在学校的一个实验室跟老师学习Java EE开发,老师用的是Seam框架接活做项目,所以这一系列的文章将会向Seam方向写。。路线大致应该是 : JSP --> Servlet --> Hibernate --> JSF --> EJB3 --> Seam

在开始之前,去www.hibernate.org下载 hibernate4.final.zip ,并将所有依赖的jar文件放到classpath下

一、Hibernate简介

持久化,是指将内存中的数据保存到可以永久存储数据的高设备中,如硬盘。

Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了轻量级的封闭,使得程序员能从繁杂的JDBC操作中彻底解放出来。Hibernate使用hibernate.cfg.xml完成数据库的配置,使用 *.hbm.xml文件定义从对象到数据库的映射规则。

数据库的配置 :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><!-- MySql JDBC驱动类 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- MySql DB用户密码 --><property name="hibernate.connection.password">0000</property><!-- MySql 连接URL --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property><!-- MySql DB用户名 --><property name="hibernate.connection.username">root</property><!-- MySql JDBC方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 在控制台打印自动生成的SQL语句 --><property name="hibernate.show_sql">true</property><!-- 实例Bean映射定义文件 --><mapping resource="dev/entity/UserBean.hbm.xml"/></session-factory>
</hibernate-configuration>

<mapping resource="dev/entity/UserBean.hbm.xml"/>是指定映射规则文件的路径。UserBean.hbm.xml定义了从UserBean这个类到关系数据库的映射规则。该文件应该放在与UserBean.class 同级的目录下。UserBean这个实例bean定义如下:

package dev.entity;public class UserBean
{private int id; //用做主键private String name;private String pwd;//省略get和set方法
}

我们要做的就是将UserBean这个类存储到数据库的一张名叫USERBEAN的表中。UserBean的每个属性都对应着数据表中的一个字段。首先创建USERBREAN数据表:

create table USERBEAN
(ID int key auto_increment,NAME varchar(40),PWD varchar(40)
);

注意,主键 ID字段必须设置成auto_increment,即自增类型。下面通过UserBean.hbm.xml来定义从类到数据库的映射规则。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 29, 2013 2:13:53 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping><class name="dev.entity.UserBean" table="USERBEAN"><id name="id" type="int"><column name="ID" /><generator class="native" /></id><property name="name" type="java.lang.String" length="40"><column name="NAME" /></property><property name="pwd" type="java.lang.String" length="40"><column name="PWD" /></property></class>
</hibernate-mapping>

关于这些xml文件的说明,可以查看官方文档。上面的xml应该很容易理解,如table属性指的就是表名,id元素定义了主键等等。这里不再说明

好了,一切准备就绪,下面就开始持久化我们的第一个类吧!

二、使用Hibernate持久化类的流程

构造Configuration对象 --> 构造ServiceRegistry对象 --> 得到SessionFactory对象 -->使用SessionFactory得到Session对象。

得到Session对象后,首先要调用beginTransaction()方法来打开一个事务,然后调用save()方法将UserBean的实例做为参数传递进去,再调用Transaction的commit()方法提交事务,这时候UserBean对象才会被保存到数据库中。如果调用完save()方法后没有调用commit(),则不会进行任何的保存工作,只有当事务关闭或者调用了flush方法后才会真正地将对象持久化。

package dev;import java.rmi.registry.Registry;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;import dev.entity.*;public class Main
{/*** @param args*/public static void main(String[] args){// TODO Auto-generated method stubConfiguration cfg = new Configuration().configure(); //加载配置文件ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); //在得到SessionFactory之前要先进行注册,Hibernate4新特性SessionFactory factory = cfg.buildSessionFactory(registry);Session session = factory.openSession(); //开启一个session//填充实例beanUserBean user = new UserBean();user.setId(1);user.setName("bruce");user.setPwd("1234567");session.beginTransaction(); //开始一个事务session.save(user); //保存实例对象session.getTransaction().commit(); //提交事务,user会被持久化session.close();}}

注意,如果使用的是Hibernate3或之前的版本,则不需要注册这一步,即main方法中第二行代码可以省略,cfg.buildSessionFactory()方法不需要参数。

运行程序,持久化完成。

Hibernate4 : 持久化你的第一个类相关推荐

  1. Java开发规范,不要新建一个类就实现Serializable接口

    个人网站:http://xiaocaoshare.com/ 作为一名java开发者,细节决定技术的高度和深度 一个java类什么时候需要实现Serializable接口 1.什么是Serializab ...

  2. Swift中一个类中的枚举(enum)类型的数据该如何实现序列化(NSCoder)

    简述 昨天在开发中遇到了这样一个问题,需要用NSUserDefaults持久化一些数据,其中需要保存一个自己定义的类对象.这就需要我们去实现序列化与反序列化,即把对象转化成二进制数据存入取出时再将二进 ...

  3. 用一个类根据Model属性生成SQL语句

    想到写这个的原因是我和我的一个朋友在写一个开源项目的时候,我负责了数据库的持久化存储部分,结果他看到了我的数据库数据存储结构之后直接傻眼了,因为个人比较简单粗暴,直接把一个数据Model归档成为二进制 ...

  4. moba寻路_GitHub - ylmbtm/MoBaDemo: 用Unity做的一个类Moba游戏Demo

    游戏整体逻辑 出兵逻辑 游戏会在两个阵营的固定区域在固定的频率中出兵.小兵只能沿着规定好的轨道进行行走,并按照各个防守塔的顺序向敌方进行进攻. 需要注意的点 对于固定出现的小兵来说,不适合在其死亡之后 ...

  5. moba寻路_GitHub - aafasou/MoBaDemo: 用Unity做的一个类Moba游戏Demo

    游戏整体逻辑 出兵逻辑 游戏会在两个阵营的固定区域在固定的频率中出兵.小兵只能沿着规定好的轨道进行行走,并按照各个防守塔的顺序向敌方进行进攻. 需要注意的点 对于固定出现的小兵来说,不适合在其死亡之后 ...

  6. [转载] Java中如何引用另一个类里的集合_Java工程师面试题整理

    参考链接: 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂,从基础到框架 最新版大厂面经汇总出炉,持续更新中 汇总完了上传网盘,设计到后端架构师的一切知识 如果没更新 ...

  7. python如何创建一个类_python (知识点:类)简单的创建一个类

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 ...

  8. java模拟使用接口,关于java:模拟一个类与模拟它的接口

    对于单元测试,我需要模拟几个依赖项.依赖项之一是实现接口的类: public class DataAccessImpl implements DataAccess { ... } 我需要设置一个这个类 ...

  9. Java动态加载一个类的几种方法以及invoke

    一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** @author Administrator*/ public interface IUser {} ...

最新文章

  1. Maven的安装与Eclipse的配置
  2. 按照 排序 oracle,oracle 按照中文排序
  3. linux route 刷新_linux基础命令介绍十五:推陈出新
  4. linux sed i 大文件,sed -i   修改链接文件注意事项   破坏了原文件
  5. 流程图 3条泳道 决策_制定透明决策的三步流程
  6. postgresql cast转换类型
  7. 程序员是不是当代最好的职业?
  8. python支持什么循环_Python的循环
  9. codewars--js--Happy numbers++无穷大判断
  10. 1034. 有理数四则运算(20)-PAT乙级真题
  11. Leetcode 647.回文子串
  12. 在kubernetes上实现tomcat日志的持久化
  13. CocoaPods管理第三方
  14. 董承非: 如何从各种类型的错误中学习
  15. 职高计算机专业小白可以读吗,「高考从小白到精通」报考计算机类专业是否是一个正确的选择?...
  16. 为什么在使用超级终端配置交换机时显示乱码或无显示?
  17. jboss linux环境部署,linux下部署jboss
  18. vs插件VS10x CodeMap 注册码
  19. TEM测试常见问题及解答(三)
  20. win10 不能使用 ps3相机

热门文章

  1. 惠普收购Palm意在遏制同系竞争
  2. bmklocationmanager方法没有回调_关于node中的回调(必学)
  3. java class教程_深入理解Java Class文件格式(七)
  4. java 货币格式 转换_java 货币 转换
  5. 初级测试如何快速成长和进步
  6. gogoclient java_链路跟踪-GRPC请求 - GoFrame官网 - 类似PHP-Laravel, Java-SpringBoot的Go企业级开发框架...
  7. Jmeter数据库及接口测试
  8. linux rec命令_文件过多时ls命令为什么会卡住?
  9. PAT甲级1016 (map,排序)
  10. android 使用shell模拟触屏_Appium常用操作之「微信滑屏、触屏操作」