返回顶部
首页 > 资讯 > 后端开发 > Python >SpringDataJPA详解增删改查操作方法
  • 670
分享到

SpringDataJPA详解增删改查操作方法

2024-04-02 19:04:59 670人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1、服务层调用dao继承的接口中的方法2、使用jpql语句进行查询3、可以引入原生的sql语句4、根据jpa规定的特殊命名方法完成查询5、动态查询1、服务层调用dao继承的接口中

1、服务层调用dao继承的接口中的方法

dao层继承的继承JpaRepository和JpaSpecificationExecutor这两个接口,JpaRepository<操作的实体类, 主键类型> 封装了基本的curd操作,JpaSpecificationExecutor<操作的实体类类型> 封装了复杂的查询(分页、排序等)。

2、使用jpql语句进行查询

可以引入jpql(JPA查询语言)语句进行查询(jpql语句类似于sql语句,只不过sql操作的是数据表和字段,jpql操作的是对象和属性,比如 from Resume where id=xxx)

详细介绍参考https://www.yiibai.com/jpa

dao层代码

public interface ResumeDao extends JpaRepository<Resume, Long>, JpaSpecificationExecutor<Resume> {
    @Query("from Resume where id=?1") // 这个"1"代表的下面方法形参中引入参数的位置作为查询id
    public Resume findByJpql(Long id); // 使用jpql语句根据id查询数据
}

测试

   @Test
    public void testJpql() {
        Resume byJpql = resumeDao.findByJpql(1L);
        System.out.println(byJpql);
    }

3、可以引入原生的sql语句

dao层

public interface ResumeDao extends JpaRepository<Resume, Long>, JpaSpecificationExecutor<Resume> { 
    
    @Query(value = "select * from tb_resume where id=?1", nativeQuery = true)
    public Resume findBySql(Long id); // 使用sql语句根据id查询数据
}

测试

@Test
    public void testSql() {
        Resume byJpql = resumeDao.findByJpql(2L);
        System.out.println(byJpql);
    }

4、根据jpa规定的特殊命名方法完成查询

可以在接口中自定义方法,而且不必引入jpql或者sql语句,这种方式叫做方法命名规则,也就是说定义的接口方法名是按照一定规则形成的,那么框架就能根据我们的方法名推断出我们的意图

dao层

public interface ResumeDao extends JpaRepository<Resume, Long>, JpaSpecificationExecutor<Resume> {
 
    public List<Resume> findByNameLike(String name);
    public List<Resume> findByNameLikeAndAddress(String name, String address);
}

测试

    @Test
    public void testMethodName() {
        List<Resume> list = resumeDao.findByNameLike("张%");
        System.out.println(list);
    }
    @Test
    public void testMethodName2() {
        List<Resume> list = resumeDao.findByNameLikeAndAddress("张%", "北京");
        System.out.println(list);
    }

5、动态查询

service层传入Dao层的条件不确定,把service拿到的条件封装成一个对象传递给Dao层,这个对象就叫做Specification(对条件的一个封装)

Specification接口中的方法

* <p>
* Optional<T> findOne(@Nullable Specification<T> var1); // 根据条件查询单个对象
* <p>
* List<T> findAll(@Nullable Specification<T> var1); // 根据条件查询所有
* <p>
* Page<T> findAll(@Nullable Specification<T> var1, Pageable var2); // 根据条件进行查询,并且进行分页
* <p>
* List<T> findAll(@Nullable Specification<T> var1, Sort var2);  // 根据条件进行查询,并进行排序
* <p>
* long count(@Nullable Specification<T> var1);  // 根据条件统计
* <p>
* interface Specification<T>
* Predicate toPredicate(Root<T> var1, CriteriaQuery<?> var2, CriteriaBuilder var3); // 用来封装查询条件
* Root:根属性(查询所需要的任何属性都可以从根对象中获取)
* CriteriaQuery:自定义查询方式,用不上
* CriteriaBuilder:查询构造器,封装了很多的查询条件(like 和等值查询等)

动态查询单个对象

 @Test
    public void testSpecification() {
        
        Specification<Resume> specification = new Specification<Resume>() {
            @Override
            public Predicate toPredicate(Root<Resume> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                // 获取到name属性
                Path<Object> name = root.get("name");
                // 使用CriteriaBuilder针对name属性构建条件(精准查询)
                Predicate predicate = criteriaBuilder.equal(name, "张三");
                return predicate;
            }
        };
        Optional<Resume> optional = resumeDao.findOne(specification);
        Resume resume = optional.get();
        System.out.println(resume);
    }

动态查询多个

@Test
    public void testSpecificationMultiCon() {
        
        Specification<Resume> specification = new Specification<Resume>() {
            @Override
            public Predicate toPredicate(Root<Resume> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                // 获取到name属性
                Path<Object> name = root.get("name");
                Path<Object> address = root.get("address");
                // 条件1:使用CriteriaBuilder针对name属性构建条件(精准查询)
                Predicate predicate1 = criteriaBuilder.equal(name, "张三");
                // 条件2:address以"北"开头(模糊匹配)
                Predicate predicate2 = criteriaBuilder.like(address.as(String.class), "北%"); // as作用将其转换为Expression,并且指定参数类型
                // 组合两个条件
                Predicate predicate = criteriaBuilder.and(predicate1, predicate2);
                return predicate;
            }
        };
        Optional<Resume> optional = resumeDao.findOne(specification);
        Resume resume = optional.get();
        System.out.println(resume);
    }

排序

@Test
    public void testSort() {
        Sort sort = new Sort(Sort.Direction.DESC, "id"); // 根据id进行倒序
        List<Resume> list = resumeDao.findAll(sort);
        for (int i = 0; i < list.size(); i++) {
            Resume resume = list.get(i);
            System.out.println(resume);
        }
    }

分页

@Test
    public void testPage() {
        
        Pageable pageable = PageRequest.of(0, 2);
        Page<Resume> all = resumeDao.findAll(pageable);
        System.out.println(all);
    }

到此这篇关于springDataJPA详解增删改查操作方法的文章就介绍到这了,更多相关SpringDataJPA增删改查内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringDataJPA详解增删改查操作方法

本文链接: https://lsjlt.com/news/164379.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringDataJPA详解增删改查操作方法
    目录1、服务层调用dao继承的接口中的方法2、使用jpql语句进行查询3、可以引入原生的sql语句4、根据jpa规定的特殊命名方法完成查询5、动态查询1、服务层调用dao继承的接口中...
    99+
    2024-04-02
  • MySQL的增删改查操作详解
    MySQL是一种功能强大且广泛使用的关系型数据库管理系统,它提供了一系列的增删改查(CRUD)操作,使得我们可以轻松地对数据库进行数据的读写和管理。 本文将详细介绍MySQL的增加(INSER...
    99+
    2023-10-02
    mysql 数据库
  • java中JDBC增删改查操作详解
    目录前言一、增删改操作1.1 PreparedStatement介绍 1.2 增删改操作  1.3 测试二、查操作2.1 通用对不同表进行一条数据查询操作2.2 通用对不同表进行多条...
    99+
    2024-04-02
  • MyBatis增、删、改、查(多表查询)操作详解
    MyBatis增、删、改、查操作 1. 增加用户操作(insert标签),返回受影响的行数.1.1 返回自增id 2. 修改用户操作(update)3. 删除用户操作(delete)4. ...
    99+
    2023-09-24
    mybatis mysql spring 数据库 spring boot
  • SpringDataJpa:JpaRepository增删改查操作
    Jpa查询 1. JpaRepository简单查询 基本查询也分为两种,一种是spring data默认已经实现,一种是根据查询的方法来自动解析成SQL。 预先生成方法 spri...
    99+
    2024-04-02
  • html增删改查操作方法是什么
    本文小编为大家详细介绍“html增删改查操作方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“html增删改查操作方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、HTML中的数据结构HTML中...
    99+
    2023-07-06
  • MySQL筑基篇之增删改查操作详解
    目录一、增加表中数据1、无自增列时2、有自增列时二、删除表中数据1、使用delete2、使用truncate三、修改表中数据四、*查询操作1、简单查询2、条件查询3、排序一、增加表中数据 1、无自增列时 1.指...
    99+
    2022-07-29
    MySQL增删改查操作 MySQL增删改查
  • node.js操作mysql(增删改查)
    最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+node-...
    99+
    2022-06-04
    操作 node js
  • mongodb的增删改查操作
    这篇文章运用了实例代码展示mongodb的增删改查操作,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。增: insert介绍: mongodb存储的是文档,. 文档是json格式的对象.语...
    99+
    2024-04-02
  • Python+Xml +操作+增删改查
    由于小编的系统需要进程间通信,想通过对Xml文件操作,来进行信息交互,于是写了一组相关的类。 xml文件: <xml version='1.0' encoding='utf-8'> <flags> ...
    99+
    2023-01-31
    操作 Python Xml
  • 详解Android中一些SQLite的增删改查操作
    在Android开发中经常要涉及到对数据的操作。Android本身提供了四种数据存储方式。包括:SharePreference,SQLite,Content Provider,...
    99+
    2022-06-06
    SQLite Android
  • JavaScala实现数据库增删查改操作详解
    目录添加jar包添加数据方法一方法二删除数据查询数据修改数据完整代码MysqlUtil代码MysqlDemo代码添加jar包 这里的Scala不是maven工程所以要找到项目结构(快...
    99+
    2023-05-14
    Java数据库增删查改 Java Scala增删查改数据库
  • SpringData JPA增删改查操作方法实例分析
    这篇文章主要讲解了“SpringData JPA增删改查操作方法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringData JPA增删改查操作方法实例分析”吧!1、服务层调用...
    99+
    2023-07-02
  • PandasDataFrame操作数据增删查改
    目录一、DataFrame数据准备二、增删改查操作1,增2,查3,改4,删一、DataFrame数据准备 增、删、改、查的方法有很多很多种,这里只展示出常用的几种。 参数inplac...
    99+
    2024-04-02
  • MySQL表的操作『增删改查』
    ✨个人主页: 北 海 🎉所属专栏: MySQL 学习 🎃操作环境: CentOS 7.6 阿里云远程服务器 🎁软件版本: MySQL 5.7.44 文章目录 1.创建表1.1...
    99+
    2023-12-22
    mysql 数据库
  • MySQL中增删改查操作与常见陷阱详解
    目录本文导读一、mysql的增删改查1、insert语句2、delete语句3、update语句原理4、select二、15种MySQL数据操作语句1、REPLACE语句2、CALL语句3、TABLE语句4、W...
    99+
    2024-04-02
  • Java实现单链表增删改查的操作方法
    这篇文章主要介绍了Java实现单链表增删改查的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:S...
    99+
    2023-06-14
  • 详解Nodejs基于mongoose模块的增删改查的操作
    MongoDB MongoDB是基于Javascript语言的数据库,存储格式是JSON,而Node也是基于JavaScript的环境(库),所以node和mongoDB的搭配能减少因为数据转换带来的时间空...
    99+
    2022-06-04
    详解 模块 操作
  • Android SQLite数据库增删改查操作的使用详解
    一、使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点...
    99+
    2022-06-06
    sqlite数据库 SQLite Android
  • mysql基本操作之增删改查
    查询查询所有列select * from 表名;例:select * from classes;查询指定列可以使用as为列或表指定别名select 列1,列2,... from...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作