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学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习第十节(yield表达式
- 下一篇: 不是军人子女,普通应届高考生可以报考西安