`
bjmike
  • 浏览: 283036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用spring jpa有感

 
阅读更多
使用 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 in Action 源码

    源码将演示如何使用Spring Data JPA创建Repository接口,实现CRUD操作,以及进行复杂查询。 5. **Spring Security**:Spring Security是Spring生态中的安全框架,提供了身份验证和授权功能。源码中将展示如何配置...

    Spring3.1.2Jar包

    在Spring3.1.2中,对JPA(Java Persistence API)的支持得到了增强,提供了更流畅的ORM(对象关系映射)体验。 6. **事务管理**:Spring的事务管理支持编程式和声明式两种方式。声明式事务管理通过`@Transactional`...

    spring-framework-4.1.1.RELEASE-dist

    Spring Framework作为Java领域最广泛使用的轻量级框架之一,自诞生以来就以其强大的功能和灵活性深受开发者喜爱。本次我们聚焦于Spring Framework的4.1.1.RELEASE版本,这是一个稳定且成熟的版本,它在4.0的基础上...

    SpringCloud常用5个组件入门

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    影视评论系统Springboot+Vue(前后端分离)

    2. 评论管理:使用Spring Data JPA与数据库交互,实现评论的增删改查操作,同时提供API供前端调用。 3. 影片信息处理:通过RESTful API接口,获取或更新影片的相关数据,如名称、简介、评分等。 二、Vue.js前端框架...

    10分钟学会SpringBoot-与Redis缓存-5分钟掌握微服务代码生成器

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    springboot在线美食菜谱.rar

    使用JPA(Java Persistence API)和Spring Data JPA,我们可以编写简洁的查询方法,极大地提高了开发效率。 2. RESTful API设计:菜谱应用通常需要提供API供前端获取数据。SpringBoot支持基于HTTP的RESTful API设计...

    Picture-Bed:出于自用的目的,又发现Java写的开源的程序,然后使用开源上传组件bootstrap-fileinput用Spring Boot编写了一个图床目前支持:七牛云,阿里云

    它集成了大量常用的第三方库配置,如数据源、JPA、MVC等,使得开发者能够快速地创建独立的、生产级别的基于Spring的应用。 接下来,我们关注的是bootstrap-fileinput,这是一个功能强大的HTML5文件上传组件,它为...

    sinosteel:基于Spring Boot + ReactNode.js的Web应用程序开发框架

    项目介绍首先,飞龙骑脸怎么输首先,这是一个以spring boot和react / node.js为基础,UI采用的个人开发的全栈传统web应用框架然后,我不由得念起了诗:龙苟毒爆一波流。。。。。最后,还是再说一下,这是个人独立...

    1小时学会微服务项目部署-持续化集成Jenkins

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    1小时学会rancher-influxDB-cAdvisor-Grafana自动扩容

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    2小时学会前后端接口安全技术-JWT

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    基于Vue+Springboot开发的电影订票购票微信小程序毕业源码案例设计.zip

    Spring Boot通过JPA(Java Persistence API)或MyBatis等持久层框架与数据库进行交互,完成数据的增删改查操作。 5. **API接口设计**:为了实现前后端分离,后端会提供一系列API接口供前端调用。例如,获取电影列表...

    2小时学会ElasticSearch

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    1小时学会mongoDB数据库

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    2小时学会SpringBoot微服务架构思想

    本课程全程使用目前比较流行的开发工具idea进行开发,采用现在互联网流行的微服务架构SpringBoot+SpringCloud+JPA, 同时也使用了互联网的高并发中间件redis,ElasticSearch,RabbitMQ,MongoDB数据库,springSecurity...

    java员工转正述职报告.pdf

    - Hibernate/JPA:Java持久层API和对象关系映射工具,常用于数据库操作和数据持久化。 - MyBatis:一种半自动化的持久层框架,它支持定制化SQL、存储过程以及高级映射。 - 微服务架构:当下流行的服务架构模式,可能...

    基于springboot毕业设计-疫情管理系统.zip

    4. **数据访问对象**(DAO):使用Spring Data JPA或MyBatis等框架与数据库进行交互。 5. **服务层**(Services):实现业务逻辑,对DAO层操作进行封装。 6. **控制器**(Controllers):处理HTTP请求,将接收到的...

    EJB3.0 in Action

    读者将学习如何使用JPA和EntityManager API来操纵数据库中的实体,以及如何使用查询语言进行数据检索。 ### 第十一章至第十三章:打包、整合与野兽般的EJB驯服 这几章将讨论EJB应用的打包和部署,以及如何在不同...

    基于SpringBoot的校园志愿者管理系统毕业设计源码(源代码+论文)

    SpringBoot内置了Spring MVC和Spring Data JPA等组件,便于实现Web服务和数据库交互。数据库选用MySQL,因其开源、免费且性能优良,适合中小型项目。此外,可能还使用了Thymeleaf或Freemarker等模板引擎进行视图层...

Global site tag (gtag.js) - Google Analytics