Order By
Build ordered queries with LambdaTemplate as follows.
Basic Ordering
Ordering basics
LambdaTemplate lambda = ...
List<User> result = null;
result = lambda.query(User.class)
.ge(User::getId, 100)
.orderBy(User::getName) // Default ordering (order by name)
.queryForList();
//.asc(User::getName); //Ascending (order by name asc)
//.desc(User::getName); //Descending (order by name desc)
// Equivalent SQL
// select * from users where id >= 100 order by name;
Multiple Columns
Multiple sort columns
LambdaTemplate lambda = ...
List<User> result = null;
result = lambda.query(User.class)
.ge(User::getId, 100)
.orderBy(User::getName)
.orderBy(User::getAge)
.queryForList();
// Equivalent SQL
// select * from users where id >= 100 order by name, age;
Ordering conditions retain their call order. Repeated fields are not deduplicated.
Null Ordering
OrderType controls the direction of non-null values; OrderNullsStrategy controls the position of nulls:
DEFAULT: retain the database's default null order.FIRST: place nulls before non-null values.LAST: place nulls after non-null values.
FIRST and LAST do not reverse with the sort direction. For example, descending order with FIRST returns nulls first, followed by non-null values from largest to smallest.
NULLS FIRST
LambdaTemplate lambda = ...
List<User> result = null;
result = lambda.query(User.class)
.ge(User::getId, 100)
.orderBy(User::getName, OrderType.DEFAULT, OrderNullsStrategy.FIRST)
.queryForList();
// Equivalent SQL(MySQL)
// select * from users where id >= 100 order by name is null desc, name
NULLS LAST
LambdaTemplate lambda = ...
List<User> result = null;
result = lambda.query(User.class)
.ge(User::getId, 100)
.orderBy(User::getName, OrderType.DEFAULT, OrderNullsStrategy.LAST)
.queryForList();
// Equivalent SQL(MySQL)
// select * from users where id >= 100 order by name is null asc, name
Tip
- NULLS FIRST/LAST support depends on dialect; see database support for null ordering support.