一、Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,用于Java代码和数据库之间的交互。

  1、核心:Java和数据库之间的映射关系。

  2、hibernate的缓存:

    a)、一级缓存:hibernate首次查询之后会将查询结果存放在一级缓存中,第二次查询的时候会直接从缓存中获取数据,如果缓存中没有采去查询数据库。hibernate自带一级缓存。

    b)、二级缓存:把运行结果存储在硬盘上,执行的时候先从一级缓存中去找,如果没有找到就去二级缓存,二级缓存需要借助第三方插件。

  3、配置方法:

    A)、在lib目录下加载Hibernate所需的jar包

    B)、创建一个与数据库相对应的类(package的名字为bean)

    C)、配置数据库中的表的字段与类中的各个字段之间的对应关系(.xml文件配置或者用注解的方式配置)

    D)、往src目录下复制一个hibernate.cfg.xml文件,并在该文件中添加相应的映射文件或者是映射类。(注意不能添加多余的映射路径,否则会报错

    E)、在某个方法中编写对数据库的操作语言:

      a)、创建Configurration对象读取hibernate的配置文件

      b)、创建sessionFactory工厂类,并通过openSession()方法获取session(即创建一次会话)

      c)、创建一个实例(查询和更新的时候需要)

      d)、开启实物(增删改)

      e)、设置session的任务

      f)、提交实物(增删改)

