Hibernate_day01

Hibernate_day01

Hibernate课程安排

  • hibernate入门和配置

 

  • hibernate内部原理和api使用

 

  • hibernate一对多和多对多

 

第四天 hibernate查询

 

今天内容介绍

1 hibernate基本概述

(1)hibernate框架应用dao层框架,对数据库实现crud操作

(2)orm思想

 

2 hibernate入门案例

(1)搭建hibernate环境

 

3 hibernate配置文件

(1)映射配置文件(重点)

(2)核心配置文件

 

4 hibernate的核心api介绍

(1)SessionFactory对象

* 写工具类,写静态代码块

(2)Session对象

* 调用session对象里面的方法实现crud操作

 

5 其他部分

(1)Configuration对象

(2)Transaction对象

 

1 WEB内容回顾

1.1 JavaEE三层结构

1 web层:之前使用servlet做数据获取和封装,现在struts2框架

 

2 service层:spring框架

 

3 dao层:对数据库进行crud即赠三改查操作,之前dbutils、jdbc,现在使用hibernate

 

2 Hibernate框架概述

2.1 什么是框架

1 本身不是软件一个词汇,建筑学词汇

 

2 软件里面框架解释:

(1)使用框架之后,提高开发效率,少写很多代码实现功能,这些功能在框架里面封装

(2)框架就是程序半成品,实现一部分功能

 

3 框架特点:

(1)少写代码

(2)写很多配置文件实现功能(主要xml配置文件)

 

2.2 什么是hibernate框架

1 hibernate框架应用在javaee三层结构中dao层框架

 

2 hibernate框架轻量级开源框架

 

3 使用hibernate框架应用在dao层,对数据库进行crud操作

(1)使用hibernate框架如果实现基本crud操作,不需要写sql语句,直接调用方法实现

 

4 hibernate版本

(1)现在使用hibernate5.x

(2)还有hibernate3.x  hibernate4.x

 

2.3 什么是orm思想

1 hibernate框架对之前jdbc进行封装,使用hibernate框架不需要写sql语句实现

 

2 hibernate特点:不需要自己创建数据库表,使用hibernate框架帮创建表

 

3 orm思想:

(1)orm:object relational mapping,对象关系映射

 

4 文字描述:

JavaBean更正确叫法: 实体类(持久化类)

(1)让实体类和数据库表进行对应关系

(2)让实体类里面属性 和 表里面字段进行对应

(3)操作表时候,使用hibernate不需要直接操作表,操作表对应实体类对象就可以了

 

画图分析:

 

3 Hibernate入门

3.1 搭建hibernate环境

第一步 导入jar包

(1)找到文件,required里面jar包

(2)数据库驱动jar包

(3)hibernate运行过程中日志输出jar包

 

第二步 创建实体类

(1)让hibernate帮创建数据库表

 

第三步 配置类和表对应关系(映射关系)

(1)使用配置文件配置出来,一般使用配置文件格式 xml

(2)创建hibernate映射文件,名称和位置没有固定要求的

* 建议:放到实体类所在包里面,名称一般:实体类名称.hbm.xml

(3)一般配置文件是xml格式配置文件,在xml文件中首先 引入约束

* 常用约束有两种:dtd和schema约束,现在hibernate使用dtd约束

(4)配置实体类和数据库表映射关系

<hibernate-mapping>

<!-- 配置实体类和数据库表对应

name: 表示实体类,写实体类全路径

table:数据库表

-->

<class name="cn.itcast.entity.User" table="t_user">

<!-- 配置实体类属性 和 表字段对应 -->

<!-- 配置实体类属性和表主键对应

name:实体类属性名称

column:表字段名称

-->

<id name="uid" column="uid">

<!-- 配置生成策略  第二天详细说到-->

<generator class="native"></generator>

</id>

 

<!-- 配置其他属性和字段对象

name:实体类属性名称

column:表字段名称

 -->

<property name="username" column="username"></property>

<property name="password" column="password"></property>

</class>

</hibernate-mapping>

 

