hibernate03增删改查详解编程语言
编程语言 详解 增删 改查
2023-06-13 09:20:36 时间
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"
!-- 映射文件的配置
这就是ORM中的 M!! Mapping 映射文件
Relational Mapping Object
数据库中的表名以及字段 对应 实体类中的类名和属性
package:类所在的包,保证必须是全类名
class:就是配置我们的 实体类相关的信息
name:对应的是实体类的类名或者属性名
table,column:如果与实体类的类名和属性名一致,可以不设置
generator:主键生成策略
01.assigned:必须是我们手动的给ID赋值!ID的生成与数据库无关! 会抛出异常!
02.increment:从数据库表中查询到主键的最大值 (select max(id) from student)!
之后+1把这个值 给我们的主键!ID的生成与数据库有关!
03.identity:针对于mysql数据库中的主键自增
04.sequence:针对于oracle数据库中的序列!
001.在数据库中创建序列
create sequence sq_student_id
minvalue 10
maxvalue 99999999999
start with 10
increment by 10
cache 20;
002.映射文件中配置
generator
param name="sequence" sq_student_id /param
/generator
003.底层生成的sql语句
select sq_student_id.nextval from dual
首先从数据库中取得当前序列的下一个值! 之后把这个值 给我们的主键!
lazy="true" 是默认采用懒加载的方式 获取数据!
不想使用懒加载!lazy="false"
hibernate-mapping package="cn.bdqn.bean"
class name="Student" table="student" lazy="false"
id name="id"
generator /
/id
property name="age"/
property name="name"/
/class
/hibernate-mapping
/** * jdbc有常用的API * hibernate也有自己常用的API(核心) * 01.Configuration 类 :读取我们的核心配置文件----hibernate.cfg.xml * 接口 * 02.SessionFactory :初始化hibernate需要的各种参数! * jdbc.properties初始化一次! SessionFactory也是只需要初始化一次即可!写成单例! * 03.Session:之前使用的HttpSession(用户session)! 现在的session叫会话session! * hibernate就是通过session来操作对象的(增删改查)以及创建事务对象! * 04.Tranaction :进行事务的处理 * 05.Query :hibernate中的查询接口(SQL,HQL) * 06.Criteria:hibernate中的查询接口,是对query进行了简单封装! * 更能体现使用的是面向对象的思想来操作数据库!
* 01.读取核心的配置文件 在src的根目录下面! 底层规定位置! * 在实例化Configuration对象的时候通过configure() * 去src根目录下面,寻找hibernate.cfg.xml文件 Configuration configuration=new Configuration().configure(); //02.创建sessionFactory SessionFactory sessionFactory = configuration.buildSessionFactory(); //03.打开session session = sessionFactory.openSession(); //04.开启事务 transaction= session.beginTransaction();
Student student=new Student(500,5, "小白555"); //06.持久化操作---》将对象保存到数据库中 session.save(student); //不会产生 insert语句
* 01.在get()立即产生一条sql语句 * 02.首先回去hibernate的1级缓存(session)中查询有没有对应的数据 * 如果有,直接返回,就不会访问数据库! * 如果没有,去2级缓存中查询(sessionFactory)中查询! * 如果2级缓存中也没有数据,则会产生一条select语句 访问数据库! * 03.如果数据库中存在该数据 则返回 * 04.没有对应的数据 返回 null @Test public void getStudent(){ //通过get()获取数据 System.out.println("****************"); Student student=(Student) session.get(Student.class, 200); System.out.println("****************"); System.out.println(student); //验证不会访问数据库 @Test public void getStudent2(){ //通过get()获取数据 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 200); //缓存中已经存在了
public void evictStudent(){ //通过get()获取数据 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 300); //被session管理 session.evict(student); //从session缓存中 清除student对象 /** * 有人认为:1级缓存中确实是清除了!但是2级缓存中应该没有清除吧? * 不是这么理解的! 2级缓存需要我们手工配置!不配置 就不存在2级缓存! student=(Student) session.get(Student.class, 200); //再次获取id为200的数据
public void clearStudent(){ //通过get()获取数据 Student student=(Student) session.get(Student.class, 200); //被session管理 Student student2=(Student) session.get(Student.class, 300); //被session管理 //session.clear(); //从session缓存中 清除所有对象 student=(Student) session.get(Student.class, 200); //再次获取id为200的数据 student2=(Student) session.get(Student.class, 300); //再次获取id为300的数据 /** * load: 懒加载 * 01.不会立即产生sql语句 * 02.在用户使用真正对象的时候才去访问数据库! * 03.首先回去hibernate的1级缓存(session)中查询有没有对应的数据 * 如果有,直接返回,就不会访问数据库! * 如果没有,去2级缓存中查询(sessionFactory)中查询! * 如果2级缓存中也没有数据,则会产生一条select语句 访问数据库! * 04.如果数据库中存在该数据 则返回 * 05.没有对应的数据 返回 ObjectNotFoundException 异常 * 06.如果想实现和 get()一样的效果!怎么做? * 在对应的hbm.xml文件中的 class节点上 新增 lazy="false" 立即加载! @Test public void loadStudent(){ //通过load()获取数据 Student student=(Student) session.load(Student.class, 200); System.out.println("****************"); System.out.println(student); //产生sql语句 System.out.println("****************"); }
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12117.html
cjavamysqloraclexml相关文章
- Meta在服务器端用了哪些编程语言?
- 散列(Hash)建立和查找(面试常考)详解编程语言
- 常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES详解编程语言
- python提取页面内的url列表详解编程语言
- python datetime库使用代码详解编程语言
- python将png图片转换为jpeg图片详解编程语言
- 用java实现数据库的增删改查详解编程语言
- servlet实现文件上传数据增删该查详解编程语言
- java 二叉查找树(增删改查操作)详解编程语言
- java操作文件类 (文件解压缩 文件增删改查)详解编程语言
- 经典排序算法详细总结。详解编程语言
- Hibernate基础的增删改查详解编程语言
- mybatis02–增删改查详解编程语言
- 小白的Python之路 day5 python模块详解及import本质编程语言
- [产品设计]电商设计知乎总结详解编程语言
- python_Day42_锁和队列详解编程语言
- Java 遍历类中的属性详解编程语言
- 【源码学习-LinkedHashMap】详解编程语言
- java对xml节点属性的增删改查详解编程语言
- JAVASCRIPT使用setTimeout模拟setInterval效果详解编程语言
- drools规则语法详解编程语言
- 基于SpringBoot开发一个Restful服务,实现增删改查功能详解编程语言
- JDK提供的四种线程池详解编程语言
- Spring Boot2.0之 监控管理详解编程语言
- python base64加解密详解编程语言
- 用Spring和c3p0工具简单的实现增删改查详解编程语言
- 获取文件路径详解编程语言
- SAP 中的货币(Currencies)详解编程语言
- SAP SD订单状态详解编程语言
- sap可配置BOM的主要流程详解编程语言
- Django基础学习四_数据库的增删改查详解编程语言