Hibernate 之 How
- Hibernate是一个开源框架,而我们在项目中使用框架的时候都要对所使用的框架进行相关的环境搭建,下面的步骤便是.
- 创建一个Java项目Hibernate_first
- 创建User
Library,从Hibernate核心文件中加入依赖包.- HIBERNATE_HOME/lib/*.jar
- HIBERNATE_HOME/hibernate3.jar
- 加入数据库驱动(此例子中用mysql驱动)
- 创建核心配置文件hibernate_cfg.xml
- 链接数据库相关的配置
- 配置数据库适配器.可以直接使用相关数据库的相关特点.
- <!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.connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- 数据库名称地址 -->
- <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
- <!-- 数据库用户名 -->
- <property name="hibernate.connection.username">root</property>
- <!-- 数据库密码 -->
- <property name="hibernate.connection.password">root</property>
- <!-- 配置数据库适配器.可以直接使用相关数据库的相关特点-->
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- 打印sql语句到控制台 -->
- <property name="hibernate.show_sql">true</property>
- <!-- 对打印的Sql语句进行格式化 -->
- <property name="hibernate.format_sql">true</property>
- <!-- 对资源进行映射 -->
- <mapping resource="com/tgb/hibernate/User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
- 环境搭建完毕之后,接下来我们将会用面相对象的思想来完成对数据库表的创建.和我们以前的先建表有所不同,Hibernate是将类映射到关系库数据中的表.接下来建立User类.
- package com.tgb.hibernate;
- import java.util.Date;
- /**
- *
- * @title 创建User类
- * @author jnqqls
- * @group TGB
- * @version 1.0
- * @datetime 2012-11-30上午10:15:25
- * @comments
- */
- public class User {
- //编号
- private String id;
- //姓名
- private String name;
- //密码
- private String password;
- //创建时间
- private Date createTime;
- //失效时间
- private Date expireTime;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public Date getExpireTime() {
- return expireTime;
- }
- public void setExpireTime(Date expireTime) {
- this.expireTime = expireTime;
- }
- }
- 接下来是Hibernate中核心的地方:建立映射文件User.hbm.xml.如何将一个类映射成数据库中的一个表?它们之间的映射模型如下
- 映射模型
- 创建映射文件User.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">
- <hibernate-mapping>
- <!-- class标签表示所要映射的java类,而table属性可以更改它在数据库中表的名字,默认是类名 -->
- <class name="com.tgb.hibernate.User" >
- <!-- 表的主键,有着不同的生存策略 -->
- <id name="id">
- <generator class="uuid"></generator>
- </id>
- <!-- 以下内容是对类的属性进行映射 -->
- <property name="name"/>
- <property name="password"/>
- <property name="createTime"/>
- <property name="expireTime"/>
- </class>
- </hibernate-mapping>
- 类建好,映射也完成,那么如何将类转化成数据库中的实际表呢?接下来我们将会把User类导入数据库表
- 为了让Hibernate识别实体类.需要将User.htm.xml加入核心配置文件Hibernate.cfg.xml中.
- <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
- 编写工具栏ExportDB.java,将我们描述的htm文件生成ddl.也就是hbm2ddl
- package com.tgb.hibernate;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.tool.hbm2ddl.SchemaExport;
- /**
- *
- * @title 将hbm生成ddl 将我们描述的htm文件生成ddl.也就是hbm2ddl
- * @author jnqqls
- * @group TGB
- * @version 1.0
- * @datetime 2012-11-30上午10:35:54
- * @comments
- */
- public class ExportDB {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //读取配置文件上面的信息
- Configuration cfg = new Configuration().configure();
- //将配置文件写成ddl.
- SchemaExport export = new SchemaExport(cfg);
- //将ddl打印大控制台并写入数据库中.
- export.create(true, true);
- }
- }
- 为了让Hibernate识别实体类.需要将User.htm.xml加入核心配置文件Hibernate.cfg.xml中.
- 测试打印数据:
- 查看数据库中的表:
- 建立客户端Client,添加用户数据到Mysql.
- 建立client
- package com.tgb.hibernate;
- import java.util.Date;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- /**
- * 客户端程序
- * @author jnqqls
- * @group TGB
- * @version 1.0
- * @datetime 2012-11-27上午9:31:32
- * @comments
- */
- public class Client {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 读取hibernate.cfg.xml文件
- Configuration cfg = new Configuration().configure();
- // 建立SessionFactory,对应一个数据库的镜像.
- SessionFactory factory = cfg.buildSessionFactory();
- // 获得session
- Session session = null;
- try {
- // 工厂创建session,并获得.
- session = factory.openSession();
- // 手动开启事务
- session.beginTransaction();
- // 创建User实体
- User user = new User();
- user.setName("jnqqls");
- user.setPassword("jnqqls");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
- // 保存user对象
- session.save(user);
- // 提交事务
- session.getTransaction().commit();
- } catch (Exception e) {
- // 这里只是简单打印一下堆栈,用于测试
- e.printStackTrace();
- //事务回滚.
- session.getTransaction().rollback();
- } finally {
- // session是否为null
- if (session != null) {
- // session是否打开
- if (session.isOpen()) {
- // 关闭session
- session.close();
- }
- }
- }
- 执行客户端程序.
- 在console上打印的内容如下:
- Hibernate:
- insert
- into
- User
- (name, password, createTime, expireTime, id)
- values
- (?, ?, ?, ?, ?)
- 查看数据库
分享自:
http://blog.csdn.net/jnqqls/article/details/8242520
在上一篇文章Hibernate
之 Why? 中对Hibernate有了一个初步的了解.接下来我们将从How的角度,也就是如何使用Hibernate来进行学习.
UserLiberty部分截图

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
drop table if exists User
create table User (id varchar(255) not null, name varchar(255), password varchar(255), createTime datetime, expireTime datetime, primary key (id))
总结:使用Hibernate可以让我们通过面向对象的思维来操作关系型数据库.并且在此文的实例中也有体现出在上一篇文章所谈到的Hibernate优点,例如原来插入数据的insert语句(console所打印的语句)现在只需要一句session.save(user)变能完成相同的功能.至此本文从Hibernate如何使用的角度介绍完毕,在接下来的文章中会继续对Hibernate中的内容进行学习和分享.
Hibernate 之 How的更多相关文章
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- CSS3---box-shadow设置
1.box-shadow是向盒子添加阴影.支持添加一个或者多个. 2.box-shadow: X轴偏移量 Y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式]; 3.注意:ins ...
- svn基本使用详情
1.增加(Add)先提到变更列表中,再commit到配置库中,选择新增文件,右键SVN菜单执行“Add“操作提交到”变更列表中”,然后右键SVN菜单执行”SVNCommit”提交到版本库中. 2.删除 ...
- 关于shell中常见功能的实现方式总结
一.shell脚本中连接数据库 二.
- 【】关闭QQ右下角各种弹框
[]关闭QQ右下角弹框 一: 二: 超级会员设置过滤(屏蔽)广告后可以过滤哪些广告? 1.可以过滤QQ客户端好友聊天对话框右侧出现的Flash广告.左下角的文案广告: 如图: 2.可以 ...
- 80. Hibernate 5.0命名策略使用naming-strategy 不起作用【从零开始学Spring Boot】
[原创文章,转载请注明出处] 事情的起因:一不小心从1.3.3升级到了1.4.0版本,结果就碰到了各种悲催的事情了,好吧,Hibernate5.0的新特性就是其中一个坑,我们会发现我们配置的namin ...
- HDU 4405 飞行棋上的数学期望
突然发现每次出现有关数学期望的题目都不会做,就只能找些虽然水但自己还是做不出的算数学期望的水题练练手了 题目大意: 从起点0点开始到达点n,通过每次掷色子前进,可扔出1,2,3,4,5,6这6种情况, ...
- 第k小整数(树状数组)
洛谷传送门 入门难度.. 没错,但是我并不是要暴力做. 而是用树状数组来做. 先离散化,然后随便搞一搞就可以了.(晕.比暴力还慢) 如果要查找某一区间的的话可以把区间取出重新建树,然后再求.(更暴力) ...
- linux命令1——基础
Rm 删除命令 Rm [选项][文件] 删除一个文件或者目录 选项:r 递归的删除文件夹及其子文件,f 忽略不存在的文件(不提示) (2)rm删除目录下所有文件,但不删除目录 >>rm - ...
- msp430入门编程41
msp430中C语言的软件工程--状态机建模
- SOJ 4482 忽悠大神【最小生成树】
题目链接: http://acm.scu.edu.cn/soj/problem.action?id=4482 题意: 给定边权和点权,从一个点出发并回到该点,减少尽量多的边,每路过点和边都要把权重加到 ...


