Spring-Data-JPA @Query注解 Sort排序
当我们使用方法名称很难,达到预期的查询结果,就可以使用@Query进行查询,@Query是一种添加自定义查询的便利方式
(方法名称查询见http://blog.csdn.net/niugang0920/article/details/79426521)
使用@Query注解,使用注解有两种方式,一种是JPQL的SQL语言方式,一种是原生SQL的语言.
1.User.java 实体类
- package com.niugang.entity;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- //javax.persistence.Entity
- @Entity
- @Table(name="user")
- public class User {
- /**
- *mysql 自定生成主键
- *指示持久性提供者必须分配使用数据库标识列的实体的主键
- */
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- @Column(name="id" ,insertable=false,updatable=false)
- private Integer id;
- /**
- * @Column中的name默认和字段名相同
- */
- @Column(name = "name")
- private String name;
- @Column(name = "age")
- private Integer age;
- @Column(name = "phone")
- private String phone;
- @Column(name = "password")
- private String password;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- @Override
- public String toString() {
- return "User [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", password=" + password
- + "]";
- }
- }
2.UserDao.java
- package com.niugang.dao;
- import java.util.List;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.jpa.repository.JpaRepository;
- import org.springframework.data.jpa.repository.Query;
- import org.springframework.data.repository.query.Param;
- import org.springframework.stereotype.Repository;
- import com.niugang.entity.User;
- /**
- * JpaRepository springboot已经自动配置了,也已经注入数据源了
- *
- * @author niugang
- *
- */
- @Repository
- public interface UserDao extends JpaRepository<User, Integer> {
- /**
- * ?加数字表示占位符,?1代表在方法参数里的第一个参数,区别于其他的index,这里从1开始
- */
- // select * from User where name = ?1 注意不能写成*
- @Query(value = "select u from User u where u.name = ?1")
- User findUserByName1(String name);
- /**
- * =:加上变量名,这里是与方法参数中有@Param的值匹配的,而不是与实际参数匹配的 和上面第一个原理是一样的
- */
- @Query(value = "select u from User u where u.name = :name")
- User findUserByName2(@Param("name") String username);
- /**
- * 通过原生sql 进行查询
- * 开启nativeQuery=true,在value里可以用原生SQL语句完成查询
- */
- @Query(nativeQuery = true, value = "select * from user u where u.name = :name")
- User findUserByNativeSQL(@Param("name") String username);
- /**
- * 模糊查询 这里的%只能放在占位的前面,后面不行
- */
- @Query(value = "select u from User u where u.name like %?1% ")
- List<User> findUserLike(String name);
- /**
- * 调条件分页查询 Pageable:spring-data-jpa自带接口
- *
- * @param name
- * :查询条件name
- * @param page:分页对象
- * @return
- */
- @Query(value = "select u from User u where u.name like %?1% ")
- Page<User> findUserLikeByPage(String name, Pageable page);
- /**
- * @Query查询不支持,排序并且分页
- * 源码分析
- * if (hasParameterOfType(method, Pageable.class)) {
- if (!isStreamQuery()) {
- assertReturnTypeAssignable(method, Slice.class, Page.class, List.class);
- }
- if (hasParameterOfType(method, Sort.class)) {
- throw new IllegalStateException(String.format("Method must not have Pageable *and* Sort parameter. "
- + "Use sorting capabilities on Pageble instead! Offending method: %s", method.toString()));
- }
- }
- *
- * @param sort :排序对象 org.springframework.data.domain.Sort
- * @return
- */
- @Query(value = "select u from User u")
- List<User> findUserLikeBySort(Sort sort);
- }
3. findUserLikeByPage(String name, Pageable page)接口解释:
- public Page<User> findUserByPage(String name) {
- PageRequest pageRequest = new PageRequest(0, 4);
- return userDao.findUserLikeByPage(name, pageRequest);
- }
4.排序测试代码
- /**
- * 单条件排序
- */
- public List<User> findListSortSingleCondition(){
- //id升序查询
- Sort sort = new Sort(Sort.Direction.ASC,"id");
- return userDao.findUserLikeBySort(sort);
- }
- /**
- * 多条件排序
- */
- public List<User> findListSortMultiCondition(){
- List<Order> orders=new ArrayList<Order>();
- Order orderId = new Sort.Order(Sort.Direction.DESC,"id");
- Order orderAge = new Sort.Order(Sort.Direction.DESC,"age");
- orders.add(orderId);
- orders.add(orderAge);
- Sort sort = new Sort(orders);
- return userDao.findUserLikeBySort(sort);
- }
Spring-Data-JPA @Query注解 Sort排序的更多相关文章
- 【Spring Data 系列学习】Spring Data JPA @Query 注解查询
[Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...
- Spring Data Jpa (四)注解式查询方法
详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...
- spring data jpa @query的用法
@Query注解的用法(Spring Data JPA) 参考文章:http://www.tuicool.com/articles/jQJBNv . 一个使用@Query注解的简单例子 @Query( ...
- Spring Data JPA @Column 注解无效 打出的语句有下划线
最近再写一个Restful API的小例子,遇到这样一个问题,在Spring Boot 下使用CrudRepository,总是提示如下错误: Caused by: java.sql.SQLSynta ...
- Spring Data JPA 常用注解 @Query、@NamedQuery
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- 使用Spring Data JPA进行数据分页与排序
一.导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好.所以处理较大数据查询结果展现的时候,分页查询是必不可少的.分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序
之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序pageable
https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学 ...
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...
随机推荐
- NAP(Network Access Protection)
- 随机森林RandomForest
ID3,C4.5决策树的生成: 输入:训练集D,特征集A,阈值eps, 输出:决策树T 若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该结点的类标记,返回T: 若A为空集,即没有特征作为划 ...
- XAMPP 虚拟主机配置,实现多域名访问本地项目
XAMPP 虚拟主机配置,实现多域名访问本地项目 1.首先你既然要配置多个虚拟主机,那你肯定需要多个站点的目录文件.你可以在e盘创建 www文件夹,然后在该文件件中新建两个站点目录,假设test.co ...
- android 开发 View _4_ 我的简单自定义ViewDemo
效果图: 代码: package com.example.lenovo.mydemo.myViewDemo; import android.content.Context; import androi ...
- Mac OS X系统 用dd命令将iso镜像写入u盘
一. Mac下将ISO写入U盘可使用命令行工具dd,操作如下: 1.找出U盘挂载的路径,使用如下命令:diskutil list2.将U盘unmount(将N替换为挂载路径):diskutil unm ...
- gdb 使用
2018年7月27日21:05:16 —— 多进程调试 1.follow_fork_mode 作用:在fork之后跟随父进程还是子进程 可以使用 show follow_fork_mode查看再for ...
- 二、Jmeter脚本开发
目录 1.Jmeter协议录制 1.Jmeter协议录制 1.1 dboy进行录制 badboy下载地址:http://www.badboy.com.au/download/add badboy是一个 ...
- 26.Hibernate-主键和映射.md
目录 1.复合主键映射 [toc] 2.集合映射 2.1Set集合 2.2其他集合 [toc] 3.集合数据的读取 [toc] 4.一对多和多对一映射 4.1概念 4.2配置和开发 4.2.1关键点 ...
- week07 13.1 NewsPipeline之 一 NewsMonitor
我们要重构一下代码 因为我们之前写了utils 我们的NewsPipeline部分也要用到 所以我们把他们单独独立得拿出来 删掉原来的 将requirements.txt也拿出去 现在我们搬家完成 我 ...
- Linux下NFS的搭建与配置
一.简介 1.NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. 2.NFS可实现Linux系统之间的文件 ...