`
bjmike
  • 浏览: 288108 次
  • 性别: 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...

    基于spring boot的软件学院学生成绩管理系统的设计与实现_2fi982m1--论文.zip

    此外,系统可能会使用Spring Data JPA或MyBatis等ORM框架与数据库交互,通过定义数据访问层接口来简化数据库操作。 在数据库设计方面,一个重要的考量是如何有效地存储和管理学生成绩数据。这通常涉及设计合适的...

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

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

    springboot校园心声墙小程序.zip

    校园心声墙小程序是一个利用Spring Boot技术开发的应用程序,它为校园内的学生提供一个表达和分享个人感受、意见的平台。 Spring Boot在校园心声墙小程序中的应用,展现了它在快速开发小型至中型应用方面的优势。...

    springboot项目基于JAVA的民族婚纱预定系统的设计与实现.zip

    它集成了大量常用的第三方库,例如Spring MVC、Spring Data JPA、Spring Security等,为开发者提供了方便快捷的开发体验。同时,Spring Boot还支持嵌入式的Servlet容器,如Tomcat和Jetty,使得部署更加方便,极大地...

    springboot留守儿童爱心网站--论文.zip

    2. 后端开发:后端主要使用Spring Boot进行开发,结合Spring Data JPA进行数据持久化操作,利用MyBatis框架与数据库进行交互,保证了数据的有效存储和高效检索。同时,通过Spring Security模块提供了安全控制,确保...

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

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

    基于springboot房屋租赁系统源码数据库文档.zip

    在数据持久化方面,Spring Data JPA被用来操作数据库,它简化了数据访问层的代码编写,使得开发者能够更加专注于业务逻辑的实现。Spring Security模块则被用于处理系统的安全性问题,提供了用户认证和权限控制等安全...

    springboot249在线互动学习网站设计.zip

    在这一层中,可以通过Spring Data JPA或MyBatis等ORM框架来简化数据库操作。 数据库层主要负责数据的存储和管理,常用的数据库包括MySQL、PostgreSQL或MongoDB等。在设计数据库时,需要考虑数据的完整性、一致性、...

    基于springboot+web的“畅享”黄山旅游网站源码数据库文档.zip

    后端则使用Spring Boot框架搭建RESTful服务,并通过Spring Data JPA与数据库进行数据持久化操作。数据库方面,通常会选择MySQL或者PostgreSQL等关系型数据库来存储用户数据、旅游信息等数据。 在用户体验方面,本...

    springboot项目电影院排片影评管理系统.zip

    系统后端可能使用了Spring Data JPA或MyBatis等ORM框架进行数据持久化操作,而数据库则可能采用了MySQL或其他关系型数据库存储系统信息。前端页面的展示可能依赖于Vue.js、React或Angular等现代JavaScript框架,实现...

    springboot在线美食菜谱.rar

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

    springboot项目实习生管理系统设计和实现.zip

    在实现方面,Spring Boot提供了丰富的开箱即用的组件和starter,如Spring Security用于安全控制、Spring Data JPA用于数据持久化操作等,大大简化了开发流程。在具体编码实现上,开发者需要关注代码的可读性和可维护...

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

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

    springboot193基于SpringBoot的秒杀系统设计与实现_rar.zip

    在本秒杀系统中,SpringBoot不仅提供了项目的基础骨架,还整合了其他如Spring Security的安全管理、Spring Data JPA的数据持久化以及Redis作为缓存和消息队列等中间件,共同构建了一个完整的秒杀系统。 在秒杀系统...

    基于java+springboot+vue+mysql的教务管理系统 源码+数据库+论文(高分毕设项目).zip

    使用Spring MVC处理HTTP请求,同时利用Spring Data JPA对MySQL数据库进行操作,实现了数据的CRUD操作。 3. 数据库设计:MySQL数据库的设计遵循了教务管理系统的要求,创建了多个表来存储不同的数据,如学生信息表、...

    springboot075基于Springboot+Vue电影评论网站系统设计毕业源码案例设计_

    在技术实现上,Spring Boot提供了强大的依赖管理和自动配置功能,使得开发者可以快速集成各种组件如数据库连接(JPA、MyBatis)、安全控制(Spring Security)以及消息服务(RabbitMQ、Kafka)等。Vue.js则通过组件...

Global site tag (gtag.js) - Google Analytics