hibernate5--1.入门及核心API
来源:互联网 发布:网络运维系统 编辑:程序博客网 时间:2024/06/11 07:43
1 WEB内容
1.1 JavaEE三层结构
1 web层:struts2框架
2 service层:spring框架
3 dao层:hibernate框架
(1)对数据库进行crud操作
1.2 MVC思想
1 m:模型
2 v:视图
3 c:控制器
2 Hibernate概述
2.1 什么是框架
写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能
2.2 什么是hibernate框架(重点)
1 hibernate框架应用在javaee三层结构中 dao层框架 –持久层
2 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,
不需要写sql语句实现
3 hibernate开源的轻量级的框架
4 hibernate版本
Hibernate5.x
lib:hibernate相关jar包
2.3 orm思想(重点)--对象/关系映射
1 hibernate使用orm思想对数据库进行crud操作
2 在web阶段学习 javabean,更正确的叫法 实体类
3 orm:object relational mapping,对象关系映射
文字描述:
(1)让实体类和数据库表进行一一对应关系
让实体类首先和数据库表对应
让实体类属性 和表里面字段对应
(2)不需要直接操作数据库表,而操作表对应实体类对象
ORM采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中.
画图描述:
3 Hibernate入门
3.1 搭建hibernate环境(重点)
也可使用插件生成:http://blog.csdn.net/qq_26553781/article/details/53981463
3.1.1 第一步 导入hibernate的jar包
hibernate-release-5.2.8.Final\lib\required
hibernate-release-5.2.8.Final\lib\jpa-metamodel-generator
因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包
不要忘记还有mysql驱动的jar包,加些数据库连接池,c3p0也不会错
3.1.2 第二步 创建实体类
使用hibernate时候,不需要自己手动创建表,hibernate帮把表创建
3.1.3 第三步 配置实体类和数据库表一一对应关系(映射关系)
使用配置文件实现映射关系
(1)创建xml格式的配置文件
映射配置文件名称和位置没有固定要求
建议:在实体类所在包里面创建,实体类名称.hbm.xml
(2)配置是是xml格式,在配置文件中首先引入xml约束
学过约束dtd、schema,在hibernate里面引入的约束dtd约束
(3)配置映射关系
<hibernate-mapping> <!-- 1.配置类和表的对应 name属性:实体类全路径 table属性:数据库表名称 --> <class name="hibernate.entity.User" table="t_user"> <!-- 配置实体类id 和表 id 对应 hibernate要求实体类有一个属性唯一值;表有字段作为唯一值 name属性:实体类里面id属性名称 column属性:生成的表字段名称 --> <id name="uid"type="int"> <column name="UID"/> <!-- 设置数据库表id增长策略 native:生成表id值就是主键自动增长 --> <generator class="native"/> </id> <!-- 配置其他属性和表字段对应 name属性:实体类属性名称 column属性:生成表字段名称 --> <property name="username"type="java.lang.String"> <column name="username"/> </property> <property name="password"type="java.lang.String"> <column name="password"/> </property> <property name="address"type="java.lang.String"> <column name="address"/> </property> </class></hibernate-mapping>
3.1.4 第四步 创建hibernate的核心配置文件
(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
位置:必须src下面
名称:必须hibernate.cfg.xml
(2)引入dtd约束
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分: 配置数据库信息 必须的
<!-- 第一部分:配置数据库信息必须的 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_1</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property>
第二部分: 配置hibernate信息 可选的
<!-- 第二部分:配置hibernate信息可选的 --> <!-- 输出底层sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 输出底层sql语句格式 --> <property name="hibernate.format_sql">true</property> <!-- hibernate帮创建表,需要配置之后 update: 如果已经有表,更新,如果没有,创建 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置数据库方言在mysql里面实现分页关键字 limit,只能使用mysql里面在oracle数据库,实现分页rownum让hibernate框架识别不同数据库的自己特有的语句 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
第三部分: 把映射文件放到核心配置文件中
<mapping resource="hibernate/entity/User.hbm.xml" />
3.2 实现添加操作
@Test public void testAdd() { //第一步加载hibernate核心配置文件 /** * 在hibernate里面封装类,到src下面找到名称是hibernate.cfg.xml */ Configurationcfg = newConfiguration().configure(); //第二步创建SessionFactory对象 /** * 读取hibernate核心配置文件内容,创建sessionFactory在过程中, * 根据映射关系,在配置数据库里面把表创建 */ SessionFactorysessionFactory = cfg.buildSessionFactory(); //第三步使用SessionFactory创建session对象 /** * 类似于连接 */ Sessionsession = sessionFactory.openSession(); //第四步开启事务 Transactiontx = session.beginTransaction(); //第五步写具体逻辑 crud操作 /** * 添加功能 */ Useruser = newUser(); user.setUsername("老兰"); user.setPassword("123"); user.setAddress("北京"); session.save(user); //第六步提交事务 tx.commit(); //七步关闭资源 session.close(); sessionFactory.close(); }
看到效果:
(1)是否生成表
(2)看表是否有记录
4 Hibernate配置文件详解
详细参看:http://blog.csdn.net/qq_26553781/article/details/54016140
4.1 映射配置文件(重点)
1 映射配置文件名称和位置没有固定要求
不过约束规范:
2 映射配置文件中,标签name属性值写实体类相关内容
(1)class标签name属性值实体类全路径
(2)id标签和property标签name属性值 实体类属性名称
3 id标签和property标签,column属性可以省略的
不写值和name属性值一样的
4property标签type属性,设置生成表字段的类型,自动对应类型
4.2 核心配置文件--Hibernate.cfg.xml
4.2.1 配置三部分要求
(1)数据库部分必须的
(2)hibernate部分可选的
(3)映射文件必须的
3 核心配置文件名称和位置固定的
(1)位置:src下面
(2)名称:hibernate.cfg.xml
4.2.2 补充:
(2)hibernate.jdbc.fetch_size
实质是调用 Statement.setFetchSize() 方法设定 JDBC 的 Statement 读取 数据的时候每次从数据库中取出的记录条数。
(3)hibernate.jdbc.batch_size
设3定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,类似于设置缓冲区大小的意思。batchSize 越大,批量操作时向数据库发送sql的次数越少,速度就越快。
(4)线程绑定session
<!-- 在hibernate核心配置文件中配置 -->
<propertyname="hibernate.current_session_context_class">thread</property>
5 Hibernate核心api
5.1 Configuration
到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
5.1.1 负责管理 Hibernate 的配置信息
底层信息:
数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池
持久化类与数据表的映射关系:
*.hbm.xml 文件
5.1.2 创建 Configuration 的两种方式
5.2 SessionFactory(重点)
5.2.1 使用configuration对象创建sessionFactory对象
创建sessionfactory过程中做事情:
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。
根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
5.2.2 创建sessionFactory过程中,
这个过程特别耗资源的,在hibernate操作中,建议一个项目一般创建一个sessionFactory对象
5.2.3 具体实现
(1)写工具类,写静态代码块实现
* 静态代码块在类加载时候执行,执行一次
public classHibernateUtils { static Configuration cfg = null; static SessionFactory sessionFactory= null; //静态代码块实现 static { //加载核心配置文件 cfg = new Configuration(); cfg.configure(); sessionFactory= cfg.buildSessionFactory(); } //提供方法返回sessionFactory public static SessionFactorygetSessionFactory() { return sessionFactory; } }
(2)测试类简化
5.3 Session(重点)
1 session类似于jdbc中connection
持久化类与 Session 关联起来后就具有了持久化的能力
2 调用session里面不同的方法实现crud操作
(1)添加 save方法
(2)修改 update方法
(3)删除 delete方法
(4)根据id查询 get方法
总结:
取得持久化对象的方法: get() ,load()
持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()
开启事务: beginTransaction().
管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等
3 session对象单线程对象
session对象不能共用,只能自己使用
5.4 Transaction
1 事务对象
2 事务提交和回滚方法,检查
commit(): 提交相关联的session实例
rollback(): 撤销事务操作
wasCommitted():检查事务是否提交
3 事务概念
(1)事务四个特性
原子性、一致性、隔离性、持久性
6 演示常见错误
1 在映射配置文件中,把name属性值写错了,和实体类属性名称不一样,出现异常
2 在核心配置文件中,没有引入映射配置文件
3 测试配置是否正确
(1)在工具类,写静态代码块,创建sessionFactory,过程中根据配置把表创建
(2)让工具类执行,在工具类写main方法可以了
(3)如果出现异常,弹出框
点击确定,在控制台有异常输出
4 配置文件里面属性值,双引号里面不能有空格
5 注意输入法全角问题
源代码文件:http://download.csdn.net/detail/qq_26553781/9771380
- hibernate5--1.入门及核心API
- Hibernate入门----核心API
- Hibernate5个核心接口
- hibernate5.2.2入门实践
- hibernate5快速入门
- hibernate5 快速入门
- hibernate5初入门配置实例
- 简单hibernate5.2.10入门配置
- hibernate5初入门配置实例
- hibernate5简单入门一对多,多对一,多对多的配置及注解实现
- 模版:使用Hibernate5个核心接口
- J2EE应用框架及核心组件、API
- Hibernate API及核心接口简介
- 初识Servlet生命周期及核心API
- Hibernate5总结及新特性
- Hibernate5
- Hibernate5
- Hibernate5
- redis集群搭建
- 谈谈学习方法
- OPPO使用Google三件套教程
- C#当前页面跳转当前页面
- Javascript静态变量与实例变量
- hibernate5--1.入门及核心API
- NSAppleScript execution fails in sandboxed app
- IE矩阵滤镜Matrix旋转与缩放及结合transform的拓展
- 中科院计算所培训中心|大数据专业术语汇总!
- mybatis二级缓存之ehcache
- 机器学习第三章复习(2)
- 【REST】REST、RESTFUL的理解以及SpringMVC实现Restful编程
- 横坐标为数值型;纵坐标为类目型,且在折线图右侧
- ASP.NET Core如何使用Entity Framework