Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JPA + SpringData ²Ù×÷Êý¾Ý¿â ---- ÉîÈëÁ˽â SpringData
 
×÷ÕߣºK. Bob
  1764  次浏览      29
 2020-3-11
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½²½â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£©²âÊÔʹÓãº

 
   
1764 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö