框架-Hibernate
litengbin
这个作者很懒,什么都没留下…
展开
-
Hibernate各类概念-如何进行Hibernate的ehcache二级缓存配置
Hibernate的一级缓存是在Session上,二级缓存是在SessionFactory上先看没有开启二级缓存的情况创建了两个Session在第一个Session里第一次获取id=1的Category 会执行SQL语句第二次获取id=1的Category,不会执行SQL语句,因为有一级缓存在第二个Session里获取id=1的Category,会执行SQL语句转载 2018-01-31 11:33:41 · 249 阅读 · 0 评论 -
Hibernate基础-通过ID获取一个对象
通过id获取对象效果获取到id=6的产品的名称通过ID获取一个对象调用Session的get方法,根据id获取对象。 除了id之外,还需要传递一个类对象,毕竟需要知道获取的是哪个对象除了使用get方法,还可以使用load获取对象。 get和load的区别import org.hibernate.Session;import org.hibernate.转载 2018-01-28 13:46:59 · 2565 阅读 · 0 评论 -
Hibernate基础-删除一条数据
根据id把对象从表里删除掉 注意:hibernate在删除一条数据之前,先要通过id把这条记录取出来删除一条数据import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration; import com.how2java.pojo.转载 2018-01-28 13:47:16 · 5384 阅读 · 1 评论 -
Hibernate基础-修改(更新)一个对象
修改一个对象的属性,并更新到数据库修改一个对象的属性,并更新到数据库中1. 根据id获取该对象2. 修改该对象的属性3. 通过Session的update方法把变化更新到数据库中import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configura转载 2018-01-28 13:47:34 · 937 阅读 · 0 评论 -
Hibernate基础-使用HQL进行查询
HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL跟接近于面向对象的思维方式。 比如使用的是类的名字Product,而非表格的名字product_使用HQL,根据name进行模糊查询1. 首先根据hql创建一个Query对象2. 设置参数(和基1的PreparedStatement不一样,Que转载 2018-01-28 13:47:56 · 199 阅读 · 0 评论 -
Hibernate基础-使用Criteria进行查询
使用Criteria进行数据查询。 与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹使用Criteria,根据name进行模糊查询使用Criteria 查询数据1. 通过session的createCriteria创建一个Criteria 对象2. Criteria.add 增加约束。 在本例中增加一个对n转载 2018-01-30 16:24:47 · 313 阅读 · 0 评论 -
Hibernate基础-使用标准SQL语句进行查询
通过标准SQL语句进行查询 Hibernate依然保留了对标准SQL语句的支持,在一些场合,比如多表联合查询,并且有分组统计函数的情况下,标准SQL语句依然是效率较高的一种选择使用标准SQL,根据name进行模糊查询使用Session的createSQLQuery方法执行标准SQL语句因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。 不能保证转载 2018-01-30 16:25:19 · 368 阅读 · 0 评论 -
Hibernate关系-实现多对一
一个Product对应一个Category 一个Category对应多个Product 所以Product和Category是多对一的关系 本例讲解如何使用Hibernate实现多对一关系准备Category.javapublic class Category { public int getId() { return id; }转载 2018-01-30 16:26:26 · 201 阅读 · 0 评论 -
Hibernate关系-实现一对多
一个Product对应一个Category 一个Category对应多个Product 所以Category和Product是一对多的关系 本例讲解如何使用Hibernate实现一对多关系为Category增加一个Set集合import java.util.Set; public class Category { public int getId()转载 2018-01-30 16:27:12 · 293 阅读 · 0 评论 -
Hibernate关系-实现多对多
一种Product可以被多个User购买 一个User可以购买多种Product 所以Product和User之间的关系是多对多 many-to-many 要实现多对多关系,必须有一张中间表 user_product 用于维护 User和Product之间的关系User.javaimport java.util.Set; public class User转载 2018-01-30 16:27:53 · 241 阅读 · 0 评论 -
Hibernate各类概念-如何支持事务
Hibernate的任何对数据有改动的操作,都应该被放在事务里面. 在事务中的多个操作行为,要么都成功,要么都失败效果在同一个事务中做了两件事情1. 删除id=1的产品2. 修改id=2的产品,使得其产品名称超过了数据库中设置的长度30.提交事务。第二个任务失败了,但是因为在同一个事务中,所以第一个任务也没有生效。因此id=1的产品,依然保留下来了。转载 2018-01-30 16:28:24 · 283 阅读 · 0 评论 -
Hibernate各类概念-属性延迟加载lazyload
hibernate中的延迟加载(lazyload)分属性的延迟加载和关系的延迟加载 属性的延迟加载: 当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库演示属性的延迟加载在打印log1之前,是不会打印出sql语句的,只有在访问属性“getName()"的时候,才会访问数据库import o转载 2018-01-30 16:29:06 · 353 阅读 · 0 评论 -
Hibernate各类概念-关系延迟加载
延迟加载又叫lazyload,在one-many many-many的时候都可以使用关系的延迟加载修改配置文件 Category.hbm.xml 改为表示通过Category获取产品是延迟加载的<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"转载 2018-01-30 16:29:57 · 208 阅读 · 0 评论 -
Hibernate各类概念-级联
什么是级联什么是级联? 简单的说,没有配置级联的时候,删除分类,其对应的产品不会被删除。 但是如果配置了恰当的级联,那么删除分类的时候,其对应的产品都会被删除掉。4种级联包括上一步说的删除用得级联,级联有4种类型:all:所有操作都执行级联操作;none:所有操作都不执行级联操作;delete:删除时执行级联操作; save-update:保存和更新时执行级联操作;转载 2018-01-30 16:30:15 · 275 阅读 · 0 评论 -
Hibernate基础-对象的三种状态 瞬时 持久 脱管
实体类对象在Hibernate中有3种状态 分别是瞬时,持久和脱管瞬时 指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了 持久 指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录 脱管 指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了转载 2018-01-28 13:46:25 · 231 阅读 · 0 评论 -
Hibernate基础-插入数据
通过for循环插入10个Product对象到数据库通过Hibernate可以很方便的批量插入数据到数据库中,这是插入10条数据的效果插入数据到数据库使用Session的save方法插入数据。 import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.转载 2018-01-28 13:46:02 · 1019 阅读 · 0 评论 -
Hibernate基础-基于实例的入门教程
使用JDBC做数据库相关功能开发会做很多重复性的工作,比如创建连接,关闭连接,把字段逐一映射到属性中。 Hibernate把这一切都封装起来了,使得数据库访问变得轻松而简单,代码也更加容易维护。 第一次使用Hibernate会有一个比较多步骤的配置过程,以后再使用,就很简单了。 必读: 基于框架的程序要成功运行,对于JAR包的版本,配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导转载 2018-01-28 13:44:36 · 227 阅读 · 0 评论 -
Hibernate各类概念-实现分页查询
使用Criteria进行分页查询 无论你使用的是Oracle,Mysql,NoSQL还是DB2,分页查询的代码写法都是一样的分页,从第2个开始,一共查询5个ProductHibernate使用Criteria 来进行分页查询c.setFirstResult(2); 表示从第2条数据开始c.setMaxResults(5); 表示一共查询5条数据import ja转载 2018-01-31 11:34:04 · 222 阅读 · 0 评论 -
Hibernate各类概念-GET和LOAD的区别
通过id获取Product对象有两种方式,分别是get和load 他们的区别分别在于 1. 延迟加载 2. 对于id不存在的时候的处理延迟加载load方式是延迟加载,只有属性被访问的时候才会调用sql语句get方式是非延迟加载,无论后面的代码是否会访问到属性,马上执行sql语句import org.hibernate.Session;import org.转载 2018-01-31 11:34:23 · 203 阅读 · 0 评论 -
Hibernate各类概念-openSession与getCurrentSession的区别
Hibernate有两种方式获得session,分别是: openSession和getCurrentSession 他们的区别在于 1. 获取的是否是同一个session对象 openSession每次都会得到一个新的Session对象 getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象转载 2018-01-31 11:34:37 · 214 阅读 · 0 评论 -
Hibernate各类概念-openSession和getCurrentSession的区别
Hibernate有两种方式获得session,分别是: openSession和getCurrentSession 他们的区别在于 1. 获取的是否是同一个session对象 openSession每次都会得到一个新的Session对象 getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象转载 2018-01-31 11:34:57 · 213 阅读 · 0 评论 -
Hibernate各类概念-N+1什么意思?以及List和Iterator的区别
Hibernate有缓存机制,可以通过用id作为key把product对象保存在缓存中 同时hibernate也提供Query的查询方式。假设数据库中有100条记录,其中有30条记录在缓存中,但是使用Query的的list方法,就会所有的100条数据都从数据库中查询,而无视这30条缓存中的记录 N+1是什么意思呢,首先执行一条sql语句,去查询这100条记录,但是,只返回这100条转载 2018-01-31 11:35:11 · 390 阅读 · 0 评论 -
Hibernate各类概念-如何查询总数
返回满足条件的总数查询总数首先还是准备一个有统计函数的语句select count(*) from ....根据这条SQL语句创建一个Query对象,调用Query对象的uniqueResult()方法,返回一个long型的数据,即查询总数。import org.hibernate.Query;import org.hibernate.Session;import or转载 2018-01-31 11:35:30 · 2946 阅读 · 0 评论 -
Hibernate各类概念-乐观锁原理以及其配置方法
Hibernate使用乐观锁来处理脏数据问题首先看不使用乐观锁的情况故意创造一个场景来制造脏数据。1. 通过session1得到id=1的对象 product12. 在product1原来价格的基础上增加10003. 更新product1之前,通过session2得到id=1的对象product24. 在product2原来价格的基础上增加10005. 更新转载 2018-01-31 11:35:58 · 351 阅读 · 0 评论 -
Hibernate各类概念-C3P0数据库连接池配置办法
建立数据库连接时比较消耗时间的,所以通常都会采用数据库连接池的技术来建立多条数据库连接,并且在将来持续使用,从而节约掉建立数据库连接的时间 hibernate本身是提供了数据库连接池的,但是hibernate官网也不推荐使用他自带的数据库连接池。 一般都会使用第三方的数据库连接池 C3P0是免费的第三方的数据库连接池,并且有不错的表现 可以下载c3p0的jar包 c3p0-0.转载 2018-01-31 11:36:22 · 280 阅读 · 0 评论 -
Hibernate注解-使用注解示例
Hibernate的注解是什么? 简单的说,本来放在hbm.xml文件里的映射信息,现在不用配置文件做了,改由注解来完成Product.hbm.xml这是Product.hbm.xml,用于提供类与表的映射,以及属性与表字段的映射关系<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate M转载 2018-01-31 11:36:41 · 399 阅读 · 0 评论 -
Hibernate注解-多对一关系映射注解,一对多关系映射注解,多对多关系映射注解
多对一注解把多对一改成用注解来实现1. 把Category的id和name字段改为支持注解注: 分类的getName上并没有加上@Column(name="name"),也可以达到映射的效果。 因为getName方法默认会被认为是字段映射。 除非加上了@Transient 才表示不进行映射2. 把Product的getCategory进行多对一映射 @ManyToOne转载 2018-02-01 22:11:23 · 755 阅读 · 0 评论 -
Hibernate注解-常见注解一览
这里列出了常用的注解以供使用的时候查询类相关注解@Entity —— 将一个类声明为一个实体bean(即一个持久化POJO类) @Table —— 注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字属性相关注解@Id —— 注解声明了该实体bean的标识属性(对应表中的主键)。 @Column —— 注解声明了属性到列转载 2018-02-01 22:11:51 · 402 阅读 · 0 评论 -
Hibernate注解-应该使用注解还是XML配置文件?
那么到底该用注解,还是xml文件配置方式呢? 他们各自有各自的优缺点: XML配置方式: 优:容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过xml配置会方便后人理解整个系统的架构,修改之后直接重启应用即可 缺:比较繁琐,配置形态丑陋, 配置文件过多的时候难以管理 注解方式: 优:方便,简洁,配置信息和 Java 代码放在一起,有助于增强程序的内聚性。 缺:转载 2018-02-01 22:12:24 · 1430 阅读 · 0 评论 -
Hibernate注解-类与属性
hibernate 注解分类hibernate里常用注解包括,类注解,属性注解,关系注解,其他的注解本知识点讲解类注解和属性注解类注解在注解示例-注解方式的Product中,Product类声明前面有两个注解:@Entity 和 @Table(name = "product_")@Entity 表示这是一个实体类,用于映射表@Table(name = "product_转载 2018-02-01 22:10:46 · 260 阅读 · 0 评论 -
Hibernate各类概念-Hibernate的一级缓存
hibernate默认是开启一级缓存的,一级缓存存放在session上两次获取id=1的category对象第一次通过id=1获取对象的时候,session中是没有对应缓存对象的,所以会在"log1"后出现sql查询语句。第二次通过id=1获取对象的时候,session中有对应的缓存对象,所以在"log2"后不会出现sql查询语句所以总共会看到一次SQL语句出现转载 2018-01-30 16:30:38 · 173 阅读 · 0 评论