摘要:平常使用mysql直接使用sql语句进行书写,可是我们使用JPA就是不想写啊。这里我们使用快捷方法来写排序。

使用sql语句写OrderBy应该如下格式:

[ select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,…]

数据库中的表信息

1
2
3
4
5
6
CREATE TABLE `user1` (
`user_id` varchar(100) NOT NULL COMMENT '用户id',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

接着根据表信息,在实体类中使用注解进行映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.example.demo.dao;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;

/**
* @Classname User1
* @Description TODO
* @Date 2019/8/27 14:50
* @Created by lyc
*/
@Entity
@Table(name = "user1")
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
public class User1 implements Serializable {


@Id
@Column(name = "user_id", length = 100)
private String userId;

@Column(name = "name", length = 100)
private Integer name;

@Column(name = "create_time", length = 32)
private Date createTime;

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public Integer getName() {
return name;
}

public void setName(Integer name) {
this.name = name;
}

public Date getCreateTime() {
return createTime;
}

public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}

再然后来写Dao接口,这里可以分为三种方法来写。

第一种方法:使用快捷方法来写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.example.demo.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

/**
* @Classname User1Dao
* @Description TODO
* @Date 2019/8/27 14:53
* @Created by lyc
*/
public interface User1Dao extends JpaRepository<User1,String> {

/**
* 根据name查询数据并按照CreateTime来进行倒序排列
* @param name
* @return
*/
List<User1> getByNameOrderByCreateTimeDesc(String name);

/**
* 假如你需要所有的数据而不需要按照条件查询,就要按照这样来写:
* getBy+OrderBy+排序字段+排序方式
* @return
*/
List<User1> getByOrderByCreateTimeDesc();

}

第二种方法:使用原生sql来写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @Classname User1Dao
* @Description TODO
* @Date 2019/8/27 14:53
* @Created by lyc
*/
public interface User1Dao extends JpaRepository<User1,String> {

/**
* 根据name查询数据并按照CreateTime来进行倒序排列,
* sql语句都是和数据库表中相对应
* @param name
* @return
*/
@Query(value = "select * from user1 u where u.name = ?1 order by u.create_time desc ",nativeQuery = true)
List<User1> getByNameOrderByCreateTimeDesc(String name);


}

第三种方法:使用hql来写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @Classname User1Dao
* @Description TODO
* @Date 2019/8/27 14:53
* @Created by lyc
*/
public interface User1Dao extends JpaRepository<User1,String> {

/**
* 根据name查询数据并按照CreateTime来进行倒序排列
* @param name
* @return
*/
@Query(value = "select u from User1 u where u.name = ?1 order by u.createTime desc ")
List<User1> getByNameOrderByCreateTimeDesc(String name);


}

既然你使用了JPA那么推荐你使用第一种的快捷方法来使用。