Hibernate学习笔记
一 . Hibernate的简介
提到hibernate,首先的说说ORM框架技术(Object、Relation、Mapping),它的主要问题就是对象-关系的映射,怎么说呢?现在用的数据库大多数都是关系数据库,而关系数据库重在于表与表之间的关系连接。术语就为:一个持久化类和一个表对应,类的每个实例对应表的一条记录。其他就不说了,回到hibernate。ORM框架类型有很多,hibernate就是其中的一种,还有EJB框架(Enterprise javaBean)、iBATIS框架、TopLink框架等。
1. 对象持久化
狭义的理解,“持久化”仅仅指把对象永久保存到数据库中
广义的理解,“持久化”包括和数据库相关的各种操作:
保存:把对象永久保存到数据库中。
更新:更新数据库中对象(记录)的状态。
删除:从数据库中删除一个对象。
查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。
加载:根据特定的OID,把一个对象从数据库加载到内存中。
2.ORM的介绍
ORM(Object/Relation Mapping): 对象/关系映射
ORM 主要解决对象-关系的映射
ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中
3.Hibernate与MyBatis的对比
Hibernate:
非常优秀、成熟的 ORM 框架。
完成对象的持久化操作
Hibernate 允许开发者采用面向对象的方式来操作关系数据库。
消除那些针对特定数据库厂商的 SQL 代码
myBatis:
相比 Hibernate 灵活高,运行速度快
开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能
4.Hibernate的简单开发
4.1 使用myEclipse创建Maven项目
4.2 因为使用maver项目,所以只需在项目的pom.xml文件中进行如下配置,会自动下载jar包,配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>MyHibernate</groupId><artifactId>MyHibernate</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name/><description/><dependencies><dependency><groupId>org.apache.openejb</groupId><artifactId>javaee-api</artifactId><version>5.0-1</version><scope>provided</scope></dependency><dependency><groupId>javax.faces</groupId><artifactId>jsf-api</artifactId><version>1.2_04</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>javax.faces</groupId><artifactId>jsf-impl</artifactId><version>1.2_04</version><scope>provided</scope></dependency><!-- 此次导入Hiberante所需的jar包,此处导入核心jar包,所有关于hiberante的jar包都会导入 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.20.Final</version></dependency><!-- 引入本地的jdbc的jar包 --><dependency><groupId>oracle</groupId><artifactId>oracle</artifactId><version>1.2.17</version><scope>system</scope><systemPath>C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar</systemPath></dependency></dependencies><build><sourceDirectory>${basedir}/src</sourceDirectory><outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory><resources><resource><directory>${basedir}/src</directory><excludes><exclude>**/*.java</exclude></excludes></resource></resources><plugins><plugin><artifactId>maven-war-plugin</artifactId><configuration><webappDirectory>${basedir}/WebRoot</webappDirectory><warSourceDirectory>${basedir}/WebRoot</warSourceDirectory></configuration></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin></plugins></build> </project>
4.3 . 在src目录下创建HIberante的配置文件hibernate.cfg.xml
hibernate,cfg.xml文件的生成:随便创建一个java Web项目,创建成功后,选中项目,鼠标点击右键,选择MyEclipse选项,---->选择Add Hibernate Annoatitio
取消所有勾选选项,点击Next---->会出现下面的窗口
鼠标点击Next继续,会弹出下列窗口:
鼠标点击Next继续,会弹出如下窗口:
鼠标点击Finish完成,完成后将生成的Configaction,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"><!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration><!-- 配置sessionFactory,表示获取连接,包含连接的四要素 注:hibernate 连接的四要素中的名字不能更改,必须是以下的名字--><session-factory><!--方言 告诉hibernate,连接的是oracle数据库 --><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="connection.url">jdbc:oracle:thin:local:1521:orcl</property><property name="connection.username">scott</property><property name="connection.password">tiger</property><property name="connection.driver_class">oracle.jdbc.OracleDriver</property><!-- 此标签用于是否在控制台输出sql语句 此处ture表示输出 --><property name="show_sql">ture</property><!--此标签表示引入hiberante的映射文件 --><mapping resource="cn/et/hibernate/lesson01/Emp.hbm.xml"/></session-factory></hibernate-configuration>
4.4 创建Emp对象类
package cn.et.hibernate.lesson01;import java.util.Date;/*** Emp entity. @author MyEclipse Persistence Tools*/public class Emp implements java.io.Serializable {// Fieldsprivate Short empno;private String ename;private String job;private Short mgr;private Date hiredate;private Double sal;private Double comm;private Short deptno;// Constructors/** default constructor */public Emp() {}/** full constructor */public Emp(String ename, String job, Short mgr, Date hiredate, Double sal,Double comm, Short deptno) {this.ename = ename;this.job = job;this.mgr = mgr;this.hiredate = hiredate;this.sal = sal;this.comm = comm;this.deptno = deptno;}// Property accessorspublic Short getEmpno() {return this.empno;}public void setEmpno(Short empno) {this.empno = empno;}public String getEname() {return this.ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return this.job;}public void setJob(String job) {this.job = job;}public Short getMgr() {return this.mgr;}public void setMgr(Short mgr) {this.mgr = mgr;}public Date getHiredate() {return this.hiredate;}public void setHiredate(Date hiredate) {this.hiredate = hiredate;}public Double getSal() {return this.sal;}public void setSal(Double sal) {this.sal = sal;}public Double getComm() {return this.comm;}public void setComm(Double comm) {this.comm = comm;}public Short getDeptno() {return this.deptno;}public void setDeptno(Short deptno) {this.deptno = deptno;}}
4.5 创建Hibernate的映射文件
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping><class name="cn.et.hibernate.lesson01.Emp" table="EMP" schema="SCOTT"><id name="empno" type="java.lang.Short"><column name="EMPNO"/><generator class="native" /></id><property name="ename" type="java.lang.String"><column name="ENAME"><comment>员工姓名</comment></column></property><property name="job" type="java.lang.String"><column name="JOB"><comment>员工职位</comment></column></property><property name="mgr" type="java.lang.Short"><column name="MGR"><comment>领导编号</comment></column></property><property name="hiredate" type="java.util.Date"><column name="HIREDATE"><comment>雇佣日期</comment></column></property><property name="sal" type="java.lang.Double"><column name="SAL"><comment>月薪</comment></column></property><property name="comm" type="java.lang.Double"><column name="COMM"><comment>奖金</comment></column></property><property name="deptno" type="java.lang.Short"><column name="DEPTNO"><comment>所属部门编号</comment></column></property></class> </hibernate-mapping>
4.6 定义测试类,测试通过Hiberante对数据库的增删改查操作
package cn.et.hibernate.lesson01;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test;public class TestHibernate {//表示增加 @Testpublic void test1(){//创建sessionFactorySessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();Session session = sf.openSession();//开启一个事物Transaction t = session.beginTransaction();Emp emp = new Emp();emp.setEmpno(Short.parseShort("7903"));emp.setEname("aaa");session.save(emp); // t.commit(); }@Testpublic void testdelete(){//创建sessionFactorySessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();Session session = sf.openSession();//开启一个事物Transaction t = session.beginTransaction();Emp emp = new Emp();//表示获取该对象属性关联属性emp.setEmpno(Short.parseShort("7905"));//调用删除的方法 session.delete(emp);//事物的提交 t.commit();}@Testpublic void testupdate(){//创建sessionFactorySessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();Session session = sf.openSession();//开启一个事物Transaction t = session.beginTransaction();//此处要是不查询,会将表内其他数据修改,所以先要进行查询,将查询返回的对象进行修改Emp emp = (Emp) session.get(Emp.class, Short.parseShort("7904"));emp.setEname("abcde");t.commit();} }
以上为Hibernate的简单的对数据库的增删改查的操作
转载于:https://www.cnblogs.com/xushirong/p/7051019.html
Hibernate学习笔记相关推荐
- hibernate学习笔记二
上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...
- hibernate学习笔记(总结)
hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...
- 马士兵Hibernate学习笔记
马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...
- Hibernate学习笔记Session.evict(user)方法
@[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...
- Hibernate学习笔记(一)----针对不同的数据库不同的配置
Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...
- Hibernate 学习笔记
学生时代就这样玩完了,哈哈.. 不过学习却是还要继续.. 就这样发发牢骚吧..... 1.hibernate未毕业之时也曾看过,具体看到哪儿也全忘了,笔记也因为重装系统丢了,索性毕业就记在这儿吧. 首 ...
- hibernate 学习笔记1
今天开始学习hibernate,碰到的几个问题在这里记录一下. 1>导入hibernate5.2.10的hibernate-release-5.2.10.Final\hibernate-rele ...
- Hibernate学习笔记(二)
Hibernate概述: 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可 ...
- Hibernate学习笔记(一)
####1.1Hibernate框架的学习路线 第一天:Hibernate的入门(Hibernate的环境搭建.Hibernate的API.Hibernate的CRUD) 第二天:Hibernat ...
- Hibernate学习笔记_查询
HQL vs EJBQL 1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Q ...
最新文章
- 哈佛终身教授:年轻人如何做科研?
- python函数(三)
- apache 虚拟主机如何配置
- Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
- SpringSecurity + JWT,从入门到精通!
- 三星Galaxy Note 10顶配版现身:陶瓷材质+12GB内存
- scala编程第16章学习笔记(3)——List类的高阶方法
- 高通9008固件下载备份工具
- Ocr答题辅助神器 OcrAnswerer4.x,通过百度OCR识别手机文字,支持屏幕窗口截图和ADB安卓截图,支持四十个直播App,可保存题库...
- matlab二极管伏安特性,基于Matlab对Spice二极管特性受温度影响的研究
- Centos7+DockerCompose部署.NetCore3.1应用
- 【Android Studio】一款简易appUI界面开发(2)
- 当生命科学遇上AI,会产生怎样1+1>2的效果?
- Audio Format
- 游戏测评浅浅试—MMO手游太古神王2测评
- 人工智能专业就业方向有哪些?
- [BZOJ5197] [CERC2017]Gambling Guide
- 计算鬼成像学习笔记二:二阶关联函数探究
- java 下载加速_一种基于Java的大文件下载加速方法与流程
- layuiAdmin框架iframe版本个人总结