javascript
springdatajpa命名规则_Spring Boot 之Spring data JPA简介
PA的全稱是Java Persistence API (JPA),他是一個(gè)存儲(chǔ)API的標(biāo)準(zhǔn),而Spring data JPA就是對JPA的一種實(shí)現(xiàn),可以讓我們方便的對數(shù)據(jù)進(jìn)行存取。按照約定好的方法命名規(guī)則寫dao層接口,從而在不實(shí)現(xiàn)接口的情況下,實(shí)現(xiàn)對數(shù)據(jù)庫的訪問和操作。同時(shí)提供了很多除了CRUD之外的功能,如分頁、排序、復(fù)雜查詢等等。
Spring data JPA可以看做是對Hibernate的二次封裝。本文將會(huì)以一個(gè)具體的例子來講解,怎么在Spring Boot中使用Spring data JPA。
添加依賴
我們要添加如下的Spring data JPA依賴,為了方便測試,我們添加一個(gè)h2的內(nèi)存數(shù)據(jù)庫:
org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime添加entity bean
我們來創(chuàng)建一個(gè)entity bean:
@Entity@Datapublic class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @Column(nullable = false, unique = true) private String title; @Column(nullable = false) private String author;}創(chuàng)建 Dao
public interface BookRepository extends JpaRepository { List findByTitle(String title); @Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)") Book retrieveByTitle(@Param("title") String title);}所有的Dao都需要繼承Repository接口,Repository是一個(gè)空的接口:
@Indexedpublic interface Repository {}如果要使用默認(rèn)的通用的一些實(shí)現(xiàn),則可以繼承CrudRepository, PagingAndSortingRepository和JpaRepository。
上面的例子中我們繼承了JpaRepository。
上面的例子中我們創(chuàng)建了一個(gè)按Title查找的方法:
List findByTitle(String title);這個(gè)方法我們是不需要自己去實(shí)現(xiàn)的,Spring Data JPA會(huì)幫我們?nèi)?shí)現(xiàn)。我們可以使用find…By, read…By, query…By, count…By,和 get…By的格式定義查詢語句,By后面接的就是Entity的屬性。除了And,我們還可以使用Or來拼接方法,下面我們再舉個(gè)例子:
interface PersonRepository extends Repository { List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname); // Enables the distinct flag for the query List findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname); List findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname); // Enabling ignoring case for an individual property List findByLastnameIgnoreCase(String lastname); // Enabling ignoring case for all suitable properties List findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname); // Enabling static ORDER BY for a query List findByLastnameOrderByFirstnameAsc(String lastname); List findByLastnameOrderByFirstnameDesc(String lastname);}當(dāng)然,處理方法拼接外,我們還可以自定義sql查詢語句:
@Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)") Book retrieveByTitle(@Param("title") String title);自定義查詢語句給Spring data JPA提供了更大的想象空間。
Spring Data Configuration
要使用Spring Data JPA, 我們還需要在配置文件中指定要掃描的目錄,使用@EnableJpaRepositories注解來實(shí)現(xiàn):
@Configuration@EnableJpaRepositories(basePackages = "com.flydean.repository")public class PersistenceConfig {}我們還需要在配置文件中指定數(shù)據(jù)源的屬性:
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1spring.datasource.username=saspring.datasource.password=sa測試
有了上面的一切,我們就可以測試我們的數(shù)據(jù)源了:
@Slf4j@RunWith(SpringRunner.class)@SpringBootTest(classes = {JpaApp.class})public class BookRepositoryTest { @Autowired private BookRepository bookRepository; @Test @Transactional(readOnly=false) public void testBookRepository(){ Book book = new Book(); book.setTitle(randomAlphabetic(10)); book.setAuthor(randomAlphabetic(15)); bookRepository.save(book); bookRepository.findByTitle(book.getTitle()).forEach(e -> log.info(e.toString())); log.info(bookRepository.retrieveByTitle(book.getTitle()).toString()); }}歡迎關(guān)注我的公眾號(hào):程序那些事,更多精彩等著您!
更多內(nèi)容請?jiān)L問:flydean的博客 flydean.com
總結(jié)
以上是生活随笔為你收集整理的springdatajpa命名规则_Spring Boot 之Spring data JPA简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2099元起真香旗舰!真我GT系列全渠道
- 下一篇: Spring 4 MVC入门实例