Hibernate_day01
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(); }
效果:
|
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数据格式
|