使用 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...
2. 评论管理:使用Spring Data JPA与数据库交互,实现评论的增删改查操作,同时提供API供前端调用。 3. 影片信息处理:通过RESTful API接口,获取或更新影片的相关数据,如名称、简介、评分等。 二、Vue.js前端框架...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
使用JPA(Java Persistence API)和Spring Data JPA,我们可以编写简洁的查询方法,极大地提高了开发效率。 2. RESTful API设计:菜谱应用通常需要提供API供前端获取数据。SpringBoot支持基于HTTP的RESTful API设计...
它集成了大量常用的第三方库配置,如数据源、JPA、MVC等,使得开发者能够快速地创建独立的、生产级别的基于Spring的应用。 接下来,我们关注的是bootstrap-fileinput,这是一个功能强大的HTML5文件上传组件,它为...
项目介绍首先,飞龙骑脸怎么输首先,这是一个以spring boot和react / node.js为基础,UI采用的个人开发的全栈传统web应用框架然后,我不由得念起了诗:龙苟毒爆一波流。。。。。最后,还是再说一下,这是个人独立...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
Spring Boot通过JPA(Java Persistence API)或MyBatis等持久层框架与数据库进行交互,完成数据的增删改查操作。 5. **API接口设计**:为了实现前后端分离,后端会提供一系列API接口供前端调用。例如,获取电影列表...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...
- Hibernate/JPA:Java持久层API和对象关系映射工具,常用于数据库操作和数据持久化。 - MyBatis:一种半自动化的持久层框架,它支持定制化SQL、存储过程以及高级映射。 - 微服务架构:当下流行的服务架构模式,可能...
4. **数据访问对象**(DAO):使用Spring Data JPA或MyBatis等框架与数据库进行交互。 5. **服务层**(Services):实现业务逻辑,对DAO层操作进行封装。 6. **控制器**(Controllers):处理HTTP请求,将接收到的...
读者将学习如何使用JPA和EntityManager API来操纵数据库中的实体,以及如何使用查询语言进行数据检索。 ### 第十一章至第十三章:打包、整合与野兽般的EJB驯服 这几章将讨论EJB应用的打包和部署,以及如何在不同...
SpringBoot内置了Spring MVC和Spring Data JPA等组件,便于实现Web服务和数据库交互。数据库选用MySQL,因其开源、免费且性能优良,适合中小型项目。此外,可能还使用了Thymeleaf或Freemarker等模板引擎进行视图层...