Hibernate是什么

Hibernate是一个轻量级的ORMapping框架

ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,依照一定的规则进行映射的过程。

ORMapping基本相应规则:

1:类跟表相相应

2:类的属性跟表的字段相相应

3:类的实例与表中详细的一条记录相相应

Hibernate的实现方式

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVqaW5neXVhbjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Hibernate解决的问题:

通过上图我们也能发现。Hibernate主要用来实现Java对象和表之间的映射。除此之外还提供数据查询和获取数据的方法,能够大幅度降低开发时人工使用SQL和JDBC处理数据的时间。

Hibernate的目标是对于开发人员通常的数据持久化相关的编程任务中解放出来。

Hibernate能够帮助你消除或者包装那些针对特定厂商的SQL代码,而且帮你把结果集从表格式的表示形式转换到一系列的对象去。

hibernate长处:

1、封装了jdbc。简化了非常多反复性代码。

2、简化了DAO层编码工作。使开发更对象化了。

3、移植性好,支持各种数据库。假设换个数据库仅仅要在配置文件里变换配置就能够了。不用改变hibernate代码。

4、支持透明持久化,由于hibernate操作的是纯粹的(pojo)java类。没有实现不论什么接口,没有侵入性。所以说它是一个轻量级框架。

以下结合应用实例帮助大家理解:

实体类:

import java.util.Date;
public class User { private String id;
private String username;
private String userpassword;
private String createTime;
private String expireTime; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String name) {
this.username = name;
}
public String getUserpassword() {
return userpassword;
}
public void setUserpassword(String password) {
this.userpassword = password;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
}

创建hibernate映射文件User.hbm.xml

映射文件告诉Hibernate它应该訪问数据库里面的哪个表(table)和应该使用表里面的哪些字段(column)。

由于这里仅仅有一个Class ---User和一个Table --- t_user,你仅仅须要建立一个映射文件---User.hbm.xml,来相应User类和t_user表之间的关系。

<hibernate-mapping package="com.bjpowernode.hibernate">
<class name="User" table="t_user">
<id name="id">
<generator class="uuid"></generator>
</id>
<property name="username"></property>
<property name="userpassword"></property>
<property name="createTime"></property>
<property name="expireTime"></property>
</class> </hibernate-mapping>

配置Hibernate描写叙述文件hibernate.cfg.xml

Hibernate描写叙述文件能够是一个properties或xml文件,当中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描写叙述文件。

<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">hejingyuan</property>
<!-- 方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show.sql">true</property>
<property name="hibernate.show.format_sql">true</property>
<!-- 指定User的映射文件 -->
<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

生成表方法

/**
* 将hbm生成ddl
* @author Administrator
*
*/
public class ExportDB { public static void main(String[] args) {
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}

加入用户

public static void main(String[] args) {
//读取hibernate.cfg.xml文件--缺省默认文件,假设仅仅new的话。会读取porperties
Configuration cfg=new Configuration().configure(); //建立SessionFactory,线程安全的。最好一个数据库创建一次
SessionFactory factory=cfg.buildSessionFactory(); //取得Session,真正要用的时候才去关联connection,这个connection与我们之前学的不同,称为持久化管理器
Session session=null;
try{
session=factory.openSession();
//开启事务
session.beginTransaction();
User user=new User();
user.setUsername("张三");
user.setUserpassword("123");
user.setCreateTime(new Date().toString());
user.setExpireTime(new Date().toString()); //保存User对象
session.save(user);
//提交事务
session.getTransaction().commit(); }catch(Exception e){
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
//关闭session
session.close();
}
}
} }

总结:

千里之行始于足下,这篇文章仅是迈向Hibernate大道的一个起点。以上仅仅是简介了Hibernate解决的问题。事实上Hibernate就是一个转换器。完毕对象实例与数据库表的转换,对JDBC訪问数据库的代码进行封装。简化了数据訪问层繁琐的反复性代码。

下篇继续!

【SSH 基础】浅谈Hibernate--入门篇的更多相关文章

  1. 浅谈Hibernate入门

    前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hiberna ...

  2. 浅谈hibernate+入门实例

    Hibernate是对jdbc进一步的封装,随着项目的开展,小编开始接触到这个概念,一开始接触的时候并没有觉得hibernate有多神秘,没有进一步的研究,只是简单的知道她是对jdbc的进一步的封装, ...

  3. C#核心基础--浅谈类和对象的概念

    浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...

  4. 动静结合?Ruby 和 Java 的基础语法比较(入门篇)

    前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...

  5. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. 【SSH 基础】浅谈Hibernate关系映射(4)

    继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...

  7. 【SSH 基础】浅谈Hibernate关系映射(3)

    继上篇博客 一对多关联映射(单向) 上面我们介绍了多对一,我们反过来看一对多不就是多对一吗?那还用再进行不同的映射吗?有什么区别吗?一对多和多对一映射原理是一致的,存储是同样的.也就是生成的数据库的表 ...

  8. salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇

    上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...

  9. salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇

    我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...

随机推荐

  1. bat 时间 的运算与提取

    比如在系统中date这个环境变量的值为 -- 星期六 年------%date:~,% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2011 月------%date:~ ...

  2. Django 外键ForeignKey中的on_delete

    当你在Django中删除了一个有着外键关联的数据时,比如一个作者和他名下的所有的书的信息,书的外键是作者(一个作者可有好多本书),当你把作者的信息从数据库中删除时,Django提供了一下几个参数来对作 ...

  3. install docker on centos7

    copy from:https://www.youtube.com/watch?v=pm55BUwQ0iE # Prerequisites - Kernel must be 3.10 at minim ...

  4. python 3 廖雪峰博客笔记(一) python特性

    python 是一种解释性语言,代码在执行时会一行一行翻译成CPU能理解的机器语言. python 的特点是简单优雅. python 的优点是 代码优雅 基础代码库丰富,包括网络.文件.GUI.数据库 ...

  5. CF792E Colored Balls

    题目大意:将n个数分解成若干组,如4 = 2+2, 7 = 2+2+3,保证所有组中数字之差<=1. 首先我们能想到找一个最小值x,然后从x+1到1枚举并check,找到了就输出.这是40分做法 ...

  6. mysql通配符进行模糊查询

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...

  7. 第二次:Ubuntu16.04 安装Docker

    sudo apt-get update, 就这一个命令执行了多半天,不知道网络缘故还是怎么的,管他呢,装完总是好的. # step 1: 安装必要的一些系统工具 sudo apt-get update ...

  8. Codeforces Beta Round #19D(Points)线段树

    D. Points time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  9. Codeforces Round #413 B T-shirt buying (STL set)

    链接:http://codeforces.com/contest/799/problem/B 题意: 给定n件衣服,对于第i(1<i<=n)件衣服,分别有价格pi,前颜色ai,后颜色bi三 ...

  10. Python基础之列表、元组、字典、集合的使用

    一.列表 1.列表定义 names=["Jhon","Lucy","Michel","Tom","Wiliam ...