---------------------------
Spring boot - Spring Data |
---------------------------
# Spring Data ÊÇÒ»¸ö¼ò»¯Êý¾Ý¿â·ÃÎÊ,²¢'Ö§³ÖÔÆ·þÎñÆ÷µÄ¿ªÔ´¿ò¼Ü'
# ÒÀÀµ
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-data-jpa
# Spring Boot µÄÖ§³Ö
* spring-boot-starter-data-jpa ÒÀÀµÓÚ spring-boot-starter-jdbc
* JDBC
¹ØÓÚ×Ô¶¯ÅäÖõÄÔ´ÂëÔÚ:org.springframework.boot.autoconfigure.jdbc °üÏÂ
´ÓÔ´Âë¿ÉÒÔ¿´³ö,¹ØÓÚdataSourceµÄÊôÐÔÅäÖÃǰ׺Ϊ: spring.datasource,
spring ×Ô¶¯¿ªÊ¼ÁË×¢½âÊÂÎñµÄÖ§³Ö @EnableTransactionManagement
* JPA
¹ØÓÚ¶ÔJPAµÄ×Ô¶¯ÅäÖÃÔÚ:org.springframework.boot.autoconfigure.orm ÏÂ
'spring bootĬÈϵÄJPAʵÏÖÊÇ Hibernate'
ÔÚpropertiesÖÐÅäÖÃJPAµÄÊôÐÔ,ÊÇÒÔ: spring.jpa Ϊǰ׺
* Spring Data Jpa
¶ÔÓÚSpring Data JPA µÄ×Ô¶¯ÅäÖÃÔÚ org.springframework.boot.autoconfigure.data.jpaÏÂ
»áɨÃèËùÓбê×¢ @Entity µÄʵÌåÀà
# Ö÷Òª¹¦ÄÜ
* ·ÃÎÊÊý¾Ý¿â±äµÃ¼òµ¥
* Ö§³Ö»ùÓÚ¹ØÏµÐÎÊý¾Ý¿âµÄÊý¾Ý·þÎñ,ÈçOracle RACµÈ
* Ö§³Ömap-reduce¿ò¼ÜºÍÔÆ¼ÆËãÊý¾Ý·þÎñ
# ÌṩµÄ ³Ö¾Ã²ã½Ó¿Ú¹ØÏµ
Repository
|
CrudRepository
|
PagingAndSortingRepository
|
JpaRepository
# ¶¨ÒåÊý¾Ý·ÃÎʲãµÄÁ½ÖÖ·½·¨
1,×Ô¶¨Òå½Ó¿Ú,ʵÏÖ½Ó¿Ú: JpaRepository
public interface UserRepository extends JpaRepository
2,ÅäÖÃʹÓà Spring Data Jpa
* ÔÚspring»·¾³ÖÐ,ʹÓÃSpringDataJPA¿ÉÒÔͨ¹ý @EnableJpaRepositories ×¢½âÀ´¿ªÆô SpringDataJPAµÄÖ§³Ö
* @EnableJpaRepositories µÄ value ²ÎÊý,¶¨Òårespository½Ó¿ÚËùÔڵİü
@Configuration
@EnableJpaRepositories(value="com.levin.repository")
public class JpaConfiguration{
@Bean
public EntityManagerFactory entityManagerFactory(){
//
}
//»¹ÐèÒªÅäÖà DataSource,PlatformTransactionManagerµÈÏà¹ØBean
}
# ¶¨Òå²éѯ·½·¨
public interface UserRepository extends JpaRepository{
/*
¸ù¾ÝÃû³Æ¼ìË÷³öÒ»¶ÑÊý¾Ý,²ÎÊýΪname
JPQL:FROM User WHERE name=:name
*/
List findByName(String name);
/*
¸ù¾ÝLIKE²éѯ,²ÎÊýΪ name
JPQL:FROM User WHERE name LIKE :name
*/
List findByNameLike(String name);
/*
¸ù¾ÝÃû³ÆºÍÄêÁä¼ìË÷¼Ç¼
JPAL:FROM User WHERE name = :name AND age = :age
*/
List findByNameWithAge(String name,int age);
/*
Ò²¿ÉÒÔʹÓÃ@Query×¢½â,À´×Ô¶¨Òå¸üΪ¸ß¼¶µÄ¼ìË÷
*/
@Query("FROM User WHERE userName = :userName")
public User queryByUserName(@Param(value="userName")String userName);
/*
»ñÈ¡·ûºÏÌõ¼þµÄǰ10Ìõ¼Ç¼
*/
List findFirst10ByName(String name);
/*
»ñÈ¡·ûºÏÌõ¼þµÄǰ30ÌõÊý¾Ý
*/
List findTop30ByName(String name);
}
* ²éѯ·½·¨,ÓкܶàµÄ¹æÔò,ÀýÈç: or,and,between....ÐèÒªµÄʱºò,È¥°Ù¶È
# ×¢½â
@Query
* ±êʶÔÚij¸ö repository µÄ·½·¨ÉÏ,ÓÃÓÚ¶¨ÒåHQLÓï¾ä
* ¿ÉÒÔÊÇ INSERT,CREATE,UPDATE,DELETE Óï¾ä
@Modifying
* ºÍ @Query ×éºÏʹÓÃ
* ±êʶÔÚij¸ö repository µÄ·½·¨ÉÏ,±íʾµ±Ç°µÄ @Query ÊÇÒ»¸öUPDATE Óï¾ä
* ¸Ã·½·¨·µ»ØµÄ int Öµ±êÇ©Êܵ½Ó°ÏìµÄÐÐÊý
@NamedQuery
* ±êʶÔÚ Entity ÉÏ
* name SringÀàÐ͵ÄÊôÐÔ,ÓÃÓÚÖ¸¶¨¼ìË÷Ãû,ÀýÈç "User.findByName"
* query StringÀàÊéµÄÊôÐÔ,ÓÃÓÚHQL,ÀýÈç "FROM User WHERE name = :name"
* Ôڸà Entity µÄ½Ó¿ÚÖж¨ÒåµÄ findByName ·½·¨,¾ÍÊÇͨ¹ý query ÊôÐÔµÄHQLÀ´½øÐмìË÷µÄ
---------------------------
Spring boot JPA×¢½â |
---------------------------
@Entity
* µ±ÏµÍ³¼ì²âµ½ÓÐ @Entity ×¢½â±êʶµÄPOJO,»áÔÚÊý¾Ý¿âÖÐÉú³É¶ÔÓ¦µÄ±í½á¹¹ÐÅÏ¢
* ĬÈϵÄ×Ö¶ÎÃû,ÊǸù¾ÝÍÕ·åÃüÃûµÄ
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
* ±êʶID×Ö¶Î,²¢ÇÒÖ¸¶¨ÆäÉú³É²ßÂÔ
GenerationType.TABLE ʹÓÃÒ»¸öÌØ¶¨µÄÊý¾Ý¿â±í¸ñÀ´±£´æÖ÷¼ü¡£
GenerationType.SEQUENCE ¸ù¾Ýµ×²ãÊý¾Ý¿âµÄÐòÁÐÀ´Éú³ÉÖ÷¼ü£¬Ìõ¼þÊÇÊý¾Ý¿âÖ§³ÖÐòÁС£
GenerationType.IDENTITY Ö÷¼üÓÉÊý¾Ý¿â×Ô¶¯Éú³É£¨Ö÷ÒªÊÇ×Ô¶¯Ôö³¤ÐÍ£©
GenerationType.AUTO Ö÷¼üÓɳÌÐò¿ØÖÆ
@Column
* ±êʶÔÚ×Ö¶Î
* ÊôÐÔ
name //Ö¸¶¨Êý¾Ý¿â×ֶεÄÃû³Æ
---------------------------
Spring boot ÅäÖÃ |
---------------------------
spring.datasource.url=jdbc:mysql://localhost:3306/community?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.DefaultComponentSafeNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
---------------------------
Spring boot ×î¶¥²ã½Ó¿Ú |
---------------------------
public interface Repository
* ×î¶¥²ãµÄÊý¾Ý¿â·ÃÎʽӿÚ,ûÓÐÈκÎʵÏÖ
* ÎÒÃÇ×Ô¶¨ÒåµÄ½Ó¿ÚÒ»µ©ÊµÏÖÁ˸ýӿÚ,¾Í»á±»IOCʶ±ðΪһ¸ö RepositoryBean ÄÉÈëµ½IOCÖÐ
* Ò²¿ÉÒÔʹÓà @RepositoryDefinition ×¢½âÀ´´úÌæ Repository ½Ó¿Ú
* Éæ¼°²éѯÌõ¼þʱ,Ìõ¼þµÄÊôÐÔÓÃÌõ¼þ¹Ø¼ü×ÖÁ¬½Ó,ҪעÒâµÄÊÇÌõ¼þÊôÐÔµÄÊ××Öĸ,ÊÇ´óд
> findByUserName(String userName); //»á×Ô¶¯µÄ¸ù¾Ý userNameÀ´¼ìË÷³öÒ»Ìõ¼Ç¼
* ʹÓà @Query ×¢½â,¿ÉÒÔ×Ô¶¨ÒåJPQL(HQLÀàËÆ)Óï¾äʵÏÖ¸üÁé»îµÄ²éѯ
@Query("FROM User WHERE userName = :userName")
public User queryByUserName(@Param(value="userName")String userName);
@Query(value = "FROM User")
public List queryAll();
---------------------------
Spring boot ×Ó½Ó¿Ú |
---------------------------
@NoRepositoryBean
public interface CrudRepository extends Repository {
//±£´æµ¥¸öʵÌå
S save(S var1);
//±£´æ¼¯ºÏ
Iterable save(Iterable var1);
//¸ù¾ÝID¼ìË÷ʵÌå
T findOne(ID var1);
//¸ù¾ÝIDÅжÏʵÌåÊÇ·ñ´æÔÚ
boolean exists(ID var1);
//¼ìË÷³öËùÓеÄʵÌå,É÷ÓÃ
Iterable findAll();
Iterable findAll(Iterable var1);
//¼ìË÷³öʵÌåµÄÊýÁ¿
long count();
//¸ù¾ÝIDɾ³ýʵÌå
void delete(ID var1);
//¸ù¾ÝʵÌåɾ³ýʵÌå
void delete(T var1);
//ɾ³ýÒ»¸öʵÌåµÄ¼¯ºÏ
void delete(Iterable extends T> var1);
//ɾ³ýËùÓÐʵÌå
void deleteAll();
}
---------------------------
Spring boot ·ÖÒ³ÅÅÐò½Ó¿Ú |
---------------------------
@NoRepositoryBean
public interface PagingAndSortingRepository extends CrudRepository {
//¿ÉÒÔʵÏÖÅÅÐòµÄ¼ìË÷
Iterable findAll(Sort var1);
//¿ÉÒÔʵÏÖ·ÖÒ³ÒÔ¼°ÅÅÐòµÄ¼ìË÷
Page findAll(Pageable var1);
}
# Sort
new Sort(Direction.ASC,"age");
# Pageable
* PageaRequest ÊÇ Pageable ×ÓÀà
new PageaRequest(1,20);
---------------------------
Spring boot Ö±½Ó¼Ì³Ð½Ó¿Ú |
---------------------------
@NoRepositoryBean
public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor {
List findAll();
List findAll(Sort var1);
List findAll(Iterable var1);
List save(Iterable var1);
void flush();
S saveAndFlush(S var1);
void deleteInBatch(Iterable var1);
void deleteAllInBatch();
T getOne(ID var1);
List findAll(Example var1);
List findAll(Example var1, Sort var2);
}