±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËSpring
DataµÄ¸ÅÄģ¿éÒÔ¼°ËüµÄÅÅÐòºÍ·ÖÒ³µÄÏêϸʹÓÃ˵Ã÷£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô΢ÐŹ«ÖÚºÅit_coders£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼¡¢ÍƼö¡£ |
|
Ò»£ºßëà¾
ÔÚʵ¼ÊÏîÄ¿ÖжÔSpring DataµÄ¸÷ÖÖʹÓÃÏ൱¶à£¬¼òµ¥µÄÔöɾ¸Ä²éSpring DataÌṩÁËÏֳɵķ½·¨£¬Ò»Ð©¸´Ôӵģ¬ÎÒÃÇ¿ÉÒÔÔÚ½Ó¿Ú·½·¨Ð´And,NotµÈ¹Ø¼ü×ÖÀ´¸ã¶¨£¬ÏëдÔÉúSQL£¬CQL£¨Neo4j£©£¬Query
DSL £¨Elasticsearch£©µÄ£¬Ö±½ÓʹÓÃ@Query(¡°¡¡¡±)×¢½â¸ã¶¨£¬ÕæµÄÊÇ·½±ãµ½²»ÐУ¡
±¾Æª²©¿Í²»´òËã½²Spring DataÈçºÎʹÓ㬲»Í¬µÄÄ£¿é£¨JPA£¬Neo4j¡.£©Ê¹ÓÃÒ²ÂÔ²»Ïàͬ£¬µ«Spring
DataµÄÅÅÐòSortºÍ·ÖÒ³Pageable½Ó¿Ú¶¼ÊDz¶àµÄ£¬ËùÒÔ´ø´ó¼Ò¸ãÃ÷°×¸ãÃ÷°×Spring DataµÄÅÅÐòºÍ·ÖÒ³ÊÇÈçºÎʹÓõġ£
¶þ£º½éÉÜ
Spring DataµÄÈÎÎñÊÇΪÊý¾Ý·ÃÎÊÌṩһ¸öÊìϤµÄ¡¢Ò»Öµġ¢»ùÓÚSpringµÄ±à³ÌÄ£ÐÍ£¬Í¬Ê±ÈÔÈ»±£Áôµ×²ãÊý¾Ý´æ´¢µÄÌØÊâÌØÐÔ¡£
Spring Data ÏîÄ¿µÄÄ¿µÄÊÇΪÁ˼ò»¯¹¹½¨»ùÓÚ Spring ¿ò¼ÜÓ¦ÓõÄÊý¾Ý·ÃÎʼÆÊý£¬°üÀ¨·Ç¹ØÏµÊý¾Ý¿â¡¢Map-Reduce
¿ò¼Ü¡¢ÔÆÊý¾Ý·þÎñµÈµÈ£»ÁíÍâÒ²°üº¬¶Ô¹ØÏµÊý¾Ý¿âµÄ·ÃÎÊÖ§³Ö¡£
SpringDataÈÃÊý¾Ý·ÃÎʱäµÃ¸ü¼Ó·½±ã¡£
Èý£ºÄ£¿é
Spring Data
Spring Data for Apache Cassandra
Spring Data Commons
Spring Data Couchbase
Spring Data Elasticsearch
Spring Data Envers
Spring Data for Pivotal GemFire
Spring Data Graph
Spring Data JDBC
Spring Data JDBC Extensions
Spring Data JPA
Spring Data LDAP
Spring Data MongoDB
Spring Data Neo4J
Spring Data Redis
Spring Data REST
Spring Data for Apache Solr
Spring for Apache Hadoop
ËÄ£ºÅÅÐò
ͨ¹ýÒ»ÐдúÂë¾Í¿ÉÒÔ¿ìËÙʹÓãº
Sort sort = new
Sort(Sort.Direction.DESC, "id"); |
ÔÚSortÀàÖж¨ÒåÁËÒ»¸öö¾ÙÀàÐÍDirection£¬¸Ãö¾ÙÀàÐÍÉùÃ÷ÁËÁ½¸ö³£Á¿ASC£¬DESC¶¨Òå·½Ïò¡£¸Ã¹¹Ôì·½·¨µÄµÚÒ»¸ö²ÎÊýÖ¸Ã÷·½Ïò½µÐò£¨DESC£©»òÉýÐò£¨ASC£©£¬µÚ¶þ¸ö²ÎÊýÖ¸Ã÷ÒÔidÁеÄֵΪ׼½øÐÐÅÅÐò¡£
ÄãÒ²¿ÉÒÔ´´½¨Ò»¸ö¶àÊôÐÔµÄSortʵÀý¡£
Sort(Sort.Direction
direction, List<String> properties) |
ÄãÒ²¿ÉÒÔÖ»´«ÈëÊôÐÔ¶ø²»ÉùÃ÷·½Ïò£º
Sort(String...
properties) |
²»¹ý¹Ù·½ÒѾÆúÓø÷½·¨£¬ÍƼöʹÓÃ
public static
Sort by(String... properties) |
µ±Äã²»ÉùÃ÷·½Ïòʱ£¬Ä¬ÈÏ·½ÏòΪÉýÐò¡£
public static
final Direction DEFAULT_DIRECTION = Direction.ASC; |
SortµÄһЩ·½·¨

