【SSH框架】之Hibernate系列一
微信公众号:compassblog
欢迎关注、转发,互相学习,共同进步!
有任何问题,请后台留言联系!
1、Hibernate框架概述
(1)、什么是Hibernate
Hibernate是一个开放源代码的 ORM 框架,是主流的Java持久层框架之一,它对 JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
(2)、Hibernate在三层架构中的位置
上篇文章所讲的Struts2框架取代的是三层框架中的web层,而Hibernate框架取代的则是dao层,具体描述如下图:
(3)、什么是ORM
ORM(Object Relational Mapping),即对象关系映射,就是利用描述对象和数据库表之间映射的元数据,自动把Java应用程序中的对象,持久化到关系型数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。可以把 ORM 理解为关系型数据和对象的一个纽带,开发人员只需要关注纽带一端映射的对象即可。ORM 实现原理如下图:
(4)、Hibernate框架的优势与功能
- Hlbernate对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率。
- Hlbernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO (DataAccess Object,数据访问对象)层编码工作。操作数据库的时候,可以以面向对象的方式来完成,不再需要书写SQL语句。
- Hlbernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。
- 可扩展性强,由于源代码的开源以及API的开放,当本身功能不够用时,可以自行编码进行扩展。
2、搭建Hibernate框架,完成第一个应用实例
(1)、创建一个web项目,导入所需要的jar包,包括数据库驱动包,如下图所示:
(2)、创建数据库demo_project和表user,建表语句如下:
创建数据库demo_project语句:
create database demo_project;
常见表user语句:
CREATE TABLE `user` (
`id` int(10) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`height` int(11) DEFAULT NULL,
`weight` double(10,0) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)、创建实体User.java,具体代码如下:
User.java
package com.hibernate.demo;
public class User {
//基本属性
private int id;
private String name;
private int age;
private int height;
private int weight;
//setter和getter方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
(4)、导入约束,在与实体同一个包下新建ORM配置文件User.hbm.xml,书写ORM元数据,具体配置代码如下:
User.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="com.hibernate.domain" >
<class name="User" table="user" >
<id name="id" >
<generator class="native"></generator>
</id>
<property name="name" column="name" ></property>
<property name="age" column="age" ></property>
<property name="height" column="height" ></property>
<property name="weight" column="weight" ></property>
</class>
</hibernate-mapping>
(5)、在src下新建hibernate.cfg.xml主配置文件,具体配置代码如下:
hibernate.cfg.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:///demo_project</property>
<!-- 数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 引入orm元数据 -->
<mapping resource="com/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
(6)、新建测试类TestDemo.java,书写测试代码,具体如下:
TestDemo.java
package com.hibernate.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.hibernate.domain.User;
//测试Hibernate框架
public class TestDemo {
@Test
//插入信息
public void test(){
Configuration conf = new Configuration().configure();
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//保存信息
User u = new User();
u.setName("孔乙己");
u.setAge(22);
u.setHeight(172);
u.setWeight(120);
session.save(u);
tx.commit();
session.close();
sessionFactory.close();
}
}
(7)、使用JUnit测试运行,信息插入成功,具体结果如下图:
本项目运行环境:jdk1.7、Tomcat7.0
3、Hibernate配置文件详解
(1)、orm元数据配置详解:
package
<!-- package属性:填写一个包名,在元素内部凡是需要书写完整类名的属性,就可以直接写简答类名 -->
<hibernate-mapping package="com.hibernate.domain" >
class
<!--
class元素: 配置实体与表的对应关系的
name: 完整类名
table:数据库表名
-->
<class name="User" table="user" >
id
<!-- id元素:配置主键映射的属性
name: 填写主键对应属性名
column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
每个类型有三种填法: java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空. 默认值:false
length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
-->
<id name="id" >
<!-- generator:主键生成策略 -->
<generator class="native"></generator>
</id>
property
<!-- property元素:除id之外的普通属性映射
name: 填写属性名
column(可选): 填写列名
type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
每个类型有三种填法: java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空. 默认值:false
length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
-->
<property name="name" column="name" >
<!-- <column name="cust_name" sql-type="varchar" ></column> -->
</property>
<property name="age" column="age" ></property>
<property name="height" column="height" ></property>
<property name="weight" column="weight" ></property>
(2)、Hibernate主配置文件详解:
必选配置
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库url -->
<property name="hibernate.connection.url">jdbc:mysql:///demo_project</property>
<!-- 数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
可选配置
<!-- #hibernate.show_sql true
#hibernate.format_sql true
-->
<!-- 将hibernate生成的sql语句打印到控制台 -->
<property name="hibernate.show_sql">true</property>
<!-- 将hibernate生成的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>
引入orm元数据配置
<!-- 引入orm元数据
路径书写: 填写src下的路径
-->
<mapping resource="com/hibernate/domain/User.hbm.xml" />
关注微信公众号compassblog,后台回复 “Hibernate系列一” 获取本项目源码
原文链接:https://mp.weixin.qq.com/s?__biz=MzU5MTE0ODcwNQ==&mid=2247483975&idx=1&sn=24f28cdc3399c0d295a5ceb209383e10&chksm=fe322189c945a89f0c2723de0c7c1ef48cbd218e14ed2c8ea0a9c7c4da241737011bc7cf66d7#rd
本系列后期仍会持续更新,欢迎关注!
如果你认为这篇文章有用,欢迎转发分享给你的好友!
本号文章可以任意转载,转载请注明出处!
扫码关注微信公众号,了解更多
【SSH框架】之Hibernate系列一的更多相关文章
- SSH框架中hibernate 出现 user is not mapped 问题
SSH框架中hibernate 出现 user is not mapped 问题 在做SSH框架整合时,在进行DAO操作时.这里就只调用了chekUser()方法.运行时报 user is ...
- SSH框架之-hibernate 三种状态的转换
一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...
- SSH框架之hibernate《四》
hibernate第四天 一.JPA相关概念 1.1JPA概述 全称是:Java Persistence API.是sun公司推出的一套基于ORM的规范 ...
- SSH框架之hibernate《三》
Hibernate03 一.多表设计 1.1多表设计的总则 问题:我们为什么要学习多表映射? 答: ...
- SSH框架之hibernate《二》
Hibernate第二天 一.hibernate的持久化类和对象标识符 1.1持久化类的编写规范 1.1.1什么是持久化类: ...
- SSH框架之Hibernate《一》
hibernate的基础入门 一:hibernate和ORM的概念部分 1.1hibernate概述: Hibernate框架是当今主流的Java持久层框架之一 ...
- SSH框架之Hibernate第四篇
Hibernate中有两套实现数据库数据操作的方式 : hibernate前3天讲解的都是 : hibernate自己的操作方式(纯XML配置文件的方式) 另一种方式是基于JPA的操作方式(通过注解的 ...
- SSH框架之Hibernate第二篇
1.1 持久化类的编写规则 1.1.1 什么是持久化类? 持久化类 : 与表建立了映射关系的实体类,就可以称之为持久化类. 持久化类 = Java类 + 映射文件. 1.1.2 持久化类的编写规则 ( ...
- SSH框架之Hibernate第一篇
1.2Hibernate的概述: 1.2.1 什么Hibernate? Hibernate(开发源代码的对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它 ...
- SSH框架之Hibernate(1)——映射关系
ORM的实现思想就是将关系数据库中表的数据映射成对象.以对象的形式展现,这样开发者就能够把对数据库的操作转化为对这些对象的操作.Hibernate正是实现了这样的思想,达到了方便开发者以面向对象的思想 ...
随机推荐
- ZipKin的原理的介绍
结构概述 跟踪器(Tracers)存在在你的应用程序中生存,记录时间和关于操作的元数据.他们经常使用库,因此他们的使用对用户是透明的.例如,当它收到一个请求并发送一个响应时,一个感应器(i ...
- 初识RabbitMQ,附RabbitMQ+PHP演示实例
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- webzip怎么用 如何用webzip下载整个网站?
相信很多站长对webzip这款软件都并不感到陌生,它功能强大,能够完整下载网站的内容,或者你也可以选择自行设置下载的层数.文件类型.网页与媒体文件的定位等等.具体详情你可以在百度上去搜一下.由于web ...
- Spring测试框架JUnit4.4 还蛮详细的
TestContext 可以运行在 JUnit 3.8.JUnit 4.4.TestNG 等测试框架下. Spring的版本2.5+JUnit4.4+log4j1.2.12 @RunWith(Spri ...
- oracle03
(1)表中数据操作 插入数据: a.插入单条 insert into myemp(empno,ename) values(1111,'张三'); b.批量插入 insert into myemp se ...
- shopnc验证码显示不了
data/config文件编码问题,要utf-8无bom
- redis 安装实战(10步完成安装)
1 下载zip :https://redis.io/download ---->redis-4.0.6 2 上传:利用wcp 上传到/usr/local/soft/ 3 解压:tar -zv ...
- 通过psping测试结果,初步判断远端服务器的状态
1.psping的输出结果为如下正常显示时,说明远端服务器的IP及端口可用 C:\Users\he.liming>psping 139.219.66.205:4352 PsPing v2.10 ...
- jsp中 scope="application" 表示
jsp中 <jsp:useBean id="countbean" scope="application" class="count.counte ...
- Zabbix系统数据采集方法总结
转:http://www.blog.chinaunix.net/uid-9411004-id-4115731.html 老文章,直接拿来用了,官网也有最新分类,没高兴翻译 在Zabbix系统中有多达十 ...