使用 spring jpa开发有段时间了,总体感觉是
开发简单,但是不够灵活.
比如是根据某个字段查询,直接写findBy字段 名称的语法就可以了,相比mybatis还需要写一个 example对象,然后创建 criteria, 这样省去了很多时间.
但是不够灵活,比如联表查询.
在查询时,通常需要同时根据多个属性进行查询,且查询的条件也格式各样(大于某个值、在某个范围等等),Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下:
And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
NotNull --- 与 IsNotNull 等价;
Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
原生sql的支持:
直接贴代码:
public interface RegUserDao extends PagingAndSortingRepository<RegUser, Integer>, JpaSpecificationExecutor<RegUser> {
/*@Modifying
@Query("update AccountInfo a set a.salary = ?1 where a.salary < ?2")
public int increaseSalary(int after, int before);*/
RegUser findByUserId(String userId);
@Query(nativeQuery = true,value = "select model_id,count(1) as num from t_reg_user where model_id is not null group by model_id ")
List<Object[]> findModelNum();
Iterable<RegUser> findByModelId(String modelId);
}
分页支持:
Map<String,Object> searchParams = new HashMap<String,Object>();
searchParams.put("EQ_jobName",jobName);
Pageable page = PageUtils.buildPageRequest(pageNumber, pageSize, sortType,"count");
Specification<CommonFriend> specification = PageUtils.buildSpecification(searchParams,CommonFriend.class);
Page<CommonFriend> pageCommonFriend = commonFriendDao.findAll(specification, page);
public class PageUtils {
/**
* 创建分页请求.
*/
public static PageRequest buildPageRequest(int pageNumber, int pageSize, String sortType,String sortColum) {
Sort sort = null;
if ("desc".equals(sortType)) {
sort = new Sort(Sort.Direction.DESC, sortColum);
} else if ("asc".equals(sortType)) {
//"count"
sort = new Sort(Sort.Direction.ASC,sortColum );
}
return new PageRequest(pageNumber - 1, pageSize, sort);
}
/**
* 创建动态查询条件组合.
*/
public static Specification buildSpecification(Map<String, Object> searchParams,Class cls) {
Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
Specification spec = DynamicSpecifications.bySearchFilter(filters.values(), cls);
return spec;
}
}
分享到:
相关推荐
源码将演示如何使用Spring Data JPA创建Repository接口,实现CRUD操作,以及进行复杂查询。 5. **Spring Security**:Spring Security是Spring生态中的安全框架,提供了身份验证和授权功能。源码中将展示如何配置...
在Spring3.1.2中,对JPA(Java Persistence API)的支持得到了增强,提供了更流畅的ORM(对象关系映射)体验。 6. **事务管理**:Spring的事务管理支持编程式和声明式两种方式。声明式事务管理通过`@Transactional`...
Spring Framework作为Java领域最广泛使用的轻量级框架之一,自诞生以来就以其强大的功能和灵活性深受开发者喜爱。本次我们聚焦于Spring Framework的4.1.1.RELEASE版本,这是一个稳定且成熟的版本,它在4.0的基础上...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
此外,系统可能会使用Spring Data JPA或MyBatis等ORM框架与数据库交互,通过定义数据访问层接口来简化数据库操作。 在数据库设计方面,一个重要的考量是如何有效地存储和管理学生成绩数据。这通常涉及设计合适的...
2. 评论管理:使用Spring Data JPA与数据库交互,实现评论的增删改查操作,同时提供API供前端调用。 3. 影片信息处理:通过RESTful API接口,获取或更新影片的相关数据,如名称、简介、评分等。 二、Vue.js前端框架...
校园心声墙小程序是一个利用Spring Boot技术开发的应用程序,它为校园内的学生提供一个表达和分享个人感受、意见的平台。 Spring Boot在校园心声墙小程序中的应用,展现了它在快速开发小型至中型应用方面的优势。...
它集成了大量常用的第三方库,例如Spring MVC、Spring Data JPA、Spring Security等,为开发者提供了方便快捷的开发体验。同时,Spring Boot还支持嵌入式的Servlet容器,如Tomcat和Jetty,使得部署更加方便,极大地...
2. 后端开发:后端主要使用Spring Boot进行开发,结合Spring Data JPA进行数据持久化操作,利用MyBatis框架与数据库进行交互,保证了数据的有效存储和高效检索。同时,通过Spring Security模块提供了安全控制,确保...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
在数据持久化方面,Spring Data JPA被用来操作数据库,它简化了数据访问层的代码编写,使得开发者能够更加专注于业务逻辑的实现。Spring Security模块则被用于处理系统的安全性问题,提供了用户认证和权限控制等安全...
在这一层中,可以通过Spring Data JPA或MyBatis等ORM框架来简化数据库操作。 数据库层主要负责数据的存储和管理,常用的数据库包括MySQL、PostgreSQL或MongoDB等。在设计数据库时,需要考虑数据的完整性、一致性、...
后端则使用Spring Boot框架搭建RESTful服务,并通过Spring Data JPA与数据库进行数据持久化操作。数据库方面,通常会选择MySQL或者PostgreSQL等关系型数据库来存储用户数据、旅游信息等数据。 在用户体验方面,本...
系统后端可能使用了Spring Data JPA或MyBatis等ORM框架进行数据持久化操作,而数据库则可能采用了MySQL或其他关系型数据库存储系统信息。前端页面的展示可能依赖于Vue.js、React或Angular等现代JavaScript框架,实现...
使用JPA(Java Persistence API)和Spring Data JPA,我们可以编写简洁的查询方法,极大地提高了开发效率。 2. RESTful API设计:菜谱应用通常需要提供API供前端获取数据。SpringBoot支持基于HTTP的RESTful API设计...
在实现方面,Spring Boot提供了丰富的开箱即用的组件和starter,如Spring Security用于安全控制、Spring Data JPA用于数据持久化操作等,大大简化了开发流程。在具体编码实现上,开发者需要关注代码的可读性和可维护...
它集成了大量常用的第三方库配置,如数据源、JPA、MVC等,使得开发者能够快速地创建独立的、生产级别的基于Spring的应用。 接下来,我们关注的是bootstrap-fileinput,这是一个功能强大的HTML5文件上传组件,它为...
在本秒杀系统中,SpringBoot不仅提供了项目的基础骨架,还整合了其他如Spring Security的安全管理、Spring Data JPA的数据持久化以及Redis作为缓存和消息队列等中间件,共同构建了一个完整的秒杀系统。 在秒杀系统...
使用Spring MVC处理HTTP请求,同时利用Spring Data JPA对MySQL数据库进行操作,实现了数据的CRUD操作。 3. 数据库设计:MySQL数据库的设计遵循了教务管理系统的要求,创建了多个表来存储不同的数据,如学生信息表、...
在技术实现上,Spring Boot提供了强大的依赖管理和自动配置功能,使得开发者可以快速集成各种组件如数据库连接(JPA、MyBatis)、安全控制(Spring Security)以及消息服务(RabbitMQ、Kafka)等。Vue.js则通过组件...