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.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- vue-loader 细节
vue-loader 能根据 .vue 文件,导入一个vue组件.我这里从 vue-cli 的构建项目中抽取了vue-loader 一个小例子出来:vuedemo/demo02 vue-loader ...
- phpize Cannot find autoconf. 错误解决
phpize Configuring for: PHP Api Version: 20151012 Zend Module Api No: 20151012 Zend Extension Api No ...
- mysql优化之参数优化(转)
1.优化方式 硬件优化=>系统优化=>mysql配置优化=>SCHEMA优化=>sql优化=>其他解决方案(redis or MongoDB or Cassandra o ...
- centos挂载本地镜像作为yum源
1.安装Centos后默认的Yum源如下 ll /etc/yum.repos.d/ [root@localhost ~]# ll /etc/yum.repos.d/ total 32 -rw-r- ...
- 洛谷P4219 - [BJOI2014]大融合
Portal Description 初始有\(n(n\leq10^5)\)个孤立的点,进行\(Q(Q\leq10^5)\)次操作: 连接边\((u,v)\),保证\(u,v\)不连通. 询问有多少条 ...
- [转]GitHub 优秀的 Android 开源项目
GitHub 优秀的 Android 开源项目 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageV ...
- k/3cloud表格控件块粘贴代码逻辑
大家可以在表单插件EntityBlockPasting事件中自己处理,然后将cancel设置为true.以下代码可以参考一下,插件代码中需要将其中一些属性或方法修改,例如this.BusinessIn ...
- Couriers(bzoj 3524)
Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. ...
- 洛谷P3094 [USACO13DEC]假期计划Vacation Planning
题目描述 有N(1 <= N <= 200)个农场,用1..N编号.航空公司计划在农场间建立航线.对于任意一条航线,选择农场1..K中的农场作为枢纽(1 <= K <= 100 ...
- THUWC2018 暴力+爆炸记
Day 0 没有Day0. Day 1 签到然后去宿舍,环境还行,比某偏远山区要强多了,不过这热水有点难拿??看RP有遇到煮好水的饮水机就拿,没有就苟矿泉水. 中午,那个餐还是挺好吃的,不过餐费40就 ...