download: 慕课网-高并发 高性能 高可用 MySQL 实战
Spring数据JPA/MongoDB的二次封装,创建一个更易用的数据访问层
最近在做一个新项目,因为我们项目组一直在用MongoDB数据库,所以我准
download: 慕课网-高并发 高性能 高可用 MySQL 实战 Spring数据JPA/MongoDB的二次封装,创建一个更易用的数据访问层 最近在做一个新项目,因为我们项目组一直在用MongoDB数据库,所以我准备在Spring Data MongoDB上尝试新项目。虽然长期使用Spring Data JPA,熟悉Spring数据的相关CRUD和动态查询封装,但是自带的封装显然不能满足我们的需求。这篇文章将告诉你我的问题和解决方法。 注意:MongoRepository/JPARepository都是继承自PagingAndSortingRepository,除了对应的数据库不同之外,功能基本相同,所以本文的二次封装也可以用在JPARepository上。 1.我遇到的问题 问题一 在Spring数据中,可以通过继承MongoRepository/JPARepository的接口来获得CRUD和分页的能力,但是这种能力只满足基本的CRUD操作和分页。对于两个极其常见的操作,比如更新数据库中的某个字段和多条件查询,没有提供这个接口。 准确的说是提供了多条件查询的能力,但是不适合使用。它必须使用你的类作为查询条件,并且这个类的变量名必须与数据库表中的字段名一致。这可以让我们很简单的想到用PO class作为这个查询条件。 然而,在某些规范中,PO类应该是一个具有全参数构造函数的不可变类高性能mysql,这使得首先创建这个类,然后将值赋给相应的查询字段是不可行的。这里,我举个简单的例子。我拥有一个数据表的映射对象:User,俗称PO。 然后,如果我想单独更新name字段,我需要拥有整个User对象中的所有属性,因为Repository接口提供的能力是把new操作和update操作放在一起(save方法),每次更新都是所有字段的更新,这是我不想看到的,也是极其麻烦的。 然后就是多条件查询的问题。如果我想使用多条件查询,我们先来看看它的参数是什么: 可以清楚地看到,它是一个叫做Example的对象。如果我想使用它,它应该是这样的: 趣味测试(){ val user = CssUser() User.name = "我要查询的参数的具体值" userRepository.findAll(例如(user)) } 复制代码 这里我定义了一个CssUser作为它的查询条件类,这个类的内容和User类的几乎一样。因为我的User类是一个全参数的构造函数,没有办法直接创建一个空对象进行赋值,所以我不得不创建一个CssUser作为查询条件类,这让程序员很烦。 我想要什么样的效果?是这样的: (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |