城管希课堂之继续Hibernate
主键:
主键的规则:不能重复不能修改
主键的分类:
自然主键 表里面有一个字段 符合主键的规则 就直接用这个字段 作为主键 身份证
代理主键 表里没有一个字段 符合主键的规则 自己创建一个id 作为表的主键 这个键叫做代理主键
主键生成策略
1. identity
主键自增 使用数据库中的主键自增
插入时 打印sql时 不会插入id
2. increment
主键自增 由hibernate来管理
插入数据时 会先去数据库中查询当前最大id
然后把查出来的id+1 再插入数据
3. uuid
全球不重复的唯一标识(32位 字符串)
注意:id必须使用字符串类型
4. native(最常用的 三合一)
根据你使用数据库类型来选择使用
下面三个策略之一
所有数据库不是支持identity 就是支持序列
identity + sequence + hilo
5. hilo(高低位算法)
将主键交给hibernate处理 使用自己的算法 帮你维护主键
6. assigned
由你自己维护主键 插入数据时需要有主键
使用的代理主键
7. sequence oracle数据库默认的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.lanou3g"><!-- 配置表与实体类的关系 name:实体类全类名table:表名package:填包名 填上后 底下再写全类名可以省略包名--><class name="User" table="user"><!-- id:表示主键注意:没有主键 不能使用hibernatename:表示类中的成员变量名column:表示这个成员变量所代表的 表中的字段名--><id name="id" column="id"><!-- 主键的生成策略 主键自增策略 --><generator class="native"></generator></id><!-- property:表示除了主键以外的属性--><property name="username" column="username"></property><property name="password" column="password"></property></class>
</hibernate-mapping>
主配置文件 文件名: hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- hibernate数据库配置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!-- 加载mysql的方言包 limit --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><!-- 开启打印sql语句 --><property name="hibernate.show_sql">true</property><!-- 开启格式化sql语句 --><property name="hibernate.format_sql">true</property><!-- 自动更新表结构 没有表会帮你创建出来表--><property name="hibernate.hbm2ddl.auto">update</property><!-- 设置数据库隔离级别 (etc/hibernate.properties文件)默认的隔离级别(1|2|4|8)#hibernate.connection.isolation 4 1.赃读2.不可重复读3.幻读(虚读)隔离级别READ UNCOMMITED 读未提交 1 2 3 1READ COMMITED 读已提交 2 3 2REPEATABLE READ 可重复读 3 4Serializable 串行化 都能避免 8隔离级别使用1个字节来存储的0001001001001000--><property name="hibernate.connection.isolation">4</property><!-- 映射数据库表对应的 映射文件的路径注意:路径从包名开始 并且中间使用反斜杠相隔--><mapping resource="com/lanou3g/User.hbm.xml"/></session-factory>
</hibernate-configuration>
Hibernate的三种形态
1.瞬时态
没有ID 没有跟session产生关系
2.持久态
有ID 跟session产生了关系
3.游离态
有ID 没有跟session产生关系
hibernate在操作数据库时 就是将持久态的对象同步到数据库
@Test
public void fun1() {//保存一个用户Session session = HibernateUitl.getOpenSession();Transaction transaction = session.beginTransaction();User user = new User();//瞬时态user.setUsername("taylor"); session.save(user);//持久态transaction.commit();session.close();//游离态
}
hibernate会在你提交事务之后 把持久态的对象同步到数据库
@Test
public void fun2() {Session session = HibernateUitl.getOpenSession();Transaction transaction = session.beginTransaction();//使用get方法查询一个对象User user = session.get(User.class, 1);user.setUsername("swift");transaction.commit();session.close();
}
存储时 有两种:
缓存(读写速度快 效率高)
硬盘(读写文件 速度慢)
当你调用get方法去数据库查询时 数据库给你返回的结果集 会被hibernate封装成对象
并且会在缓存中保存一份
当你再次用get方法查询时 hibernate会先到缓存中去查找 有没有该id的对象
有就直接返回缓存中的对象
没有就使用sql语句去操作数据库查询
@Test
public void fun3() {Session session = HibernateUitl.getOpenSession();Transaction transaction = session.beginTransaction();User user1 = session.get(User.class, 1);User user2 = session.get(User.class, 1);User user3 = session.get(User.class, 1);User user4 = session.get(User.class, 1);User user5 = session.get(User.class, 1);System.out.println(user2 == user5);transaction.commit();session.close();
}
测试时只打印一次sql查询语句
快照:
用get方法查询时
hibernate会把结果集保存到缓存中一份 也会在快照中保存一份
当你最终提交事务操作数据库的时候hibernate会对比缓存与快照中的数据
一样就不存了 反之会同步到数据库
@Test
public void fun4() {Session session = HibernateUitl.getOpenSession();Transaction transaction = session.beginTransaction();User user = session.get(User.class, 1);user.setUsername("taylorSwift");user.setUsername("mayDay");session.update(user);transaction.commit();session.close();
}
城管希课堂之继续Hibernate相关推荐
- 城管希课堂之Servlet
ServletConfig对象(每个servlet都有) 域对象 域就是表示在一定范围内 有作用的对象 ServletContext(作用范围内最大的域对象) 作用于整个工程(项目) 都能使用该对象 ...
- 城管计算机知识,城管小课堂:信息化小知识
都说如今是信息化时代,WiFi.5G.网课--随便哪个词,大家都很熟悉,也都与我们的生活息息相关.那么,城管工作中,又有哪些信息化专有名词? 这些专有名词,大家是不是都熟悉呢? 一起走进今天的城管小课 ...
- 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
点击上方蓝字关注我们 为了进一步发挥电子白板在课堂教学中的优势,实现教师信息技术与教育教学的深度融合.10月13日下午,海安市长江路幼儿园组织全体教师在城南分园多功能厅进行了希沃一体机操作技能培训. ...
- 破解希沃立知课堂——查看课件篇
声明 这个程序只是用来演示查看后台和对接后台的原理和过程,供代码学习参考,请勿滥用! 起因 因为上海疫情,我们所有的活动都得在线上完成,作为一个新时代好学生,我该做点什么了. 我的学校选择的上课平台是 ...
- Hibernate课堂笔记
Hibernate课堂笔记 Hibernate第一天 一:hibernate的基础知识 Hibernate的整体思想就是"操作对象的过程,就是操作数据库表的过程".如图: 1:Hi ...
- 培智学校计算机教学案例,希沃电子白板在培智语文课堂教学中的运用案例分析——以课例《四季的衣服》为例...
内容摘要:随着信息技术的不断发展,希沃电子白板在培智课堂教学中得到了广泛的推广与运用,为学生提供了丰富的学习资源,将其融入培智教学,能为学生呈现出一种富有趣味性和知识性的课堂,能调动学生积极性,提高学 ...
- 计算机白板培训报道,巧用白板,增色课堂——南宁市五象教育集团小学部开展希沃白板五实操培训活动...
原标题:巧用白板,增色课堂--南宁市五象教育集团小学部开展希沃白板五实操培训活动 南宁市五象教育集团 2020.9.22 巧用白板 增色课堂 ······● -- ●······ 近日,南宁市五象教育 ...
- 打造专递课堂,即构成为希沃专递课堂实时音视频技术唯一提供方
日前,在南昌举办的第75届中国教育装备展上,希沃和即构zego打造的互动录播方案亮相.现场将展厅设置为授课教室,广州.赣州.南昌三个分会场为听课教室,以每分钟一场的高频次互动演示,模拟了身处不同地区的 ...
- 希沃展台如何使用_【希沃视频展台--让课堂展示从未如此轻松!】PjTime.COM 综合导购 希沃...
无论是作业试卷的讲解,还是实验过程展示,课堂展示对于课堂效率的提升始终起着重要的作用,然而目前市场上还是充斥着不少操作复杂.清晰度十分尴尬的展台产品,影响着老师的课堂效果,为此我们特意打造了希沃 7系 ...
最新文章
- python自学网站有哪些-Python自学之路-前期准备
- 048_Calendar日历
- oracle中序列号的使用
- 彻底弄懂css3的flex弹性盒模型
- python 加密解密_python加密解密
- Beetlex之websocket/tls服务压测工具
- python语法学习—实现猜拳游戏
- pycharm cpu占用低_AMD的CPU游玩2077提升帧数的办法
- linux限制组访问权限,linux用户和组管理以及文件权限访问控制ACL策略
- VScode+远程服务器docker+C/C++ 代码挑战配置
- STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
- Hadoop组件概览
- IBM Think 2019核心议题:如何打造可信人工智能
- matlab 计算图像峰值信噪比,基于Matlab计算峰值信噪比PSNR及均方根误差MSE
- Flutter框架优缺点
- RGB565 转 RGB
- 人脸识别-特征脸方法
- Java生成文件的md5文件方法的代码
- matlab符号计算实验心得,Matlab符号计算总结
- warning: require(./admin.php),WordPress提示require_once() Failed opening required的解决方法