2021-5-14hibernate核心开发接口(API)(下)

简介: persist()delete()代码:update()代码:根据id 查询get()根据id查询 load()

persist()


persist()JPA的接口,不是 hibernate提供的方法

该方法可以用来插入

20210515103214477.png20210515103421953.png


插入之后的结果:

20210515103444828.png


delete()


20210515103558607.png


答案是不能删除一条记录

在根据主键的值来进行删除的情况下,从内存中申请了一个Teacher对象并指定name 和title,该写法并没有指定id 所以说是不能够进行删除的


session.delete()根据主键id删除。

t.setId(9) 确定删除id=9的记录,且此记录存在。

id 若不存在,程序无法删除!(删除的前提基础就是该对象要存在)

下面来进行正确的删除操作


(以删除id为8的为例)

删除之后的结果:

20210515104418775.png


代码:


import cn.edu.ldu.Utils.HbnUtils;
import cn.edu.ldu.entity.Teacher;
import org.hibernate.Session;
import org.junit.Test;
public class CRUDTest {
    @Test
    public void testDelete(){
        // 1. 获取session对象
        Session session = HbnUtils.getSession();
        try{
            // 2. 开启事务
            session.beginTransaction();
            // 3. 执行CRUD操作
            Teacher t = new Teacher();
            t.setId(8);
            session.delete(t);
            // 4. 提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            // 5. 回滚
            session.getTransaction().rollback();
        }
    }
}


update()


为了更新指定的一条记录,记录要保证唯一,那么就根据主键来进行确定

所以和删除操作类似,一定要指定记录的 id

假如以更新id 为1的记录为例:


代码:


import cn.edu.ldu.Utils.HbnUtils;
import cn.edu.ldu.entity.Teacher;
import org.hibernate.Session;
import org.junit.Test;
public class CRUDTest {
    @Test
   public void testUpdate(){
        Session session = HbnUtils.getSession();
        try{
            session.beginTransaction();
            Teacher t = new Teacher("徐攀","啥也不是");
            t.setId(1);
            session.update(t);//之前那开启事务处理
            session.getTransaction().commit();
        }catch (Exception  e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }
}


20210515105038175.png


就这样,一号记录徐攀普林斯顿大学博士变成了啥也不是


根据id 查询get()


20210515105428474.png


重写 toString() 的代码已经在前面贴过了,这里再cv一发

@Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", title='" + title + '\'' +
                '}';
    }


要注意,get()返回的是一个 Teacher 对象,在使用的过程中,第二个参数是id

执行结果:

20210515110112849.png


代码:

import cn.edu.ldu.Utils.HbnUtils;
import cn.edu.ldu.entity.Teacher;
import org.hibernate.Session;
import org.junit.Test;
public class CRUDTest {
    @Test
    public void testGet(){
        Session session = HbnUtils.getSession();
        session.beginTransaction();
        // 通过id查询一条记录
        try{
            Teacher teacher = session.get(Teacher.class, 2);//反射机制
            System.out.println(teacher);
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }
}


根据id查询 load()


我们按照同样的方式将get改成load 之后可以发现:


20210515110425625.png


结果是一样的

get()load() 区别

load 是一种延迟加载

注释掉输出语句之后可以发现

get() :

20210515111801952.png


load() :

20210515111822430.png

get()hibernate 输出,但是load 没有

这说明:

get() 直接从数据库加载,立即执行,不会延迟;

load() 等到真正用到对象的内容时才发出sql语句,称之延迟加载。


20210515112049930.png


截至目前,CURDTest类的全部内容如下:

import cn.edu.ldu.Utils.HbnUtils;
import cn.edu.ldu.entity.Teacher;
import org.hibernate.Session;
import org.junit.Test;
public class CRUDTest {
    @Test
   public void testUpdate(){
        Session session = HbnUtils.getSession();
        try{
            session.beginTransaction();
            Teacher t = new Teacher("徐攀","啥也不是");
            t.setId(1);
            session.update(t);//之前那开启事务处理
            session.getTransaction().commit();
        }catch (Exception  e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }
    @Test
    public void testGet(){
        Session session = HbnUtils.getSession();
        session.beginTransaction();
        // 通过id查询一条记录
        try{
            Teacher teacher = session.get(Teacher.class, 2);//反射机制
            System.out.println(teacher);
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }
    @Test
    public void testLoad(){
        Session session = HbnUtils.getSession();
        session.beginTransaction();
        // 通过id查询一条记录
        try{
            Teacher teacher = session.load(Teacher.class, 2);//反射机制
            System.out.println(teacher);
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }
    }
    @Test
    public void testSave(){
        // 1. 获取session对象
        Session session = HbnUtils.getSession();
        try{
            // 2. 开启事务
            session.beginTransaction();
            // 3. 执行CRUD操作
            Teacher t = new Teacher("wuyt","学生");
            session.save(t);
            // 4. 提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            // 5. 回滚
            session.getTransaction().rollback();
        }
    }
    @Test
    public void testPersist(){
        // 1. 获取session对象
        Session session = HbnUtils.getSession();
        try{
            // 2. 开启事务
            session.beginTransaction();
            // 3. 执行CRUD操作
            Teacher t = new Teacher("taotaotao","学士");
            session.persist(t);
            // 4. 提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            // 5. 回滚
            session.getTransaction().rollback();
        }
    }
    @Test
    public void testDelete(){
        // 1. 获取session对象
        Session session = HbnUtils.getSession();
        try{
            // 2. 开启事务
            session.beginTransaction();
            // 3. 执行CRUD操作
            Teacher t = new Teacher();
            t.setId(8);
            session.delete(t);
            // 4. 提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            // 5. 回滚
            session.getTransaction().rollback();
        }
    }
}


未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。


文章知识点与官方知识档案匹配,可进一步学习相关知识

Java技能树类和接口类和面向对象24578 人正在系统学习中

目录
相关文章
|
3月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
3月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
4月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
3月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
4月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
566 152
|
3月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
4月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
3月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
4月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
3月前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。