二、搭建一个简单的Hibernate框架(.xml):

  1、创建一个web项目,将Hibernate框架所需的jar包拷贝到lib目录下。

  2、封装一个HibernateTools工具类,简化对数据库操作时的代码。以后可以直接粘贴调用。

 /**
*
* 项目名称:ccc
* 类名称: HibernateTools
* 描述: -HibernateTools工具类
* 修改时间:
* 修改备注:-
*/
public class HibernateTools { // 声明一个工厂类
private static SessionFactory sf;
//线面这句是一个静态代码块,在应用程序启动的时候就会执行,而且只会执行一次
static{
//1、创建Configuration对象,用于读取xml文件
Configuration conf = new Configuration();
conf.configure("/hibernate.cfg.xml");
// 2、通过buildSessionFactory()创建SessionFactory的工厂类
sf = conf.buildSessionFactory();
} public static Session openSession(){
// 3、通过openSession()获取一个会话
return sf.openSession();
}
}

  3、创建一个StudentBean类

 package com.st.bean;

 public class StudentBean {
private int snum; //学号
private String sname;//姓名
private int sage; //年龄
public int getSnum() {
return snum;
}
public void setSnum(int snum) {
this.snum = snum;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getSage() {
return sage;
}
public void setSage(int sage) {
this.sage = sage;
}
}

  4.拷贝一个xxx.hbm.xml文件到com.st.bean目录下,重命名为student.hbm.xml,并修改class标签中的属性:使Student表与StudentBean类之间存在映射关系:

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.st.bean.StudentBean" table="STUDENT">
<id name="snum" column="SNUM">
<generator class="assigned"></generator>
</id>
<property name="sname" column="SNAME"></property>
<property name="sage" column="SAGE"></property>
</class>
</hibernate-mapping>
<!-- 类和数据库表之间的映射关系:
<calss name="Java类" table="数据库表">
<id name="Java类的字段" column="表里面的字段">
<generator class="主键生成规则" ></generator>
</id>
<property name="Java类的字段" column="数据库表的字段" type="java.lang.String"></property>
简单的一对多 Java类里面一的一方需要有 多的一方的一个 set集合
<set name="类里面的集合的 变量名" cascade="all" inverse="true" >
<key cloumn=""></key>
<one-to-many class="多方的类的地址">
</set>
多的一方 在Java类里面 写一个 一的一方的对象
<many-to-one name="对象的变量名" column="">
多对多 :Java类里面都有 另一方的一个 set集合
<set name="类里面的集合的 变量名" table="中间表的表名" cascade="all" inverse="true">
<key column="本类的表 和第三方表的关联字段"></key>
<many-to-many class="另一个对象的地址" column="另一对象对应的表和第三方表的关联字段">
</set> </class>
-->

  5、拷贝一个hibernate.cfg.xml文件到src文件下,删除hibernate.xml文件中无用的映射文件后,添加映射文件-student.hbm.xml。

 <!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.dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <!-- 显示SQL,默认为false -->
<property name="hibernate.show_sql">true</property> <!-- 添加一个映射文件 -->
<mapping resource="com/st/bean/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

  6、在新建一个StudentTest类,在里面即可编写相应的增删改查的代码:

 package com.st.test;

 import java.util.List;

 import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import com.st.Tools.HibernateTools;
import com.st.bean.StudentBean; public class StudentTest { /*
* 添加一组数据
*/
@Test
public void test1(){
// 获取一个会话
Session session = HibernateTools.openSession();
//开启一次事物
Transaction tran = session.beginTransaction();
StudentBean student =new StudentBean();
//student.setSnum(21);//设置为主键自增长时不用指定主键的值;
student.setSname("李冬林");
student.setSage(22);
session.save(student);
//确认提交事物
tran.commit();
}
/*
* 删
*/
@Test
public void test2(){
// 获取一个会话
Session session = HibernateTools.openSession();
Transaction tran = session.beginTransaction();
StudentBean student = new StudentBean();
student.setSnum(28);
session.delete(student);
tran.commit();
}
/*
* 改
*/
@Test
public void test3(){
// 获取一个会话
Session session = HibernateTools.openSession();
Criteria c = session.createCriteria(StudentBean.class);
//开启一次事物
Transaction tran = session.beginTransaction(); c.add(Restrictions.eq("snum", 30));
//获取这个条件的原有数据
StudentBean student =(StudentBean) c.uniqueResult();
student.setSage(21);
student.setSname("陈泽俊");
session.update(student);
tran.commit();
}
/*
* 查
*/
@Test
public void test4(){
// 获取一个会话
Session session = HibernateTools.openSession();
//创建一个条件
Criteria c = session.createCriteria(StudentBean.class);
//c.add(Restrictions.eq("snum",30));
List<StudentBean> list = c.list();
for(StudentBean a: list){
System.out.println(a.getSnum()+"---"+a.getSname()+"---"+a.getSage());
}
}
}

二、用注解的方式搭建一个简单的Hibernate框架:

  1、在上面的基础上再往lib目录先添加一个包-hibernate-jpa-2.0-api-1.0.0.Final.jar

  2、同第一种方法

  3、创建一个StudentBean类,并在这个类上添加注解(注意:注解引的包是:javax.persistence.*不是org.hibernate.annotations.*)

 package com.st.bean;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity //声明一个实体
@Table(name="student") //与表之间的映射
@GenericGenerator(name="genId",strategy="increment")//声明主键生成方式为自增长
public class StudentBean {
@Id
@GeneratedValue(generator = "genId") //指定主键生成策略
@Column(name="SNUM") //snum与表里的SUM字段相对应
private int snum; //学号
@Column(name="SNAME")
private String sname;//姓名
@Column(name="SAGE")
private int sage; //年龄 public int getSnum() {
return snum;
}
public void setSnum(int snum) {
this.snum = snum;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getSage() {
return sage;
}
public void setSage(int sage) {
this.sage = sage;
}
}

  4.拷贝一个xxx.hbm.xml文件到com.st.bean目录下,重命名为student.hbm.xml,并修改class标签中的属性:使Student表与StudentBean类之间存在映射关系:

 <!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.dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <!-- 显示SQL,默认为false -->
<property name="hibernate.show_sql">true</property> <!-- 添加一个映射文件 -->
<mapping class ="com.st.bean.StudentBean"/>
</session-factory>
</hibernate-configuration>

  5、同上面第6步。

2.0、Hibernate框架的简单搭建的更多相关文章

  1. 1.0、Struts2的简单搭建方法

    一.Struts2:是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet:用于jsp页面与Java代码之间的交互. 1.核心:Filter拦截器,对所有的请求进行拦截. 2.工作 ...

  2. hibernate框架的简单入门

    1.什么是框架 框架是一个半成品,框架帮我们实现了一部分的功能. 2.使用框架的最大好处 使用框架的最大好处就是,少写一部分代码但仍能实现我们所需要实现的功能. 3.什么是hiberbnate框架 ( ...

  3. hibernate 框架的简单使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuratio ...

  4. Hibernate(一)——采用Hibernate框架开发环境搭建

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员充分使用对象编程思维来操作数据库.HIbernate的移植性很好,它可以应用于任何JDB ...

  5. SSM框架的简单搭建

    转:https://blog.csdn.net/zhshulin/article/details/37956105 Spring+SpringMVC+MyBatis spring       : 4. ...

  6. Hibernate框架的基本搭建(一个小的java project的测试向数据库中插入和查询数据的功能)

    Hibernate介绍:Hibernate是一种“对象-关系型数据映射组件”,它使用映射文件将对象(object)与关系型数据(Relational)相关联,在Hibernate中映射文件通常以&qu ...

  7. Java Web开发中Spring+MyBatis框架的简单搭建

    这里使用的eclipse,首先创建一个动态web项目. 1.导入Spring IOC.AOP.DAO.dbcp.dbdrive.mybatis.jar . mybatis-spring.jar  本人 ...

  8. Hibernate学习之简单应用

    前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了.所以返回来,做个小笔记. 简单来讲,Hibernate框架是利用对象-关 ...

  9. 深入浅出学习Hibernate框架(二):JDBC基础操作

    上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...

随机推荐

  1. exynos4412中断编程

    中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...

  2. 关于 IIS 中 Excel 访问的问题

    关于 IIS 上 Excel 文件的访问, 一路上困难重重, 最后按以下步骤进行设置, 可在 IIS 中正常使用! 1. 引用及代码: 1). 项目中添加 Excel 程序集引用(注意: 从系统 CO ...

  3. [数据分析]excel带名称的四象限散点图制作

    本文前言:方法来至Excel图表之道这本数,偶然看到,好久没出数据分析的文章了,也难怪最近几个月都忙作网页,数据分析自己也就用excell和sql 正文: 带象限的散点图效果如下: 看到图片,这里制作 ...

  4. Maven :No goals have been specified for this build

    Maven报错 报错信息如下:No goals have been specified for this build 解决办法:在<build></build>标签中增加  & ...

  5. jpa+springmvc+springdata(一)

    学习尚硅谷笔记: 首先配置application.xml: <?xml version="1.0" encoding="UTF-8"?> <b ...

  6. Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

    怪异模式和严格模式(译注:一般称为标准模式:Standards Mode,下文中的严格模式都可以理解为标准模式)是浏览器解析CSS时的两种‘模式’.这篇文章将简单阐述这两种模式之间的差异. 译注:一个 ...

  7. PAT 1049. 数列的片段和(20)

    给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1 ...

  8. JSONP是如何工作的

    我对这个问题的探究来源于一个需求: 当访问某个页面的时候,需要向另外一个网站报告一下这次访问的信息. 其实发一个跨域的请求就能大致实现这个需求.我们发跨域的例子其实很常见,例如请求一个第三方的图片.引 ...

  9. Linux 信号量详解一

    信号量主要用于进程间(不是线程)的互斥,通过sem_p()函数加锁使用资源,sem_v函数解锁释放资源,在加锁期间,CPU从硬件级别关闭中断,防止pv操作被打断. semget函数 int semge ...

  10. 【ios开发】使用自定义的TableViewCell

    当系统自带的cell无法满足我们的要求的时候,我们就可以自定义自己的cell. 先看看效果,这个效果有点重复造轮子的感觉,因为UITableView已经实现了这种布局. 打造自己的cell只需简单的3 ...