Hibernate 再接触 CRUD】的更多相关文章

1.save 一对多双向 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persis…
为什么取1248 二进制 CRUD 移位效率高 在并发和效率选择一个平衡点 一般不会考虑幻读 因为我们不会再一个事务里查询两次,(只能设置为seralizable) 悲观锁和乐观锁的前提是read-uncommitted 在数据库中 默认是repeatable read 悲观锁是想着总有人要更改 所以使用数据库的锁 乐观锁是在程序级别的 设置一个版本号 如果前后不一致就进行自己的操作 例子 悲观所 Acocount package com.bjsxt.hibernate; import java…
缓存 就是把本来应该放在硬盘里的东西放在内存里  将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的   (适合经常访问,数据量有限,改动不大) 很多的session缓存  找不到再去数据库拿 开启二级缓存 查询缓存 比如说 我查的是2-8的数据 然后呢我又查了3-9的数据 则3-8的数据就是查询缓存,三级缓存 缓存算法 内存对象满了 拿走什么 Lru Lfu fifo 1.最近很少被使用 2.最近不常被使用 3.缓存对象设置一个数组 来一个把第一个推…
Sessionclear 否则session缓存里越来越多 Java有内存泄露吗? 在语法中没有(垃圾自动回收) 但是在实际中会有 比如读文件没有关什么的 1+N问题 解决方法:把fetch设置为lazy 什么时候就为空 Bachsize 只是缓解 使用joinfetch Category package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; i…
对象之间的关系 数据库之间的关系只有外键 注意说关系的时候一定要反面也要说通 CRUD 数据库之间设计 主键关联 单向的外键关联 中间表 一对一单向外键关联 Husband.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.J…
1.可以重载方法进行配置文件的指定 sessionFactory = new AnnotationConfiguration().configure("hibernate.xml").buildSessionFactory(); 这样读取到的就是hibernate.xml 但一般不建议修改 getcurrentsession 指的是上下文如果没有提交 就不会创建新的session opensession 永远打开新的session 用于鉴定事务边界 比如加入日志操作等 事务:要么同时完…
Xml 方法 在student.hbm.xml中 <generator class="uuid"></generator> 取值如下 1.identity:用于MySql数据库.特点:递增 <id name="id" column="id"> < generator class="identity"/> </id> 注:对于MySql数据库使用递增序列时需要在建表时对…
Category.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Category { private int id; private String name; @Id @GeneratedValue public int getI…
1 树状结构的设计 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.pe…
用一张 每一个类一张表 建立外键 第一种 一张总表 Person package com.bjsxt.hibernate; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persist…
不太重要 List 用于排序 Map  key一般是user的某个字段(多半是主键 integer) package com.bjsxt.hibernate; import java.util.HashMap; import java.util.Map; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import jav…
情景:一个老师可能有多个学生,一个学生也可能有多个老师 多对一单向: 例如老师知道自己教哪些学生,学生却不知道自己被哪些老师教 方法:使用第三张表 分别存两张表的id annotation Student.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import jav…
在1的方向加多的集合 Group.java package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import java…
多对一单向关联 数据库设计: 错误做法:在多方加外键 在多这一方加外键 第一种 annotation Group.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="t_g…
将另外一个类嵌入到另外一个类 从而合并生成一张表 Husband.java package com.bjsxt.hibernate; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import j…
例子: Husband.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.O…
凡是双向关联必设mapped by  由对方主导 wifi.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; @Entity public class Wife { private int id; priv…
<property name="show_sql">true</property> 这句话是意思显示sql语句 <property name="format_sql">true</property> 格式化输出sql语句 当类与表名不一致时  在属性前面加注解 @Table(name="_teacher") Xml 则是指定table属性 不加 注释的话 相当于加@Basic 属性名和字段名不一致…
<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> 有update create validate create-drop四种属性 update 表示如果映射的类中有加的类 会自动改表 create是指如果数据库没有创表可以自动帮创 validate会在执行操作前可以先验证有没有表 crea…
没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文件 产生sessionfactory  然后opensession 获得一个session 拿到session后直接save 不用具体的拼sql语句 OR 即hibernate帮我们屏蔽了 R relationship 这层关系 只需要面向对象就好了 第一个小程序 首先引入相关jar包 透了懒 以前…
事务:要么都要完成,一个不完成就要回滚. ACID 原子性 一致性 独立性 持久性 第一类丢失更新 第一类丢失更新 脏读(读了另外一个事务没有提交的数据) 不可重复读(在同一个事务里,对数据库里的值前后读取值不一样) 第二类丢失更新(不可重复读的特殊情况) 幻读/(插入/删除)(读的时候,插入一条数据前后不一致) repeatable read 给数据库加把锁 别的无法改这条记录 serial 安全级别最高 但是速度最慢 一般设置为2 read-committed 不设的话依赖于数据库…
一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mapping)框架没出现之前是这样,目前常用的ORM框架有JPA.hibernate.mybatis.spring jdbc等,我一开始也是使用JDBC编程,后面开始使用hibernate,有一次开发一个CRM管理系统使用的是Spring JDBC操作数据库,但个人还是不太喜欢这个框架,本人目前使用的最多还是…
首先更改配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframewor…
cascade级联,只会影响CRUD的CUD,不会影响读取.不设置级联,从多的一方能读出一的一方,设了级联,从一的一方,默认也不能读出多的一方. 如果两个对象之间有关联,不管是一对多,多对一,单向还是双向,如果从A可以导向到B: A--->B 默认情况下对A的保存不会影响到B,除非设cascade.如果A--->B--->C,从A能导航到B,B能导航到C,在B上也加上级联,对A的操作就能影响到C,但是,级联不是必须的,它只是让编程稍有方便.完全可以手动先存C,再存B,再存A.. 例子:G…
保存记录 session.save(customer); 根据主键进行查询 Customer customer = (Customer)session.get(Customer.class ,1); Customer customer = (Customer)session.load(Customer.class,1); ***** get 和load的区别:(面试题) 1.发送SQL的时机: load这个方法采用了一个技术.lazy延迟加载(懒加载).真正使用这个对象的数据的时候.(对象的数据…
本文以Group和User(一对多.多对一)双向关联为例,介绍关联关系的CRUD   下面先介绍两个属性 cascade:只影响CRUD中的CUD,即存储(save).更新(update).删除(delete) fetch:只影响CRUD中的R,即读取(get.load)   cascade(级联): 此属性仅仅帮助我们简化编程,不是必选项 如果A和B为单向关联,则在主导方设置cascade属性 如果A和B为双向关联,则在双方都要设置cascade属性 如果两个对象之间有关联关系,比如User和…
使用Session里面的方法进行CRUD操作 (1) 增加 save 方法 (2) 查找 get 方法(根据id查) (3) 修改 update 方法 (4) 删除 delete 方法 1.增加 /** * 增加操作 */ public void testCreate(){ //找到src下名为hibernate.cfg.xml的配置文件,加载核心配置文件. Configuration cfg = new Configuration(); cfg.configure(); //创建Session…
1.环境搭建,注意包结构的问题,src下建立名为META-INF的文件夹,放persistence.xml,位置放错,读不到会报错. <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i…
工具:idea.mariadb数据库 创建一个项目 ( student ) ........(使用idea创建一个springboot项目,这里我就不多说了) Maven 中的依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2…