Sort.Order
Sort.OrderÊÇSortµÄÒ»¸ö¾²Ì¬ÄÚ²¿À࣬¹Ù·½ËµÃ÷ÊÇ£ºPropertyPathʵÏÖÁËÅÅÐòµÄÅä¶Ô¡£·½ÏòºÍÊôÐÔ¡£ËüÓÃÓÚÌṩÅÅÐòµÄÊäÈë
¡£
¼òµ¥À´½²£¬Äã¿ÉÒÔ¶¨ÒåÒ»¸öOrder£¬ÔÚÐèҪʱ´«Èëorder¹¹½¨SordʵÀý¡£
Order(Sort.Direction
direction, String property) |
¸ü¶ÀÌØµÄʹÓÃÊǼÓÈë×Ô¼ºµÄ¿Õ´¦ÀíÌáʾµÄö¾Ù£º
Order(Sort.Direction
direction, String property, Sort.NullHandling
nullHandlingHint) |
Sort.NullHandlingÊÇ¿ÉÓÃÓÚÅÅÐò±í´ïʽµÄ¿Õ´¦ÀíÌáʾµÄö¾Ù¡£¶ÔʹÓõÄÊý¾Ý´æ´¢µÄÒ»ÖÖÌáʾ£¬ÓÃÓÚÔÚ·Ç¿ÕÌõĿ֮ºó¶Ô¾ßÓпÕÖµµÄÌõÄ¿½øÐÐÅÅÐò¡£
ÔÚÐèÒªSortʱ£¬¿Éͨ¹ýOrder´´½¨£º
Sort(Sort.Order...
orders) |
Sort.OrderµÄһЩ·½·¨£º


Èç¹ûÄ㻹ÏëÈ«ÃæÁ˽âËüµÄʹÓã¬ÍƼöÔĶÁ¹Ù·½Ó¢ÎÄÎĵµ£º
https://docs.spring.io/spring-data/
data-commons/docs/current/api/org /springframework/data/domain/Sort.html
Î壺·ÖÒ³
PageableÖ»ÊÇ Spring Data ÌṩµÄ·ÖÒ³ÐÅÏ¢µÄ³éÏó½Ó¿Ú¡£
ʵÏÖÀࣺ
AbstractPageRequest£º³éÏóÀà¡£¹©PageRequestºÍQPageRequest¼Ì³Ð¡£
PageRequest£º »ù±¾µÄ¿ÉÒ³Ãæ»¯Java BeanʵÏÖ¡£
QPageRequest£º»ù±¾µÄJava BeanʵÏÖ£¬¿ÉÒÔÖ§³ÖQueryDSL¡£
·ÖÒ³¹¦ÄÜÒ²Ö»ÐèÒªÒ»ÐдúÂ룺
Pageable pageable
= new PageRequest(int page, int size, Sort sort); |
page - ´ÓÁ㿪ʼµÄË÷ÒýÒ³
size- Òª·µ»ØµÄÒ³ÃæµÄ´óС
sort - ÅÅÐò
ÄãÒ²¿ÉÒÔ´´½¨Ã»ÓÐÅÅÐòµÄ·ÖÒ³
PageRequest(int
page, int size) |
¸ü·½±ãµÄÊÇ¿ÉÒÔÒ»ÐдúÂë´´½¨ÓÐÅÅÐò·½ÏòºÍÊôÐԵķÖÒ³
PageRequest(int
page, int size, Sort.Direction direction, String...
properties) |
Èç¹ûÄãʹÓõÄÊÇ2.0ÒÔºóµÄ°æ±¾£¬¹Ù·½ÒѾÆúÓÃÒÔÉϹ¹Ôì·½·¨µÄÐÎʽ£¬ÍƼöʹÓþ²Ì¬·½·¨£º

±ÈÈçÎÒÃÇÏë±éÀúÕû¸öÊý¾Ý±í£¬¾Í¿ÉÒÔʹÓ÷ÖÒ³±éÀú£¬ÕâÑù²»ÖÁÓÚÒ»´Î°ÑÊý¾ÝÈ«²¿¼ÓÔØµ½ÄÚ´æ¡£

