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. 大写URL转小写

    添加LowercaseRoutesMVC.dll引用.通过“管理—NuGet程序包”搜索LowercaseRoutesMVC,然后点击安装.安装成功后会自动引用LowercaseRoutesMVC.d ...

  2. java_线程优先级

    线程优先级分为三个等级: MAX_PIORITY:10  优先 MIN_PRIORITY:1 NORM_PRIORITY:5  默认 getPriority:获取优先级 setPriority:设置优 ...

  3. linux内核中GNU C和标准C的区别

    linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...

  4. 第3节 mapreduce高级:2、3、课程大纲&共同好友求取步骤一、二

    第五天课程大纲:1.社交粉丝的数据分析:求共同好友2.倒排索引的建立3.自定义inputFormat合并小文件 4.自定义outputformat5.分组求topN6.MapReduce的其他补充 了 ...

  5. 无法完成安装:'Cannot access storage file '/

    今天自己编译了spice-protocol spice-gtk spice qemu,然后想用virsh去创建一个虚机: # virsh define demo.xml     定义域 demo(从 ...

  6. switch、try-catch

    记录 1. 使用对象代替 switch 和 if-else 2. 根据返回数据是否能转成对象,取值 如果返回是数字字符串,直接返回,如果返回是对象,取对应的key值,再返回 其它情况,返回空 {{ o ...

  7. jsMap地图网点

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...

  8. 基于js插件的文件上传

    <?php /** * Created by PhpStorm. * User: GyCCo. * Date: 05/02/2018 * Time: 4:46 PM */ session_sta ...

  9. 排序算法小结:C++实现

    #include<vector> #include<iostream> //排序算法的稳定性:对于相同的关键字,排序之前的位置和排序之后的位置相同,则称为稳定排序,否则不稳定排 ...

  10. composer install提示需要输入账号解决方法

    1.问题描述:输入composer install提示需要输入账号,如下所示: 2.解决方法,改用社区的源:composer config -g repo.packagist composer htt ...