首页 > 代码库 > Hibernate学习笔记
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
<?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 { // Fields private 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 accessors public 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 { //表示增加 @Test public void test1(){ //创建sessionFactory SessionFactory 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(); } @Test public void testdelete(){ //创建sessionFactory SessionFactory 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(); } @Test public void testupdate(){ //创建sessionFactory SessionFactory 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的简单的对数据库的增删改查的操作
Hibernate学习笔记