Hibernate 框架入门
接着上一篇的 Hibernate 框架的了解,我们就继续学习 Hibernate 框架。这次就进入 Hibernate 框架的入门学习。
首先在学习 Hibernate 框架之前,我们要准备好我们需要的 jar 包。
下载 Hibernate 框架的 jar 链接: http://hibernate.org/
我是下载的是:
解压后可以看到其目录是:
documentation:存放 Hibernate 的相关文件与 API 。
lib:存放 Hibernate 编译和运行所依赖的 jar 包, 其中 required 子目录下包含了运行 Hibernate 项目必须的 jar 包。
project:存放 Hibernate 各种相关的源代码与资源, project 目录下的 etc 目录非常重要,它里面有一些关于 Hibernate 的配置信息。
Hibernate 快速入门
使用 Hibernate 框架的三大步骤:
引入 jar 开发包
配置相关的 xml 文件
熟悉 API
引入相关的 jar 包
在项目中引入 Hibernate 必须的 jar 包 和 数据库驱动包。如下图:
Hibernate 配置文件编写
Hibernate 通过读取默认的 XML 配置文件 hibernate.cfg.xml 加载数据库的配置信息,该默认文件默认存储于项目的 classpath 根目录下。
首先来看一下连接 Mysql 数据库所用的 XML 配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory> <!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 数据库url -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/hibernate
</property>
<!-- 数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="hibernate.connection.password">111</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>
<!-- ## auto schema export 自动导出表结构. 自动建表
#hibernate.hbm2ddl.auto create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
#hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
#hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败. -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 引入元数据 -->
<mapping resource="cn/itheima/domain/Customer.hbm.xml" /> </session-factory>
</hibernate-configuration>
hibernate.cfg.xml 文件的根元素为 <hibernate-configuration> ,每一个 <session-factory> 元素可以有多个 <property> 和 <mapping> 子元素,通常情况下 <session-factory> 只有一个, 每一个 <session-factory> 对应一个数据库; <property> 元素用来配置 Hibernate 属性信息; <mapping> 元素用来配置持久化类映射文件的相对路径。
<property> 元素的常用属性及说明:
属性 | 说明 |
hibernate.connection.driver_class |
设置数据库驱动 |
hibernate.connection.url |
设置数据库连接的 URL |
hibernate.connection.username |
设置连接数据库所使用的用户名 |
hibernate.connection.password |
设置连接数据库所使用的密码 |
hibernate.dialect |
设置连接数据库所使用的 Hibernate 方言 |
hibernate.show_sql |
是否打印 SQL 语句 |
hibernate.format_sql |
设置是否对 SQL 语句进行格式化 |
hibernate.hbm2ddl.auto |
设置自动建表 |
编写持久化类
对象 - 关系映射 ( ORM ) 是 Hibernate 的基础。 在 Hibernate 中, 持久化类是 Hibernate 操作的对象,它与数据库中的数据表相对应。在持久化类中,其属性信息与数据表中的字段相匹配。
下面看一个简单的持久化类:
package cn.hhh.domain; public class Customer { private Long cust_id;
private String cust_name;
private String cust_phone; public Customer() {
super();
}
public Customer(Long cust_id, String cust_name) {
super();
this.cust_id = cust_id;
this.cust_name = cust_name;
}
public Long getCust_id() {
return cust_id;
}
public void setCust_id(Long cust_id) {
this.cust_id = cust_id;
}
public String getCust_name() {
return cust_name;
}
public void setCust_name(String cust_name) {
this.cust_name = cust_name;
}
public String getCust_phone() {
return cust_phone;
}
public void setCust_phone(String cust_phone) {
this.cust_phone = cust_phone;
} @Override
public String toString() {
return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]";
} }
Customer 类为持久化类,此类中定义了用户的基本属性,并提供了相应的 getXXX() 与 setXXX() 方法。持久化类遵循 JavaBean 命名约定。由于持久化类只是一个普通的类,并没有特殊的功能,也就是说它不依赖任何对象( 没有实现任何接口,也没有继承任何类 ),又被称为 POJO 类。
Hibernate 编写持久化类的注意事项:
1、声明一个默认的、无参的构造方法。 Hibernate 在创建持久化类时, 通过默认且没有参数的构造方法进行实例化,所以必须要提供一个无参的构造方法。
2、类的声明是非 final 类型的。如果 Hibernate 的持久化类声明为 final 类型,那么将不能使用延迟加载等设置,因为 Hibernate 的延迟加载通过代理实现;它要求持久化类非 final 的。
3、拥有一个标识属性。标识属性通常对应数据表中的主键。此属性是可选的。为了更好地使用 Hibernate ,推荐加入此属性。
4、为属性声明访问器。 Hibernate 在加载持久化类时,需要对其进行创建并赋值,所以在持久化类中属性声明 getXXX() 与 setXXX() 方法,这些方法为 public 类型。
编写持久化类对应的映射文件
Hibernate 的映射文件与持久化类相互对应,映射文件指定持久化类与数据表之间的映射关系,如数据表的主键生成策略、字段的类型、一对一关联关系等。它与持久化类的关系密切,两者之间相互关联。在 Hibernate 中,映射文件的类型为 .xml 格式,其命名格式规范为 “ 持久化类名.hbm.xml ”。
创建 Customer 持久化类的映射文件,其命名为 Customer.hbm.xml 。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hhh.domain">
<class name="Customer" table="cst_customer" >
<id name="cust_id">
<generator class="native" />
</id>
<property column="cust_name" name="cust_name" />
<property column="cust_phone" name="cust_phone" />
</class>
</hibernate-mapping>
<hibernate-mapping> 元素:是 Hibernate 映射文件的根元素,其他元素嵌入在 <hibernate-mapping> 元素内,其常用属性主要有 package 属性,用于指定的包名。
<class> 元素:用于指定持久化类和数据表的映射。 其 name 属性指定持久化类的完整类名; table 属性指定数据库中对应的数据表的表名,如果不指定 table 属性, Hibernate 将使用类名作为表名。
在 <class> 元素中包含一个 <id> 元素及多个 <property> 元素,其中 <id> 元素对应数据表中的标识,指定持久化类的 OID 和表的主键的映射; <property> 元素描述数据表中的字段属性。
<id> 元素:通过 name 属性指定持久化类中的属性,设置数据表中的主键。其子元素 <generator> 元素用于配置数据表主键的生成策略。其主键生成策略说明如下表:
标识生成策略 | 说明 |
identity | 主键自增。由数据库来维护主键值。录入时不需要指定主键。 |
increment | 主键自增。由hibernate来维护。每次插入前会先查询表中id最大值,+1作为新主键值。 |
sequence | Oracle中的主键生成策略。 |
hilo | 高低位算法。主键自增。由hibernate来维护。开发时不使用。 |
native | hilo+sequence+identity 自动三选一 |
uuid | 产生随机字符串作为主键。主键类型必须为String类型 。 |
assigned | 自然主键生成策略。由 Java 应用程序负责生成。 |
<property> 元素:用于配置数据表中字段的属性信息。常用配置属性及说明如下表:
属性名称 | 说明 |
name | 指定持久化类中的属性名称 |
column | 指定数据表中的字段名称 |
type | 指定数据表中的字段类型 |
not-null | 指定数据表字段的非空属性,它是一个布尔值 |
length | 指定数据表中的字段长度 |
unique | 指定数据表中字段值是否唯一,它是一个布尔值 |
lazy | 设置延迟加载 |
在实际开发过程中,可以省略 column 及 type 属性的配置,在尚未配置它们的情况下, Hibernate 默认使用持久化类中的属性名及属性类型去映射数据表中的字段名和类型。
编写 Hibernate 的初始化类
Hibernate 的运行离不开 Session 对象, 对于数据的增、删、改、查都要用到 Session , 而 Session 对象依赖于 SessionFactory 对象,它需要通过 SessionFactory 进行获取。
下面测试一个例子,保存一个客户到数据库中去。
package cn.hhh.test;
public class DemoTest {
@Test
//保存客户
public void test() {
Configuration cfg = new Configuration().configure();//加载 Hibernate 配置文件
SessionFactory sf = cfg.buildSessionFactory();//创建SessionFactory 对象
Session session = sf.openSession();//获取 session
Transaction tx = session.beginTransaction();//打开事务
Customer c = new Customer();
c.setCust_name("小明");
c.setCust_phone("12345678910");
session.save(c);
tx.commit();
session.close();
}
}
这就是使用 Hibernate 框架保存的例子。
根据 id 查询一个客户的测试例子:
package cn.hhh.test;
public class DemoTest {
@Test
//保存客户
public void test() {
Configuration cfg = new Configuration().configure();//加载 Hibernate 配置文件
SessionFactory sf = cfg.buildSessionFactory();//创建SessionFactory 对象
Session session = sf.openSession();//获取 session
Transaction tx = session.beginTransaction();//打开事务
Customer c = new Customer();
Customer c = session.get(Customer.class , 1L );//查询客户
System.out.println(c);
tx.commit();
session.close();
}
}
编写通用的工具类,代码如下:
package cn.hhh.utils; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils { private static Configuration cfg;
private static SessionFactory factory; static{
cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
} public static Session openSession(){
Session session = factory.openSession();
return session;
} public static Session getCurrentSession(){
Session session = factory.getCurrentSession();
return session;
}
}
这里面都是使用 Hibernate 最基本的操作。要掌握好。 特别是 怎么配置,怎么编写持久化类。下一篇文章就让我们继续深入了解 Hibernate 的其他功能和其他操作。
Hibernate 框架入门的更多相关文章
- Hibernate框架入门
导读 本文主要介绍hibernate的入门,主要包括以下内容:hibernate介绍.hibernate环境搭建.hibernate简单测试.测试涉及的api详解. 一.hibernate介绍 JDB ...
- Hibernate 框架入门(一)
1. SSH Web 层: Struts2 业务层: Spring 持久层: Hibernate 2. Hibernate 概述 概述 Hibernate 是一个对象关系映射框架(ORM 框架); 对 ...
- hibernate框架入门配置
1.新建一个项目(可以是java项目,也可以是webapp) 2.导入jar包,包括日志,mysql驱动,必备request包,jpa配置规范包 3.创建实体类 1.创建数据库,使用hibernate ...
- Hibernate框架之入门
1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...
- Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis
https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...
- 框架之 hibernate简单入门
hibernate框架的搭建 Hibernate框架的概述 1. Hibernate框架的概述 * Hibernate称为 * Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JD ...
- Hibernate入门第一讲——Hibernate框架的快速入门
Hibernate框架的概述 什么是框架? 框架指的是软件的半成品,已经完成了部分功能. JavaEE开发的三层架构 了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经 ...
- Hibernate框架之入门案例
今天终于开始学习了三大框架的其中一个框架,Hibernate框架,在这里不去讲Hibernate框架的一些基础概念了,直接切入代码,带大家了解一下Hibernate能干什么, Hibernate的人们 ...
- java三大框架之一hibernate使用入门
综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包 ...
随机推荐
- GO富集分析示例【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- vue-socket.io使用教程与踩坑记录
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/12018866.html,多谢,=.=~ (如果对你有帮助的话请帮我点个赞啦) 请先允许我狠狠吐个 ...
- Oracle触发器用法--基础教学
1.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- vue反向代理(解决跨域)
1,vue中有提供反向代理的接口,就是config/index.js中的proxyTable,我的脚手架版本是2.9.6,proxyTable配置初始为空,如下图. 2,将proxyTable配置如下 ...
- mybatis错题
第一题 解析: MyBatis的动态SQL中没有else元素,when元素的test属性中直接书写表达式即可,即test=”表达式”. 第二题 解析: resource属性和url属性是必须的属性,但 ...
- 开通博客第一天,记录此时此刻,开始学习加强c#
从2017年6月毕业到现在,不断的学习.net,在工作中不断的加强技术,终于在此时此刻决定开通博客,记录此后每一天学习的技术点,两年来,每天所涉及的技术点很杂,学了这个忘了那个,总感觉在进步却总是觉得 ...
- DWVA-关于SQL注入的漏洞详解
low等级 代码如下: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; // ...
- Linux-(3)Linux Shell 使用
三.Linux Shell 3.1 文件管理 3.1.1 ls 命令 显示指定工作目录下的内容及属性信息 ls 命令是Linux下最常用的指令之一.ls命令为英文单词 list 的缩写,正如英文单词 ...
- art-template与swiper发生冲突导致swiper的一些样式不起作用
我们在实际中的前后端分离开发中,在进行渲染后端返回来的数据时我们有时会用到模板来进行渲染数据,而在渲染数据中我们可能用到一些组件来进行一些样式显示.而在页面中数据显示了导致组件的一些样式没有显示,一些 ...
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...