Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。經過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者。html
進入https://start.spring.io/java
Gradle配置mysql
compile("org.springframework.boot:spring-boot-starter-data-jpa")spring
compile("mysql:mysql-connector-java")sql
application.properties 配置:api
spring.datasource.url = jdbc:mysql://localhost:3306/test數組
spring.datasource.username = rootmybatis
spring.datasource.password = rootapp
spring.datasource.driverClassName = com.mysql.jdbc.Driver框架
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
# 是否自動建立表和字段
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
建立實體類
@Table(name = "role", uniqueConstraints = { @UniqueConstraint(columnNames = { "name", "shopId" }) })
建立實體類Repository
測試:
Repository使用
根據email地址和姓查詢數據
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
使用page作分頁(重點好用切記切記)
本身聲明 Pageable對象
Pageable pageable = new PageRequest(PageNumber(), PageSize(), Sort.Direction.ASC,"排序字段");
在controller用參數傳入:
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
根據age字段倒敘
User findTopByOrderByAgeDesc();
用HQL查詢
@Query("select u from User u where u.emailAddress = ?1")User findByEmailAddress(String emailAddress);
使用本地sql語句查詢。nativeQuery = true
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = :emailAddress",
nativeQuery = true) User findByEmailAddress(@Param("emailAddress") String emailAddress);
Keyword |
Sample |
JPQL snippet |
And |
findByLastnameAndFirstname |
… where x.lastname = ?1 and x.firstname = ?2 |
Or |
findByLastnameOrFirstname |
… where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals |
findByFirstname,findByFirstnameIs,findByFirstnameEquals |
… where x.firstname = ?1 |
Between |
findByStartDateBetween |
… where x.startDate between ?1 and ?2 |
LessThan |
findByAgeLessThan |
… where x.age < ?1 |
LessThanEqual |
findByAgeLessThanEqual |
… where x.age ⇐ ?1 |
GreaterThan |
findByAgeGreaterThan |
… where x.age > ?1 |
GreaterThanEqual |
findByAgeGreaterThanEqual |
… where x.age >= ?1 |
After |
findByStartDateAfter |
… where x.startDate > ?1 |
Before |
findByStartDateBefore |
… where x.startDate < ?1 |
IsNull |
findByAgeIsNull |
… where x.age is null |
IsNotNull,NotNull |
findByAge(Is)NotNull |
… where x.age not null |
Like |
findByFirstnameLike |
… where x.firstname like ?1 |
NotLike |
findByFirstnameNotLike |
… where x.firstname not like ?1 |
StartingWith |
findByFirstnameStartingWith |
… where x.firstname like ?1 (parameter bound with appended %) |
EndingWith |
findByFirstnameEndingWith |
… where x.firstname like ?1 (parameter bound with prepended %) |
Containing |
findByFirstnameContaining |
… where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy |
findByAgeOrderByLastnameDesc |
… where x.age = ?1 order by x.lastname desc |
Not |
findByLastnameNot |
… where x.lastname <> ?1 |
In |
findByAgeIn(Collection ages) |
… where x.age in ?1 |
NotIn |
findByAgeNotIn(Collection age) |
… where x.age not in ?1 |
True |
findByActiveTrue() |
… where x.active = true |
False |
findByActiveFalse() |
… where x.active = false |
IgnoreCase |
findByFirstnameIgnoreCase |
… where UPPER(x.firstame) = UPPER(?1) |
缺點:
JPA 每次查詢都是整個對象查詢,也就是查詢表的全部字段(比select * 性能好)若是是單獨查詢某寫字段,JPA的是用數組返回。相對mybatis這個就很不方便。若是對select 出來的字段又嚴格要求,謹慎使用。
使用JPA的時候,儘可能把表字段分散,別在一張表放太多字段
Spring 官網參考地址
http://docs.spring.io/spring-data/jpa/docs/1.11.0.M1/reference/html/