±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½²½âSpringData
¸ÅÊö £¬db.properties Îļþ £¬ÅäÖà JPA µÄ EntityManagerFactory£¬ÅäÖÃ
JPA µÄÊÂÎñ¹ÜÀíÆ÷ºÍÖ§³Ö×¢½âµÄÊÂÎñµÈÏ£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼ÍƼö |
|
Ò»¡¢SpringData ¸ÅÊö
1. SpringData£ºSpring µÄÒ»¸ö×ÓÏîÄ¿¡£ÓÃÓÚ¼ò»¯Êý¾Ý¿â·ÃÎÊ£¬Ö§³ÖNoSQL ºÍ ¹ØÏµÊý¾Ý´æ´¢¡£ÆäÖ÷ҪĿ±êÊÇʹÊý¾Ý¿âµÄ·ÃÎʱäµÃ·½±ã¿ì½Ý¡£
2.JPA Spring Data£ºÖÂÁ¦ÓÚ¼õÉÙÊý¾Ý·ÃÎʲã (DAO) µÄ¿ª·¢Á¿. ¿ª·¢ÕßΨһҪ×öµÄ£¬¾ÍÖ»ÊÇÉùÃ÷³Ö¾Ã²ãµÄ½Ó¿Ú£¬ÆäËû¶¼½»¸ø Spring Data JPA À´Íê³É£¡
¶þ¡¢Spring Data JPA µÄ Helloworld
1.»·¾³´î½¨£º
1£©Ð½¨ Java Project£ºspringdata
2£©µ±Ç°¹¤³ÌÏÂн¨ lib Ŀ¼
3£©¼ÓÈë Spring µÄ jar °ü£ºspring-framework-4.0.0.RELEASE\required Ŀ¼ÏÂËùÓÐ
4£©¼ÓÈë Hibernate ºÍ JPA µÄ jar °ü£ºhibernate-release-4.2.4.Final\lib\required ºÍ hibernate-release-4.2.4.Final\lib\jpa Ŀ¼ÏµÄËùÓÐ
5£©¼ÓÈë c3p0 ºÍ MqSQL µÄÇý¶¯
6£©ÊÖ¶¯½øÐÐ Build Path
2.н¨ Spring µÄÅäÖÃÎļþ applicationContext.xml£¬²¢½øÐÐÊý¾ÝÔ´µÄÅäÖÃ
1) db.properties Îļþ
jdbc.user=root
jdbc.password=qiqingqing
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:// localhost:3306/springdata |
2£©applicationContext.xml ÎļþÖУº
<!-- ÅäÖÃ×Ô¶¯É¨ÃèµÄ°ü
--> <context:component-scan base-package ="com.software.springdata"> </context:component-scan>
<!-- 1.ÅäÖÃÊý¾ÝÔ´ -->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class= "com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"> </property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
</bean> |
3£©×¢Ò⣺ϣÍû´ó¼ÒÄܹ»Ñø³ÉÁ¼ºÃµÄµ¥Ôª²âÊÔµÄϰ¹ß£¬ÒԱ㼰ʱ·¢ÏÖÎÊÌ⣬¼°Ê±½â¾ö£º²âÊÔÊý¾ÝÔ´ÊÇ·ñ»ñÈ¡³É¹¦£¬Ð½¨Ò»¸ö SpringDataTest µ¥Ôª²âÊÔÀà
private ApplicationContext
ctx = null;
{
ctx = new ClassPathXmlApplicationContext ("applicationContext.xml");
}
//²âÊÔÊý¾ÝÔ´ÊÇ·ñ»ñÈ¡³É¹¦
@Test
public void testDataSource() throws SQLException
{
DataSource dataSource = ctx. getBean(DataSource.class);
System.out.println (dataSource.getConnection());
} |
Ö»ÒªÊä³öÊý¾Ý¿âÁ¬½ÓµÄÐÅÏ¢£¬ÄǾÍÖ¤Ã÷ÎÒÃÇÊý¾ÝÔ´µÄµÄÅäÖÃûÓÐÎÊÌâÁË¡£
3.ÅäÖà JPA µÄ EntityManagerFactory
<!-- 2.ÅäÖÃ
JPA µÄ EntityManagerFactory --> <bean
id="entityManagerFactory"
class="org.springframework.orm.jpa. LocalContainerEntityManagerFactoryBean">
<!-- ÅäÖÃÊý¾ÝÔ´ --> <property name="dataSource"
ref="dataSource" ></property>
<!-- ÅäÖà JPA ÌṩÉ̵ÄÊÊÅäÆ÷ --> <property
name="jpaVendorAdapter"> <bean
class="org.springframework.orm. jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property> <!-- ÅäÖÃʵÌåÀàËùÔÚ°ü -->
<property name="packagesToScan" value="com.software.springdata"></property>
<!-- ÅäÖà JPA ʵÏÖ²úÆ·µÄ»ù±¾ÊôÐÔ --> <property
name="jpaProperties"> <props>
<!-- Éú³ÉµÄÊý¾Ý±íµÄÁеÄÓ³Éä²ßÂÔ --> <prop key="hibernate.ejb.naming_strategy"> org.hibernate.cfg.ImprovedNamingStrategy</prop>
<!-- hibernate »ù±¾ÊôÐÔ --> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props> </property> </bean> |
²âÊÔ JPA ÊÇ·ñÅäÖóɹ¦£º
н¨Ò»¸öʵÌåÀà Person£¬Ìí¼Ó±ØÒªµÄ JPA ×¢½â£¬´´½¨Ò»¸ö¿ÕµÄ JPA µÄ²âÊÔ·½·¨£¬Ö´Ðд˷½·¨£¬²é¿´ÊÇ·ñÉú³ÉÊý¾Ý±í
package com.software.springdata;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Table(name="JPA_PERSONS")
@Entity
public class Person {
private Integer id;
private String lastName;
private String email;
private Date birth;
private Integer addressId;
@Column(name="ADD_ID")
public Integer getAddressId() {
return addressId;
}
public void setAddressId (Integer addressId)
{
this.addressId = addressId;
}
private Address address;
@JoinColumn(name="ADDRESS_ID")
@ManyToOne
public Address getAddress() {
return address;
}
public void setAddress (Address address) {
this.address = address;
}
@GeneratedValue
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="LAST_NAME")
public String getLastName() {
return lastName;
}
public void setLastName (String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Temporal(TemporalType.DATE)
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Person [id=" + id + ",
lastName=" + lastName + ", email="
+ email + ", birth=" + birth + "]";
}
} |
4.ÅäÖà JPA µÄÊÂÎñ¹ÜÀíÆ÷ºÍÖ§³Ö×¢½âµÄÊÂÎñ
<!-- 3.ÅäÖÃ
JPA µÄÊÂÎñ¹ÜÀíÆ÷ --> <bean id="transactionManager"
class="org.springframework.orm.jpa. JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory"></property>
</bean> <!-- 4.ÅäÖÃÖ§³Ö×¢½âµÄÊÂÎñ -->
<tx:annotation-driven transaction-manager="transactionManager"/> |
5.ÅäÖÃ SpringData
1£©¼ÓÈë SpringData µÄ jar °ü£ºspring-data-jpa\required Ŀ¼ÏÂËùÓУ¨×Ô´´½¨µÄĿ¼£©£¬ÊÖ¶¯ Build Path

