前言: 为什么链表的插入操作头结点一定要用指向指针的指针?之前自己对这个问题总是一知半解,今天终于花了点时间彻底搞懂了。 总的来说这样做的目的是为了应对“空链表”的情况。...比如下面的一段程序 1 // 链表的头指针为什么是指向指针的指针.cpp : 定义控制台应用程序的入口点。...如果对上面红字还是不理解可以看下面程序 1 // 为什么链表的插入操作头结点一定要用指向指针的指针_延续.cpp : 定义控制台应用程序的入口点。
指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。 ? 1.3.3.3 为什么要学习Hibernate ?...属性:数据库名称,可忽略 --> <!...,删除原有表,重新创建,如果没有表,新建表。...(测试) u create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。...); session.update(customer); tx.commit(); session.close(); } @Test // 删除操作
持久化类三种状态切换 3.Hibernate一级缓存 3.1. 示例---演示一级缓存的存在 3.2. 持久化对象具有自动更新数据库能力 为什么持久化对象具有自动更新数据库能力? 3.3....简单说:无OID 与数据库中的信息无关联,不在session管理范围内。...为什么持久化对象具有自动更新数据库能力? ? 3.3....,与session关联,在删除 注意:如果执行delete操作,先删除一级缓存,在删除数据库中的数据。...级联删除 我们在删除客户时,也要删除订单,如果没有做级联,那么这个操作是不允许。 为了维护数据完整性 ? 想要完成操作:我们可以在客户中添加cascade=”delete”; ?
Hibernate简介 Hibernat是一个ORM(关系映射)框架,对JDBC访问数据库的操作进行了简化,并且将数据库表中的字段和关系映射为对象,简化了对数据库的操作。 2....为什么要用Hibernate 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。...load方法,而集合默认为懒加载 5. session session是维护数据库连接并且执行查询,更新,删除操作,Session不是线程安全的 6. update和saveOrUpdate...但它不会级联删除 delete: 级联删除, 但不具备级联保存和更新 all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新. all: 级联删除...POJO的要求 必须有一个无参的构造方法 不能为final 属性要为Private,并且提供get/set 18. inverse 在多对多关系中默认为flase 表示为两端都在维护关系 应该改为一端维护关系而不是两端
Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用?...Session的缓存由hibernate维护,用户不能操作缓存内容; 如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。...只有Teacher插入或删除时才会触发对中间表的操作。...在Hibernate中,@NameQuery用来定义单个的命名查询,@NameQueries用来定义多个命名查询。 为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?...为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?
assinged是自然主键的方式,这种策略需要用户指定ID才可以,在这个知识点里先忽略。 其他的方式比如sequence通过序列生成主键。identity,increment等是自动增长。...临时对象:OID为null、不再Session中、数据库中无记录、 持久化对象:OID不为Null、在Session中,有相关记录,清理时根据属性变化更新数据库。...删除对象:OID不为null、从Session中删除、有相关记录、已经计划从数据库中删除、清理缓存就会执行删除、不能再使用。...而持久化的对象,OID是不能随便更改的,这也是为什么前面的setId推荐设置成private的访问权限。 load()和get() 他们都是加载一个对象,或者从缓存中查找。...delete() 如果删除的对象时一个游离态的对象,那么需要先进行持久化,在删除。 replicate() 这个方法可以跨Sessionfactory拷贝对象。
mybatis的单表操作也是贼麻烦的事,因为筛选的条件可能会各种各样,所以你不得不写很多动态sql来兼容查询条件,这也让我不能集中精力去处理业务。 每当这时候,我怀念Hibernate了。...嘿嘿,Hibernate加字段就贼简单,单表操作也是贼方便。但我依然不喜欢用Hibernate,哈哈。...它提供了hibernate的单表CRUD操作的方便同时,又保留了mybatis的特性。...常用实体注解 MP通过ORM模式封装了常用的CRUD操作,自然少不了实体注解,先来看看都有哪些注解 [MP常用实体注解.png] 其中实体无注解化设置可以如下处理: 当数据库的表字段名是驼峰命名时无需注解处理...#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 2 #字段策略 0:"忽略判断
name:缓存名称 maxElementsInMemory:内存中最大缓存对象数 maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大 eternal:true表示对象永不过期,此时会忽略...@Cacheable(key = "#id") public User getUserById(Long id) { System.out.println("缓存中无值...key 上 @CacheEvict 删除操作,当数据库中的数据删除后,相关的缓存数据也要自动清除。...除了采用 @Cacheable 、@CachePut 等方法注解解耦式操作缓存外,我们也可以使用 CacheManager显示方式手动来操作缓存。...User user = cache.get(id, User.class); if (user == null) { System.out.println("缓存中无值
此篇记录大部分自己学习中用到的Spring data 注解,附带记录了一些业务中经常用到的其他注解 ---- @JsonIgnoreProperties 类注解 作用是json序列化时将Java bean中的一些属性忽略掉...jsonplugin通过java的反射机制将pojo转换成json,会把hibernateLazyInitializer也拿出来操作,但是hibernateLazyInitializer无法由反射得到,...所以需要在实体类上通过@JsonIgnoreProperties注解告诉jsonplugin,对象转json的时候,需要忽略的属性。...4)数据库删除 @PreRemove和@PostRemove事件的触发由删除实体引起: @PreRemove事件在实体从数据库删除之前触发,即在调用remove()方法删除时发生,此时的数据还没有真正从数据库中删除...@NoArgsConstructor & @AllArgsConstructor(lombok) @NoArgsConstructor,提供一个无参的构造方法。
每样产品都是拼命的复杂化,其实,它们实在是忽略了一般的用户只需要一小部分功能而已。默认的功能应该是能够满足普通用户的常见需求的,那样才算是一个好的产品。我不认为hibernate做到了这点。...但evict()方法只能稍微提高批量操作的性能,因为不管有没有使用evict()方法,Hibernate都必须执行1万条update语句,才能更新1万个Customer对象,这是影响批量操作性能的重要因素...API进行Hibernate批量更新和Hibernate批量删除都不值得推荐。...而直接通过JDBC API执行相关的SQL语句或调用存储过程,是hibernate批量更新和批量删除的最佳方式。...框架本身并没有对错一说,只有适合不适合,任何框架都有其自身的能力范围,hibernate封装了很多有用的API给我们,降低了操作数据库的难度和复杂度,同时也减少了模板代码的数量,但hibernate留给开发者的可操作空间相对
Hibernate学习笔记1 1.Hibernate框架介绍 1.1.什么是hibernate 1.2.什么是orm 1.3.为什么使用hibernate框架 2.Hiberate框架学习目标 3.Hibernate...为什么使用hibernate框架 Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码 Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现...配置这个属性后,我们可以进行表的自动创建 Create-drop 每次都会创建一个新的表,执行完成后删除。...Session常用的方法: save 保存对象 update修改操作 delete删除 get/load根据id进行查询...address from Customer; 得到的是List结果 要想得到List结果 在Customer类中生成以name,address为参数的构造,注意,无参数构造也要有
获取数据 无。 3. 解除关联关系? 有影响。...删除数据对关联关系的影响? 有影响。 inverse=false, 有控制权, 可以删除。先清空外键引用,再删除数据。...cascade 属性 cascade 表示级联操作 【可以设置到一的一方或多的一方】 none 不级联操作, 默认值 save-update 级联保存或更新 delete...级联保存、更新、删除 hibernate常见面试题: inverse与cascade区别?...2) 获取数据 无。 3) 解除关系 // 有影响。 // inverse=false ,有控制权, 解除关系就是删除中间表的数据。 // inverse=true, 没有控制权,不能解除关系。
105.为什么要用 spring boot? 配置简单 独立运行 自动装配 无代码生成和 xml 配置 提供应用监控 易上手 提升开发效率 106.spring boot 核心配置文件是什么?...十二、Hibernate 113.为什么要使用 hibernate? hibernate 是对 jdbc 的封装,大大简化了数据访问层的繁琐的重复性代码。...124.hibernate 实体类必须要有无参构造函数吗?为什么?...hibernate 中每个实体类必须提供一个无参构造函数,因为 hibernate 框架要使用 reflection api,通过调用 ClassnewInstance() 来创建实体类的实例,如果没有无参的构造函数就会抛出异常...如果唯一磁盘的磁盘节点崩溃了,不能进行以下操作: 不能创建队列 不能创建交换器 不能创建绑定 不能添加用户 不能更改权限 不能添加和删除集群节点 唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西
这迫使Hibernate对所有被管理的实体执行脏检查,并为所有未决的插入、更新或删除操作创建和执行SQL语句。这会减慢应用程序,因为它阻止了Hibernate使用一些内部优化。...错误9:逐个更新或删除巨大的实体列表 在你看着你的Java代码时,感觉逐个地更新或删除实体也可以接受。这就是我们对待对象的方式,对吧?...数据库将会非常高效地处理这些操作。 不幸的是,用JPA和Hibernate操作起来则没有那么容易。每个实体都有自己的生命周期,而你如果要更新或删除多个实体的话,则首先需要从数据库加载它们。...幸运的是,你可以使用JPQL、原生SQL或Criteria查询对JPA和Hibernate执行相同的操作。 但是它有一些你应该知道的副作用。在数据库中执行更新或删除操作时,将不使用实体。...这提供了更佳的性能,但它同时忽略了实体生命周期,并且Hibernate不能更新任何缓存。
十二、Hibernate 113. 为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。...list = query.list(); Hql: 具体分类1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数 HQL和SQL的区别 HQL是面向对象查询操作的...,持久化操作 tx.commit();//提交事务 关闭Session 关闭SesstionFactory 120. get()和 load()的区别?...124. hibernate 实体类必须要有无参构造函数吗?为什么?...另外再提醒一点,如果你没有提供任何构造方法,虚拟机会自动提供默认构造方法(无参构造器),但是如果你提供了其他有参数的构造方法的话,虚拟机就不再为你提供默认构造方法,这时必须手动把无参构造器写在代码里,否则
虽然Hibernate号称低侵入式设计,对持久化类基本不做要求,但是实际上为了一些优化效率而言,遵守一定的规则则可以提高我们框架的运行效率。 首先,在该类中需要提供一个无参的构造器。...因为我们的持久化类和数据库中具体的数据表形成了映射,那么我们从数据库中取出的数据都会被转换成持久化类的对象返回,这里的无参构造器就是用于框架在反射时构建持久化类对象时候使用的。...当然,这一点一般不用我们关心,在Java类中如果没有显式指定构造器都会有一个默认的无参构造器。 ...三、使用Hibernate完成对数据库的crud操作 上述主要介绍了有关Hibernate持久化对象的一些基本状态等内容,但是对于上图中具体方法调用后,持久化对象状态改变情况并不是很直观。...3、删除持久化实体 Hibernate中提供delete方法通过持久化对象来删除数据表中的一行记录。
hibernate的基础还是java的反射机制 总结: hibernate是对jdbc进行轻量级封装的orm框架,充当项目的持久层。 为什么需要Hibernate ?...我们使用手动配置hibernate方式开发一个hibernate项目,完成crud操作,开发流程: 开发流程: 创建一个项目 画出一个简单的项目框架示意图 引入一个hibernate开发包(从网上下载...-- 让mysql自动给我们创建表 ,create,表示如果没有该表则创建,如果有,删除后,再创建--> 20 <!...不直接对数据库进行操作、 1. ...他应当有一个无参的构造方法(hibernate反射) 7. Pojo类其实就是一个javaBean,有些人将pojo也称之为Data对象.
删除-创建-操作 create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。...删除-创建-操作-再删除 update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model...没表-创建-操作 | 有表-更新没有的属性列-操作 validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...String pwd) { this.name = name; this.age = age; this.pwd = pwd; } //...忽略...2") public int modifyName(String name,Long id); 注意:在执行修改和删除的时候必须添加@Modifying注解,ORM才知道要执行写操作,update/delete
[删除-创建-操作] create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。...[删除-创建-操作-再删除] update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model...[没表-创建-操作 | 有表-更新没有的属性列-操作] validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...String pwd) { this.name = name; this.age = age; this.pwd = pwd; } //...忽略...2") public int modifyName(String name,Long id); 注意:在执行修改和删除的时候必须添加@Modifying注解,ORM才知道要执行写操作,update/delete
以后操作这个java类,就相当于操作数据库的对应的这张表了....-- create: 没有 :hibernate根据映射文件创建对应的表,如果有表:删除再创建 create-drop:没有 :hibernate根据映射文件创建对应的表...(如果类中的属性名和表中的字段名一致,column可以忽略) length : 字段的长度(自动创建表) not-null : 非空(自动创建表) unique : 唯一(自动创建表...持久化操作的核心API....("郝强吉吉"); session.update(customer); transaction.commit(); session.cloase(); } 删除操作
领取专属 10元无门槛券
手把手带您无忧上云