hibernate简单入门教程(一)---------基本配置
应用级别所以很粗浅
首先介绍一下hibernate框架:
1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架。
2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储
3.高度整合jdbc,简化了很多jdbc的操作。比如查询,比如存储
4.二级缓存。缓存一部分所查询的数据,方便随时调用,大大的减少了数据库查询。
5.ORM(Object/Rational Mapping)关系映射工具。对象关系映射把数据表的操作简化为对于对象的操作,让面向对象思维更加实际。
然后开始正式部署。部署之前首先调用jar包
除了以上的包还需要jdbc的所有包。这上面只是hibernate的包
(1)导入以上jar包
(2)在src下创建并编写Hibernate主配置文件 用于初始化hibernate需要用的信息。这个文件可以放在src下,也可以放在classes下。命名为hibernate.cfg.xml
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!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="connection.driver_class"></property>
<!--数据库路径 -->
<property name="connection.url"></property>
<!--数据库用户名 -->
<property name="connection.username"></property>
<!--数据库密码 -->
<property name="connection.password"></property>
<!--方言,便于hibernate对象操作转化为合适的数据库语句 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--是否显示sql语句,sql一般会很难看 默认为false-->
<property name="hibernate.show_sql">true</property>
<!--下一个层级的映射文件,用来配置bean对象与数据表之间的关系 -->
<mapping resource="com/dhh/pojo/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(3)在某个目录下创建映射文件,这就是上一步提到的Person.hbm.xml。一般跟bean放在同一个目录下,接受hibernate.cfg.xml管理的对象与数据表的关系中间件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 注意包名。不写的话下面要写全限定名 -->
<hibernate-mapping package="com.dhh.pojo">
<!-- 类名对应表名 -->
<class name="Person" table="person">
<!-- 主键使用id标签。然后对应属性名与列名 -->
<id name="id" type="int" column="id">
<!-- 自增长主键不同数据库有不同类型的自增长类型,有需要可以百度到答案的 -->
<generator class="identity"></generator>
</id>
<!-- 非主键映射关系,注意类型并不是单纯的java类型也不是数据库类型,而是一种中间类型,注意大小写特别是String在这里开头要小写 -->
<property name="name" type="string" column="name"></property>
<property name="age" type="int" column="age"></property>
<property name="address" type="string" column="address"></property>
</class>
</hibernate-mapping>
上面所说的主键自增长类型可参考下表
中间类型参考下表
(4)运行方式。
package com.dhh.Util; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; public class Util {
public static Configuration cfg;
public static SessionFactory sessionFactory;
static{
//启动原本设定好的配置管理文件
cfg=new Configuration().configure();
//建立会话工厂用来产生会话,工厂可以只有一个
sessionFactory=cfg.buildSessionFactory();
}
public static Session openSesson(){
return sessionFactory.openSession();
}
public static Transaction beginTransaction(Session session){
return session.beginTransaction();
} }
下面介绍一下一上的类与接口。
1)Configuration类
Configuration 类负责读取主配置文件的信息。包括如下内容:
Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
持久化类与数据表的映射关系(*.hbm.xml 文件)
加载Xml文件(hibernate.cfg.xml)创建对象方式
Configuration cfg = new Configuration().configure();
2)SessionFactory接口
Configuration对象根据当前的配置信息生成 SessionFactory 对象,因此SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
获取SessionFactory的方式:
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
SessionFactory作用:是生成Session的工厂
Session session = sf.openSession();
Session接口
Session接口:是应用程序与数据库之间交互操作的核心对象,是 Hibernate 运作的中心,所有持久化对象(javabean)必须在 session 的管理下才可以进行持久化(更新数据库)操作。
获取Session对象的方式:
Session session = sessionFactory.openSession();
Session的主要方法简介:
取得持久化对象的方法: get() load()
持久化对象保存,更新和删除:save(),update(),saveOrUpdate(),delete()
开启事务: beginTransaction().
管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等
4)Transaction接口
代表一次数据库访问的最小操作,具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。
获取Transaction对象的方式:
Transaction tx =session.beginTransaction();
常用方法:
commit():提交相关联的session实例
rollback():撤销事务操作
wasCommitted():检查事务是否提交
5)Query接口
Query接口 :封装数据库查询的返回结果(hql的查询方式)
获取Query对象的方式:
Query query = session.createQuery(“hql");
常用方法
Iterator():获取查询结果的迭代器对象(只查询主键,返回)
list():以集合的方式获取查询结果
(5)执行原理与流程
a、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,
b、并用这些信息生成一个SessionFactory对象,
c、然后从SessionFactory对象生成一个Session对象,
d、并用Session对象生成Transaction对象;
e、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()、createQuery()等方法对进行CURD等操作;
f、提交事物。
hibernate简单入门教程(一)---------基本配置的更多相关文章
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- Flyway 简单入门教程
原文地址:Flyway 简单入门教程 博客地址:http://www.extlight.com 一.前言 Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway 可以 ...
- NumPy简单入门教程
# NumPy简单入门教程 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组.它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体 ...
- 【hibernate】<第一节>hibernate简单入门
所需工具: ide:eclipse or myeclipse jdk:1.7 jar包:hibernate-distribution-3.6.0.Final 和对应mysql的驱动类(对应jar包如图 ...
- Linux pwn入门教程(0)——环境配置
作者:Tangerine@SAINTSEC 0×00前言 作为一个毕业一年多的辣鸡CTF选手,一直苦于pwn题目的入门难,入了门更难的问题.本来网上关于pwn的资料就比较零散,而且经常会碰到师傅们堪比 ...
- 框架之 hibernate简单入门
hibernate框架的搭建 Hibernate框架的概述 1. Hibernate框架的概述 * Hibernate称为 * Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JD ...
- Spring Cloud 入门教程(三): 配置自动刷新
之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Server也不行. 比如上一单元(Spring Cloud ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
随机推荐
- 浏览器缓存如何控制? && 在url框中回车、F5 和 Ctrl + F5的区别是什么?
第一部分: 浏览器缓存如何控制? 最近在做网站,但是不知道缓存是什么东西怎么能行! 如何实现HTTP缓存呢? 下面我们来一步一步的探寻实现机制把. 方案一: 无缓存 说明: 浏览器向服务器请求 ...
- Java调用C函数
一.关于JNI JNI( Java Native Interface )主要是实现Java和C/C++语言之间的通信. Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOW ...
- Nginx 反向代理(http转htpps,并支持80端口继续提交post请求)
项目是一个web server + 多个client的形式,client由用户安装在自己的电脑上 由http升级为https后,我们通过在Nginx做了80端口重定向443的配置,使用户通过访问htt ...
- *2_3_5_加入reference model
摘自:http://book.2cto.com/201408/46009.html 在2.1节中讲述验证平台的框图时曾经说过,reference model用于完成和DUT相同的功能. referen ...
- 【LeetCode题解】94_二叉树的中序遍历
目录 [LeetCode题解]94_二叉树的中序遍历 描述 方法一:递归 Java 代码 Python代码 方法二:非递归 Java 代码 Python 代码 [LeetCode题解]94_二叉树的中 ...
- IOS折线图二
上周把项目的折线图给做了下,今天想着把它完善完善,自己设置了不同的数据源来测试,哈哈,还真遇到问题了, 就是给图表设置折点数为0时,视图显示的还是原来的,由于数据为空,应该将其设置为空,所以想着怎么把 ...
- 学会了ES6,就不会写出那样的代码
用let不用var ES6之前我们用var声明一个变量,但是它有很多弊病: 因为没有块级作用域,很容易声明全局变量 变量提升 可以重复声明 还记得这道面试题吗? var a = []; for (va ...
- MUI框架 picker日期选择器实例
MUI官方文档点我 (一)准备工作,下载相关的js.cs文件,地址 (二)新建普通html页面 1)引入相关js.cs文件 2) 一个input,记录下id: <form> <lab ...
- Java - 关于泛型
自Java 1.5开始使用的泛型,泛型给人比较直观的印象是..."尖括号里写了类型我就不用检查类型也不用强转了". 确实,那先从API的使用者的角度上想问题,泛型还有什么意义? D ...
- 基于easyUI实现登录界面
此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 准备工作 1. 点击此下载相关文件,并把文件放到 ims 工程对应的文件夹下 二. 相关文件介绍 1. login.jsp: ...