»¹Òª¼ÓÈë SpringData ÒÀÀµµÄÈÕÖ¾°ü slf4j
2£©¼ÓÈë jpa µÄÃüÃû¿Õ¼ä£¬×óÏÂ½Ç Namespaces ÖÐÌí¼Ó

ÅäÖà SpringData ɨÃèµÄ°üºÍ EntityManagerFactory
<!-- 5.ÅäÖÃ
Spring Data --> <!-- ¼ÓÈë jpa µÄÃüÃû¿Õ¼ä£º×óϽÇ
Namespaces ÖмÓÈë --> <!-- ÅäÖà Spring Data
ɨÃèµÄ°üºÍ EntityManagerFactory --> <!--
base-package:ɨÃè Repository Bean ËùÔÚµÄ package -->
<jpa:repositories base-package= "com.software.springdata"
entity-manager-factory-ref= "entityManagerFactory"></jpa:repositories> |
6.±àд SpringData µÄ´úÂ룬²âÊÔ HelloWorld
1)´´½¨Ò»¸ö PersonRepsotory ½Ó¿Ú¼Ì³Ð Repository ½Ó¿Ú£¬ÉùÃ÷Ò»¸ö·½·¨

2£©±àд²âÊÔ·½·¨£ºÐèÒªÔÚ²âÊÔÀàÖÐÒýÈë PersonRepository µÄʵÀý£¬Í¨¹ý ctx.getBean(PersonRepository.class); »ñÈ¡£¬ÒÔºó²»ÔÙ׸Êö¡£
//²âÊÔ Spring Data
µÄ Helloworld
@Test
public void testSpringDataHelloworld() {
Person person = repository. getByLastName("AA");
System.out.println(person);
} |
ÕâÑù±ã»á»ñÈ¡ LastName Ϊ AA µÄÊý¾Ý¿âÖеÄÄÇÌõ¼Ç¼¡£
Èý¡¢Repository ½Ó¿Ú
1. Repository ÊÇÒ»¸ö¿Õ½Ó¿Ú£¬¼´ÊÇÒ»¸ö±ê¼Ç½Ó¿Ú¡£Ô´Âë

