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表达式
- 下一篇: Struts2 校验数据问题