【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(可选):配置该属性(列)是否不能为空. 默认值: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系列一相关推荐
- SSH框架之-hibernate 三种状态的转换
一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...
- 【SSH框架】--Hibernate入门
参考数书籍:轻量级Java EE企业应用实战(第4版) Hibernate是轻量级Java EE应用的持久化层解决方案.它不仅管理Java类到数据库表的映射,还提供了数据查询和获取数据的方法, ...
- SSH框架之Hibernate介绍
什么是Hibernate? Hibernate框架是当今主流的Java持久层框架之一. 持久层最常用的技术有JDBC,DBUtils DBUtils封装的就是JDBC的操作方式,他只是把JDBC的操作 ...
- 关于ssh框架中hibernate扫描实体类的两种方法annotatedClasses和packagesToScan
[Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同
- SSH框架之Hibernate的List集合映射、数组映射、List集合的数据保存
List集合映射.数组映射 一.数据库设计: 二.代码实现 1.javabean:User.java 2.User.hbm.xml: 3.测试类:App.java 三.结果: 1.t_user表: 2 ...
- SSH框架电子商城-系统技术分析
------·今天距2020年62天·------ 这是ITester软件测试小栈第71次推文 大家好 我是coco小锦鲤 双十一还有半把个月才到 淘宝京东唯品会 天猫苏宁当当网 都在放大招让我们买买 ...
- 【SSH框架】之Spring系列(一)
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.前言 前面更新过几篇关于 Struts2 框架和 Hibernate 框架的文章,但鉴于这两 ...
- ssh(Struts+spring+Hibernate)三大框架整合-简述
ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...
- java ssh框架 struts spring hibernate 简介
目录 什么是SSH框架 浅谈Struts 什么是Struts Struts的核心构成 为什么使用Struts 浅谈Hibernate 什么是Hibernate Hibernate的核心构成 浅谈Spr ...
最新文章
- Oracle在线重定义
- SQL SERVER 2005 同步复制技术 发布与订阅功能使用说明
- Android入门之常用控件
- oracle 磁盘挂载格式化,Linux简单磁盘挂载
- python爬取新闻网站标题_python如何正确抓取网页标题
- 霸气!任正非:即使美企断供 也无法威胁华为生存
- html改变占位字符的颜色,使用CSS更改HTML5输入的占位符颜色
- 详解淘宝直播背后的技术!
- 2019.2.2牛客寒假算法基础集训营
- Navicat Premium查看建表语句(DDL)
- 搭建Android开发环境(超详细)
- pta 机工士姆斯塔迪奥(C语言实现)
- 第十五周项目二-----用哈希法组织关键字之线性探测法
- 计算机毕业设计太难做不出来怎么办?
- app专项测试之兼容性测试
- Android笔记:Zing二维码扫描解决二维码被拉伸
- springCloud面试之feign+ribbon+hystirx交互概览
- 高斯牛顿法----MATLAB实现
- 移动端app开发流程分析
- linux swap逻辑 主,swap是主分区和是逻辑分区有什么差异么??
热门文章
- 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler...
- 实训C++语言设计——实现复数运算
- NHibernate.ADOException: cannot open connection
- Android使用ViewPager实现左右循环滑动及轮播效果
- DataSet转换为实体(函数)
- Android中实现滑动翻页—使用ViewFlipper
- eclipse安装hadoop插件及配置
- 买卖股票的最佳时机|||
- golang简短变量声明
- C#之windows桌面软件第八课:汉字(GB2312)与编码(UTF-8)之间的相互转换