2.ÈôÎÒÃǶ¨ÒåµÄ½Ó¿ÚʵÏÖÁË Repository£¬Ôò¸Ã½Ó¿Ú»á±» IOC ÈÝÆ÷ʶ±ðΪһ¸ö Repository Bean£¬ÄÉÈëµ½ IOC ÈÝÆ÷ÖУ¬½ø¶ø¿ÉÒÔÔڸýӿÚÖж¨ÒåһЩ·ûºÏ¹æ·¶µÄ·½·¨
3.»¹¿ÉÒÔͨ¹ý @RepositoryDefinition ×¢½âÀ´Ìæ´ú¼Ì³Ð Repository ½Ó¿Ú

4.Repository ½Ó¿ÚµÄʵÏÖÀࣺ
1£©CrudRepository£º ¼Ì³Ð Repository£¬ÊµÏÖÁËÒ»×é CRUD Ïà¹ØµÄ·½·¨
2£©PagingAndSortingRepository£º ¼Ì³Ð CrudRepository£¬ÊµÏÖÁËÒ»×é·ÖÒ³ÅÅÐòÏà¹ØµÄ·½·¨
3£©JpaRepository£º ¼Ì³Ð PagingAndSortingRepository£¬ÊµÏÖÒ»×é JPA ¹æ·¶Ïà¹ØµÄ·½·¨
4£©×Ô¶¨ÒåµÄ XxxxRepository ÐèÒª¼Ì³Ð JpaRepository£¬ÕâÑùµÄ XxxxRepository ½Ó¿Ú¾Í¾ß±¸ÁËͨÓõÄÊý¾Ý·ÃÎÊ¿ØÖƲãµÄÄÜÁ¦¡£
×¢£ºJpaSpecificationExecutor£º ²»ÊôÓÚRepositoryÌåϵ£¬ÊµÏÖÒ»×é JPA Criteria ²éѯÏà¹ØµÄ·½·¨
ËÄ¡¢SpringData µÄ·½·¨¶¨Ò广·¶SpringData µÄ·½·¨¶¨Ò广·¶
1.²»ÄÜËæ±ãÉùÃ÷£¬ÐèÒª·ûºÏÒ»¶¨µÄ¹æ·¶
2.²éѯµÄ·½·¨ÒÔ find¡¢read¡¢get ¿ªÍ·
3.Éæ¼°Ìõ¼þ²éѯʱÌõ¼þµÄÊôÐÔÒªÒԹؼü×ÖÁ¬½Ó£¬Ìõ¼þÊôÐÔÊ××Öĸ´óд
1£©SpringData Ö§³ÖµÄ¹Ø¼ü×Ö


2£©¾ÙÀý£º
//WHERE lastName
like %? AND id < ?
List<Person> getByLastNameEnding WithAndIdLessThan (String
lastName, Integer age);
//WHERE lastName like ?% AND id > ?
List<Person> getByLastNameStarting WithAndIdGreaterThan (String
lastName, Integer age);
//WHERE email IN(?,?,?) OR birth < ?
List<Person>
getByEmailInOrBirthLessThan
(List<String> emails, Date date); |
²âÊÔ£º
//²âÊÔ SpringData
Ö§³ÖµÄ¹Ø¼ü×Ö
@Test
public void testKeyWords() {
List<Person> persons = repository. getByLastNameEnding WithAndIdLessThan("A",
5);
System.out.println(persons);
persons = repository.getByLastName StartingWithAndIdGreaterThan("A",
1);
System.out.println(persons);
persons = repository.getByEmailInOrBirthLessThan (Arrays.asList("aa@163.com",
"cc@163.com",
"ee@163.com"), new Date());
System.out.println(persons.size());
} |
4.Ö§³Ö¼¶Áª²éѯ,Èôµ±Ç°ÀàÓзûºÏÌõ¼þµÄ²éѯ£¬ÔòÓÅÏÈʹÓ㬶ø²»Ê¹Óü¶Áª²éѯ£¬ÈôÐèҪʹÓü¶Áª²éѯ£¬ÔòÊôÐÔÖ®¼äÐèҪʹÓà _ (Ï»®Ïß)À´Á¬½Ó
1£©´´½¨ Address À࣬Ìí¼Ó¶ÔÓ¦µÄ JPA ×¢½â£¬ÔÚ Person ÀàÖÐÌí¼Ó Address ÀàµÄÒýÓã¬Ê¹Óà @ManyToOne Ó³É䣬Éú³É¶ÔÓ¦µÄÊý¾Ý±í