第四步 创建hibernate核心配置文件

(1)hibernate机制: hibernate加载时候只会加载核心配置文件,不会加载其他配置文件,把映射文件引入到核心配置文件中

(2)创建核心配置文件

* 名称和位置是固定的

* 位置在src下面,名称固定 hibernate.cfg.xml

(3)引入dtd约束

 

(4)配置数据库信息(必须)

 

(5)配置hibernate信息

<!-- 2 hibernate信息  可选的-->

<property name="hibernate.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

<!--

hibernate帮创建表

hibernate.hbm2ddl.auto create-drop: 如果有表,删除,再创建

hibernate.hbm2ddl.auto create:如果有表,再创建表

hibernate.hbm2ddl.auto update : 如果数据库已经存在表,更新;如果没有存在表,创建

hibernate.hbm2ddl.auto validate:如果数据库已经存在表,更新;如果没有存在表,创建,实体类属性和表字段必须一样

 -->

<property name="hibernate.hbm2ddl.auto">update</property>

 

<!--  

配置数据库方言

(1)在mysql里面实现分页,sql语句有limit关键字,limit只能使用mysql数据库里面

(2)oracle使用分页,rownum,只能使用在oracle里面

-->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

 

(6)把映射文件引入到核心配置文件中

 

3.2 实现添加用户操作

1 效果:

(1)看数据库里面是否创建表

(2)看创建数据库表里面是否有添加记录

 

2 代码步骤

第一步 加载hibernate核心配置文件

第二步 创建SessionFactory对象

第三步 使用SessionFactory对象创建Session对象

第四步 开启事务

第五步 调用session方法实现crud操作

第六步 提交事务

第七步 关闭连接

 

3 代码实现

@Test

public void testAdd() {

// 第一步 加载hibernate核心配置文件

//hibernate封装对象实现

/*

 * 底层过程:

 * 到src下面找到名称 hibernate.cfg.xml文件,加载到创建cfg对象里面

 * */

Configuration cfg = new Configuration();

cfg.configure();

 

// 第二步 创建SessionFactory对象

/*

 * 做很多事情:

 * (1)到核心配置文件中找到数据库部分

 * (2)到hibernate信息配置部分,找是否自己创建数据库表

 * 2.1 如果找到创建表配置,找到引入映射文件,根据映射关系在数据库把表创建

 * 2.2 如果没有找到创建表配置,直接返回sessionFactory对象

 * */

SessionFactory sessionFactory = cfg.buildSessionFactory();

 

// 第三步 使用SessionFactory对象创建Session对象

//类似于jdbc里面Connection

Session session = sessionFactory.openSession();

 

// 第四步 开启事务

//Transaction代表事务

Transaction tx = session.beginTransaction();

 

// 第五步 调用session方法实现添加操作

/*

 * 使用hibernate时候不需要直接操作表,

 * 操作表对应实体类对象就可以了

 * */

User user = new User();

user.setUsername("东方不败");

user.setPassword("1314520");

//调用session方法实现

session.save(user);

 

// 第六步 提交事务

tx.commit();

 

// 第七步 关闭连接

session.close();

sessionFactory.close();

}

 

效果:

  1. 数据库表创建
  2. 数据库表记录添加

 

4 Hibernate配置文件详解

4.1 Hibernate映射配置文件

1 映射文件名称和位置不是固定

 

2 在映射配置文件中,name属性里面写实体类相关部分

(1)class标签里面name属性:实体类全路径

(2)id标签里面name属性:实体类属性名称

(3)property标签name属性:实体类属性名称

 

3 id标签和property标签column属性可以省略的,column属性值和name属性值一样的

 

3 有属性length:生成字段长度,可以省略的,有默认值

4 有属性type

 

4.2 Hibernate核心配置文件

1 核心配置文件名称和位置固定的

(1)位置在src下面,名称是 hibernate.cfg.xml

2 配置有三部分内容

(1)配置数据库信息(必须的)

(2)配置hibernate信息(可选的)