×¢Ò⣺ÔÚʹÓÃnext()·½·¨Ê±£¬²»Òª°Ñpageable.next()Ö±½Ó×÷Ϊ²ÎÊý´«Èë·½·¨¡£
Èçrepository.findAll(page.next())ÕâÑùµÄд·¨»áµ¼ÖÂËÀÑ»·¡£²é¿´next()·½·¨µÄÔ´Âë·¢ÏÖÕâ¸ö·½·¨Ö»ÊǰïÎÒÃÇnewÁËÒ»¸öеÄPageable¶ÔÏó£¬ÔÀ´µÄpageable»¹ÊÇûɶ±ä»¯¡£Ò»Ö±next()ÏÂÈ¥Ò²Ö»ÊÇÔÚÔµØÌ¤²½¡£
public Pageable
next() {
return new PageRequest(getPageNumber() + 1, getPageSize(),
getSort());
} |
ÕýÈ·µÄд·¨£º
repository.findAll(pageable
= pageable.next()); |
Áù£ºÊ¹ÓÃ
Spring Data Jpa³ýÁË»áͨ¹ýÃüÃû¹æ·¶°ïÖúÎÒÃÇÀ©Õ¹SqlÓï¾äÍ⣬»¹»á°ïÖúÎÒÃÇ´¦ÀíÀàÐÍΪPageableµÄ²ÎÊý£¬½«pageable²ÎÊýת»»³ÉΪsqlÓï¾äÖеÄÌõ¼þ£¬Í¬Ê±£¬»¹»á°ïÖúÎÒÃÇ´¦ÀíÀàÐÍΪPageµÄ·µ»ØÖµ£¬µ±·¢ÏÖ·µ»ØÖµÀàÐÍΪPage£¬Spring
Data Jpa½«»á°ÑÊý¾ÝµÄÕûÌåÐÅÏ¢¡¢µ±Ç°Êý¾ÝµÄÐÅÏ¢£¬·ÖÒ³µÄÐÅÏ¢¶¼·ÅÈëµ½·µ»ØÖµÖС£ÕâÑù£¬ÎÒÃǾÍÄܹ»·½±ãµÄ½øÐиöÐÔ»¯µÄ·ÖÒ³²éѯ¡£
public interface
UserRepository extends JpaRepository<User,Long>
{
@Override
Page<Medical> findAll(Pageable pageable);
} |
Èç¹ûÄãÏëÓÃ@QueryдÔÉú²éѯÓï¾ä²¢ÊµÏÖ·ÖÒ³£º
Spring Data JPAĿǰ²»Ö§³ÖÔÉú²éѯµÄ¶¯Ì¬ÅÅÐò£¬ÒòΪËü±ØÐë²Ù×÷ÉùÃ÷µÄʵ¼Ê²éѯ£¬Õâ¶ÔÓÚÔÉúSQLÊÇÎÞ·¨¿É¿¿µØ×öµ½µÄ¡£µ«ÊÇ£¬Äú¿ÉÒÔͨ¹ý×Ô¼ºÖ¸¶¨count²éѯÀ´Ê¹ÓÃÔÉú²éѯ½øÐзÖÒ³£¬ÈçÏÂÃæµÄʾÀýËùʾ:
public interface
UserRepository extends JpaRepository<User,
Long> {
@Query(value = "SELECT * FROM USERS WHERE
LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS
WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname,
Pageable pageable);
} |
Æß£º¶ÁÈ¡
·ÖÒ³²éѯ£º
Page<Book>
sampleEntities = userRepository.findAll(pageable); |
½Ó¿ÚPage¼Ì³ÐÁ˽ӿÚSlice£¬»°²»¶à˵£¬Ö±½ÓÉϸɻõ£¡
×ÜÒ³Êý
ÔªËØµÄ×ÜÊý
·µ»Øµ±Ç°Ò³µÄË÷Òý£¨Êǵڼ¸Ò³£©
·µ»Ø×÷ΪListµÄÒ³ÃæÄÚÈÝ
·µ»Øµ±Ç°ÔÚÕâ¸öÒ³ÉϵÄÔªËØµÄÊýÁ¿
int getNumberOfElements() |
·µ»ØÓÃÓÚÇëÇóµ±Ç°Ò³µÄPageable
default Pageable
getPageable() |
·µ»ØÒ³µÄ´óС¡£
·µ»ØÒ³µÄÅÅÐò²ÎÊý¡£
Ò³ÃæÊÇ·ñÓÐÄÚÈÝ¡£
ÊÇ·ñÓÐÏÂÒ»Ò³¡£
ÊÇ·ñÓÐÉÏÒ»Ò³
µ±Ç°Ò³ÊÇ·ñÊǵÚÒ»¸ö
µ±Ç°Ò³ÊÇ·ñÊÇ×îºóÒ»¸ö
ÏÂÒ»Ò³µÄPageable
ÉÏÒ»Ò³µÄPageable
Pageable previousPageable() |
|