【SSH 基础】浅谈Hibernate--入门篇
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--入门篇的更多相关文章
- 浅谈Hibernate入门
前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hiberna ...
- 浅谈hibernate+入门实例
Hibernate是对jdbc进一步的封装,随着项目的开展,小编开始接触到这个概念,一开始接触的时候并没有觉得hibernate有多神秘,没有进一步的研究,只是简单的知道她是对jdbc的进一步的封装, ...
- C#核心基础--浅谈类和对象的概念
浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...
- 动静结合?Ruby 和 Java 的基础语法比较(入门篇)
前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...
- 【推荐】JAVA基础◆浅谈3DES加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 【SSH 基础】浅谈Hibernate关系映射(4)
继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...
- 【SSH 基础】浅谈Hibernate关系映射(3)
继上篇博客 一对多关联映射(单向) 上面我们介绍了多对一,我们反过来看一对多不就是多对一吗?那还用再进行不同的映射吗?有什么区别吗?一对多和多对一映射原理是一致的,存储是同样的.也就是生成的数据库的表 ...
- salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇
上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...
- salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇
我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...
随机推荐
- Apache与IIS端口冲突解决方法
在安装Apache或者php集成环境包是经常会遇到Apache的80端口被占用导致无法正常启动Apache. Win7可以通过如下方法解决(如果坚持要使用80端口的话): 1.打开"控制面板 ...
- 迅为IMX6UL开发板
迅为iMX6UL开发板采用核心板加底板形式,核心板使用邮票孔方式连接,牢固耐用.处理器ARM®Cortex®-A7内核,运行速度高达528 MHz.512MDDR内存,8G EMMC存储,板截双网口, ...
- 使用VS Code调试Flutter(检查用户页面)
官方提供的是Flutter Widget Inspector,详见https://flutterchina.club/inspector/ 我用的是另外一种好用的调试工具 Dart DevTools ...
- CAD参数绘制圆弧(com接口)
在CAD设计时,需要绘制圆弧,用户可以在图面点圆弧起点,圆弧上的一点和圆弧的终点,这样就绘制出圆弧. 主要用到函数说明: _DMxDrawX::DrawArc2 由圆弧上的三点绘制一个圆弧.详细说明如 ...
- CAD参数绘制文字(网页版)
在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOUBLE dPosX ...
- torch.nn.Linear()函数的理解
import torch x = torch.randn(128, 20) # 输入的维度是(128,20)m = torch.nn.Linear(20, 30) # 20,30是指维度output ...
- 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】
对于不会树套树.主席树的本蒟蒻,还是老老实实的用莫队做吧.... 其实这题跟普通莫队差不了多远,无非就是有了一个时间,当我们按正常流程排完序后,按照基本的莫队来,做莫队时每次循环对于这一次操作,我们在 ...
- [Algorithm] 1. A+B Problem
Description Write a function that add two numbers A and B. Clarification Are a and b both 32-bit int ...
- 【转】vfork 和 fork的区别
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 ...
- Codeforces450 B. Jzzhu and Sequences
B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...