(3)引入映射文件(必须的)

 

3 问题:

(1)注意空格

(2)注意全角问题

 

5 Hibernate核心api

5.1 Configuration

1 作用

(1)加载hibernate核心配置文件

 

2 代码

 

5.2 SessionFactory(重点)

1 作用:

 

2 因为创建SessionFactory过程中做很多事情,这个过程特别耗资源

 

3 解决sessionFactory耗资源问题:

(1)方案:让sessionFactory对象在一个项目里面只需要创建一次

* 类似于 ServletContext对象

 

(2)实现:

* 静态代码块,类加载时候执行,执行一次

 

* spring阶段学习另外解决方案

** 在服务器启动时候创建SessionFactory对象

 

4工具类编写

public class HibernateUtils {

static Configuration cfg = null;

static SessionFactory sessionFactory = null;

 

//静态代码块

static {

cfg = new Configuration();

cfg.configure();

 

sessionFactory = cfg.buildSessionFactory();

}

 

//提供返回sessionFactory的方法

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

 

5 配置C3P0连接池(会用)

(1)一般不在hibernate配置连接池,一般把连接池放到spring里面,spring讲到

 

5.3 Session

1 作用

(1)Session对象类似于jdbc里面Connection

(2)调用session对象里面的方法实现crud操作

 

2 常用方法

(1)save方法:添加

(2)get方法:根据id查询

(3)update方法:修改

(4)delete方法:删除

 

调用session里面其他方法实现其他查询操作,第四天讲到

 

5.4 工具类完成crud操作

使用SessionFactory工具类和Session对象的方法完成crud操作

 

1 添加操作

 

2 get方法:根据id查询

//根据id查询

@Test

public void testGet() {

//获取sessionFactory对象

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

//获取session对象

Session session = sessionFactory.openSession();

//开启事务

Transaction tx = session.beginTransaction();

 

//实现根据id查询

//根据uid=1查询

User user = session.get(User.class, 1);

System.out.println(user);

 

//提交事务

tx.commit();

//关闭

session.close();

sessionFactory.close();

}

 

3 update方法:修改操作

(1)根据id查询,做修改

//修改

@Test

public void testUpdate() {

//获取sessionFactory对象

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

//获取session对象

Session session = sessionFactory.openSession();

//开启事务

Transaction tx = session.beginTransaction();

 

//1 根据id查询

User user = session.get(User.class, 2);

//2 修改user对象里面的值

user.setPassword("1234567890");

//3 调用方法实现修改

session.update(user);

 

//提交事务

tx.commit();

//关闭

session.close();

sessionFactory.close();

}

(1)把传递对象里面所有值都修改

 

4 delete方法:删除

//删除

@Test

public void testDelete() {

//获取sessionFactory对象

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

//获取session对象

Session session = sessionFactory.openSession();

//开启事务

Transaction tx = session.beginTransaction();

 

//第一种方式:根据id查询对象,调用方法实现删除

User user = session.get(User.class, 1);

session.delete(user);

 

//提交事务

tx.commit();

//关闭

session.close();

sessionFactory.close();

}

 

 

5.5 Transaction

1 作用

(1)代表事务对象

 

2 常用方法

 

 

3 细节(不添加事务)

(1)hibernate是5.x,其实不手动开启事务实现操作

(2)hibernate是3.x,必须手动开启事务

 

3 事务相关的概念

(1)什么是事务

* 逻辑上一组操作,要么都成功,一个失败所有都失败

* 转账例子

 

(2)事务四个特性

原子性、一致性、隔离性、持久性

 

6 解决配置文件没有提示

1 可以上网

 

2 把dtd约束文件引入到eclipse中

 

7 crm介绍(了解)

1 什么是crm

 

2 crm功能模块介绍

 

ssh案例中写到这个案例

 

复习知识:

1 多表之间关系

(1)一对多

(2)多对多

(3)一对一

 

2 一对多建表

 

3 多对多建表

 

4 jquery ajax操作

(1)json数据格式

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值