See More

--------------------------- 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); }