微信公众号: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(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><id name="id" > <!-- generator:主键生成策略 --> <generator class="native"></generator> </id> 

property

<!-- property元素:除id之外的普通属性映射name: 填写属性名column(可选): 填写列名type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.每个类型有三种填法: java类型|hibernate类型|数据库类型not-null(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><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

本系列后期仍会持续更新,欢迎关注!

如果你认为这篇文章有用,欢迎转发分享给你的好友!

本号文章可以任意转载,转载请注明出处!

扫码关注微信公众号,了解更多

转载于:https://www.cnblogs.com/compassblog/p/8455986.html

【SSH框架】之Hibernate系列一相关推荐

  1. SSH框架之-hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  2. 【SSH框架】--Hibernate入门

    参考数书籍:轻量级Java EE企业应用实战(第4版)     Hibernate是轻量级Java EE应用的持久化层解决方案.它不仅管理Java类到数据库表的映射,还提供了数据查询和获取数据的方法, ...

  3. SSH框架之Hibernate介绍

    什么是Hibernate? Hibernate框架是当今主流的Java持久层框架之一. 持久层最常用的技术有JDBC,DBUtils DBUtils封装的就是JDBC的操作方式,他只是把JDBC的操作 ...

  4. 关于ssh框架中hibernate扫描实体类的两种方法annotatedClasses和packagesToScan

    [Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同

  5. SSH框架之Hibernate的List集合映射、数组映射、List集合的数据保存

    List集合映射.数组映射 一.数据库设计: 二.代码实现 1.javabean:User.java 2.User.hbm.xml: 3.测试类:App.java 三.结果: 1.t_user表: 2 ...

  6. SSH框架电子商城-系统技术分析

    ------·今天距2020年62天·------ 这是ITester软件测试小栈第71次推文 大家好 我是coco小锦鲤 双十一还有半把个月才到 淘宝京东唯品会 天猫苏宁当当网 都在放大招让我们买买 ...

  7. 【SSH框架】之Spring系列(一)

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.前言 前面更新过几篇关于 Struts2 框架和 Hibernate 框架的文章,但鉴于这两 ...

  8. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  9. java ssh框架 struts spring hibernate 简介

    目录 什么是SSH框架 浅谈Struts 什么是Struts Struts的核心构成 为什么使用Struts 浅谈Hibernate 什么是Hibernate Hibernate的核心构成 浅谈Spr ...

最新文章

  1. Oracle在线重定义
  2. SQL SERVER 2005 同步复制技术 发布与订阅功能使用说明
  3. Android入门之常用控件
  4. oracle 磁盘挂载格式化,Linux简单磁盘挂载
  5. python爬取新闻网站标题_python如何正确抓取网页标题
  6. 霸气!任正非:即使美企断供 也无法威胁华为生存
  7. html改变占位字符的颜色,使用CSS更改HTML5输入的占位符颜色
  8. 详解淘宝直播背后的技术!
  9. 2019.2.2牛客寒假算法基础集训营
  10. Navicat Premium查看建表语句(DDL)
  11. 搭建Android开发环境(超详细)
  12. pta 机工士姆斯塔迪奥(C语言实现)
  13. 第十五周项目二-----用哈希法组织关键字之线性探测法
  14. 计算机毕业设计太难做不出来怎么办?
  15. app专项测试之兼容性测试
  16. Android笔记:Zing二维码扫描解决二维码被拉伸
  17. springCloud面试之feign+ribbon+hystirx交互概览
  18. 高斯牛顿法----MATLAB实现
  19. 移动端app开发流程分析
  20. linux swap逻辑 主,swap是主分区和是逻辑分区有什么差异么??

热门文章

  1. 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler...
  2. 实训C++语言设计——实现复数运算
  3. NHibernate.ADOException: cannot open connection
  4. Android使用ViewPager实现左右循环滑动及轮播效果
  5. DataSet转换为实体(函数)
  6. Android中实现滑动翻页—使用ViewFlipper
  7. eclipse安装hadoop插件及配置
  8. 买卖股票的最佳时机|||
  9. golang简短变量声明
  10. C#之windows桌面软件第八课:汉字(GB2312)与编码(UTF-8)之间的相互转换