2£©´´½¨²âÊÔ·½·¨£º´ËʱΪ¼¶Áª²éѯ


3£©Îª Person ÀàÌí¼Ó addressId ÊôÐÔºó£¬ÈôÔÙ½øÐÐÏàͬµÄ²âÊÔ£¬Ôò²»ÊǼ¶Áª²éѯÁË£¬¶ø²éѯÌõ¼þΪ Person ÀàÖÐµÄ addressId ÊôÐÔ¡£ÈôÒªÔÙ½øÐм¶Áª²éѯ£¬ÐèÒªÔÚÊôÐÔÖ®¼äÐèҪʹÓà _ (Ï»®Ïß)À´Á¬½Ó


Îå¡¢@Query ×¢½â
1.ʹÓà @Query ×¢½â¿ÉÒÔ×Ô¶¨Òå JPQL Óï¾äʵÏÖ¸ü¼ÓÁé»îµÄ²éѯ
¶¨Òå·½·¨£º
//²éѯ id Öµ×î´óµÄ
Person
//ʹÓà @Query ×¢½â¿ÉÒÔ×Ô¶¨Òå JPQL Óï¾äʵÏÖ¸ü¼ÓÁé»îµÄ²éѯ
@Query("SELECT p FROM Person p WHERE p.id
= (SELECT max(p2.id) FROM Person p2)")
Person getMaxIdPerson(); |
²âÊÔ·½·¨£º
//²âÊÔ @Query ×¢½â
@Test
public void testQueryAnnotation() {
Person person = repository. getMaxIdPerson();
System.out.println(person);
} |
2.Ϊ @Query ×¢½â´«µÝ²ÎÊýµÄÁ½ÖÖ·½Ê½
1£©Ê¹ÓÃռλ·û£º
//Ϊ @Query ×¢½â´«µÝ²ÎÊýµÄ·½Ê½1£º ʹÓÃռλ·û,
´Ë·½Ê½ÒªÇóÐβÎÓ붨ÒåµÄ JPQL µÄ²ÎÊýλÖÃÒ»ÖÂ
@Query("SELECT p FROM Person p WHERE p.lastName
= ?1 AND p.email = ?2")
List<Person> testQueryAnnotationParam1 (String
lastName, String email); |
²âÊÔ£º
//²âÊÔÏò @Query
×¢½â´«²Î
@Test
public void testQueryAnnotationParam1(){
List<Person> persons = repository. testQueryAnnotationParam1 ("AA",
"aa@163.com");
System.out.println(persons);
} |
2£©Ê¹ÓÃÃüÃû²ÎÊý£º
//Ϊ @Query ×¢½â´«µÝ²ÎÊýµÄ·½Ê½2£º ʹÓÃÃüÃû²ÎÊý,
´Ë·½Ê½ÐβÎÓ붨ÒåµÄ JPQL µÄ²ÎÊýλÖò»±ØÒ»ÖÂ
@Query("SELECT p FROM Person p WHERE p.lastName
= :lastName AND p.email = :email")
List<Person> testQueryAnnotationParam2 (@Param("email")
String email, @Param("lastName") String
lastName); |
//²âÊÔÏò @Query
×¢½â´«²Î
@Test
public void testQueryAnnotationParam2() {
List<Person> persons = repository.testQueryAnnotationParam2 ("aa@163.com",
"AA");
System.out.println(persons);
} |
3.´øÓÐ LIKE ¹Ø¼ü×ÖµÄ @Query ×¢½â
1£©ÐèÒªÔÚ²âÊÔ·½·¨ÖÐÊÖ¶¯¼ÓÉÏ %,²»ÍƼö
//´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â
@Query("SELECT p FROM Person p WHERE p.lastName
LIKE ?1 AND p.email LIKE ?2")
List<Person> testQueryAnnotationLikeParam (String
lastName, String email); |
//²âÊÔ´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â
@Test
public void testQueryAnnotationLikeParam() {
List<Person> persons = repository. testQueryAnnotationLikeParam("%A%",
"%aa%");
System.out.println(persons);
} |
2£©SpringData ÔÊÐíÔÚռλ·ûÉÏÌí¼Ó %
//´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â£º SpringData ÔÊÐíÔÚռλ·ûÉÏÌí¼Ó %
@Query("SELECT p FROM Person p WHERE p.lastName
LIKE %?1% AND p.email LIKE %?2%")
List<Person> testQueryAnnotationLikeParam2 (String
lastName, String email); |
//²âÊÔ´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â
@Test
public void testQueryAnnotationLikeParam2() {
List<Person> persons = repository. testQueryAnnotationLikeParam2("A",
"aa");
System.out.println(persons);
} |
3£©SpringData ÔÊÐíÔÚÃüÃû²ÎÊýÉÏÌí¼Ó %
//´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â£º SpringData ÔÊÐíÔÚÃüÃû²ÎÊýÉÏÌí¼Ó %
@Query("SELECT p FROM Person p WHERE p.lastName
LIKE %:lastName% AND p.email LIKE %:email%")
List<Person> testQueryAnnotationLikeParam3 (@Param("lastName")
String lastName, @Param("email") String
email); |
//²âÊÔ´øÓÐ LIKE ¹Ø¼ü×ÖµÄ
@Query ×¢½â
@Test
public void testQueryAnnotationLikeParam3(){
List<Person> persons = repository.testQueryAnnotationLikeParam3 ("A",
"aa");
System.out.println(persons);
} |
4.ʹÓà @Query Ö´Ðб¾µØ SQL ²éѯ£¬ÔÚ @Query ×¢½âÖÐÌí¼Ó²ÎÊý nativeQuery=true
//±¾µØ SQL ²éѯ:ÉèÖÃ
nativeQuery=true ¼´¿ÉÖ´Ðб¾µØ²éѯ
@Query(value="SELECT count(id) FROM jpa_persons",
nativeQuery=true)
long getTotalCount(); |
//²âÊÔ±¾µØ SQL ²éѯ
@Test
public void testNativeQuery() {
long count = repository.getTotalCount();
System.out.println(count);
} |
Áù¡¢@Modifying ×¢½â
1.ʹÓà @Modifying ÅäºÏ @Query ¿ÉÒÔÍê³É UPDATE ºÍ DELETE ²Ù×÷
2.¿ÉÒÔͨ¹ý×Ô¶¨Òå JPQL Íê³É UPDATE ºÍ DELETE ²Ù×÷£¬×¢£ºJPQL ²»Ö§³ÖʹÓà INSERT
3.ÔÚ @Query Öбàд JPQL Óï¾ä£¬µ«±ØÐëʹÓà @Modifying ×¢½âÐÞÊΣ¬ÒÔ֪ͨ SpringData ´Ë²Ù×÷ÊÇÒ»¸ö UPDATE »ò DELETE ²Ù×÷
4.UPDATE »ò DELETE ²Ù×÷ÐèҪʹÓÃÊÂÎñ£¬ËùÒÔÐèÒª¶¨Òå service ²ã£¬ÔÚ service ²ã·½·¨ÉÏÌí¼ÓÊÂÎñ²Ù×÷
5.ʾÀý£º
/*
* ¿ÉÒÔͨ¹ý×Ô¶¨Òå JPQL Íê³É UPDATE ºÍ DELETE ²Ù×÷£¬×¢£ºJPQL ²»Ö§³ÖʹÓÃ
INSERT
* ÔÚ @Query Öбàд JPQL Óï¾ä£¬µ«±ØÐëʹÓà @Modifying ×¢½âÐÞÊΣ¬ÒÔ֪ͨ
SpringData ´Ë²Ù×÷ÊÇÒ»¸ö UPDATE »ò DELETE ²Ù×÷
* UPDATE »ò DELETE ²Ù×÷ÐèҪʹÓÃÊÂÎñ£¬ ËùÒÔÐèÒª¶¨Òå service ²ã£¬ÔÚ
service ²ã ·½·¨ÉÏÌí¼ÓÊÂÎñ²Ù×÷
* ĬÈÏÇé¿öÏ£¬SpringData µÄÿ¸ö·½·¨É϶¼ÓÐÊÂÎñ£¬ µ«¶¼ÊÇÖ»¶ÁÊÂÎñ£¬ËûÃDz»ÄÜÍê³ÉÐ޸IJÙ×÷
*/
@Modifying
@Query("UPDATE Person p SET p.email = :email
WHERE p.id = :id")
void updatePersonEmail(@Param("id")
Integer id, @Param("email") String email); |


Æß¡¢Repository ½Ó¿ÚµÄ×Ó½Ó¿Ú
1¡¢CrudRepository ½Ó¿Ú;²âÊÔ´Ë½Ó¿ÚµÄ save(Iterable< S > entities) ·½·¨½øÐÐÅúÁ¿±£´æ
1£©Ê¹×Ô¶¨ÒåµÄ½Ó¿Ú¼Ì³Ð CrudRepository ½Ó¿Ú

2£©Service ²ã£ºÐèÒªÊÂÎñ

3£©²âÊÔ£º

2. PagingAndSortingRepository ½Ó¿Ú
1£©ÊµÏÖ·ÖÒ³²Ù×÷(´øÅÅÐò)£º£¨Ö»¶ÁÊÂÎñ£¬²»ÐèÒªÔÙ service ²ãÖбàд£©

//²âÊÔ PagingAndSortRepository
µÄ findAll(Pageable pageable) ·½·¨£¬½øÐзÖÒ³
@Test
public void testPagingAndSortingRepository() {
//pageNo ´Ó 0 ¿ªÊ¼
int pageNo = 3 - 1;
int pageSize = 5;
//Sort ·â×°ÁËÅÅÐòÐÅÏ¢£¬Order Ö¸Ã÷¾ßÌåÊǸù¾ÝÄÄÒ»¸öÊôÐÔ½øÐÐÉýÐò»òÕß½µÐò
Order order1 = new Order(Direction.DESC, "id");
Order order2 = new Order(Direction.ASC, "email");
Sort sort = new Sort(order1, order2);
//Pageable ½Ó¿Úͨ³£Ê¹ÓÃÆä PageRequest ʵÏÖÀ࣬ÆäÖзâ×°ÁËÐèÒª·ÖÒ³µÄÐÅÏ¢
PageRequest pageable = new PageRequest (pageNo,
pageSize, sort);
Page<Person> page = pagingAndSortingRepository. findAll(pageable);
System.out.println("×ܹ²ÓÐ " + page.getTotalElements()
+ " Ìõ¼Ç¼");
System.out.println("×ܹ²ÓÐ " + page.getTotalPages()
+ " Ò³");
System.out.println("µ±Ç°Ò³Îª£º" + (page.getNumber()
+ 1));
System.out.println("µ±Ç°µÄ List£º " + page.getContent());
System.out.println("µ±Ç°Ò³µÄ×ܼǼÊýΪ£º" + page.getNumberOfElements());
} |
3. JpaRepository ½Ó¿Ú£º²âÊÔ´Ë½Ó¿ÚµÄ saveAndFlush() ·½·¨£¬´Ë·½·¨Ï൱ÓÚ JPA ÖÐµÄ merge() ·½·¨£¬Ïê¼û JPA ±Ê¼Ç


²¹£ºJpaSpecificationExecutor ½Ó¿Ú£¬²»ÊôÓÚRepositoryÌåϵ£¬ÊµÏÖÒ»×é JPA Criteria ²éѯÏà¹ØµÄ·½·¨ £¬¼´´øÌõ¼þµÄ·ÖÒ³²éѯ
1£©×Ô¶¨ÒåµÄ½Ó¿Ú±ØÐëʵÏÖ Repository »ò Repository µÄ×Ó½Ó¿Ú »¹ÓÐ JpaSpecificationExecutor ½Ó¿Ú


°Ë¡¢×Ô¶¨Òå Repository ·½·¨£ºÎªÄ³Ò»¸ö Repository ÉÏÌí¼Ó×Ô¶¨Òå·½·¨
1.²½Ö裺
1£©¶¨ÒåÒ»¸ö½Ó¿Ú: ÉùÃ÷ÒªÌí¼ÓµÄ, ²¢×ÔʵÏֵķ½·¨

2£©Ìṩ¸Ã½Ó¿ÚµÄʵÏÖÀà: ÀàÃûÐèÔÚÒªÉùÃ÷µÄ Repository(ÒÔ PersonRepository ΪÀý) ºóÌí¼Ó Impl, ²¢ÊµÏÖ·½·¨

3£©ÉùÃ÷ Repository ½Ó¿Ú£¨¼´ PersonRepository ½Ó¿Ú£©, ²¢¼Ì³Ð 1) ÉùÃ÷µÄ½Ó¿Ú

4£©²âÊÔʹÓãº

|