您可能已经知道,Spring Data JPA是更大的Spring Data系列的一部分。在本文中,我们将使用Spring Data JPA和Spring Boot与MariaDB数据库进行通信。
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
application.properties配置:
spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql:<font><i>//192.168.99.100:3306/test1</i></font><font> spring.datasource.username=root spring.datasource.password=root spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect spring.jpa.show-sql=<b>true</b> </font>
扫描或加载JPA存储库
创建存储库
要创建存储库,只需扩展 JapRepository 接口即可。它默认提供了很多方法。
这是一些有用的 示例代码 供参考。
<b>import</b> org.springframework.data.jpa.repository.JpaRepository; <b>import</b> org.springframework.stereotype.Repository; <b>import</b> com.mysql.demo.entity.User; <b>public</b> <b>interface</b> UserJpaRepository <b>extends</b> JpaRepository<User, Integer>{ }
此接口无需实现。它可以直接注入并在服务类中使用。但如果它不提供方法,我们可以在其中定义并使用它 - 不需要实现。
<b>public</b> <b>interface</b> UserJpaRepository <b>extends</b> JpaRepository<User, Integer>{ List<User> findByName(String name); }
查询DSL
好处
查询方法
查询解析器将匹配以下内容:
此标准使用JPA实体属性名称。并且,这包括多个标准连接词'And'和'Or',比如findByStateAndCount(String sate, String countrys).
查询注释
有时,查询dsl方法名称变得太长。或者有时,我们希望使用现有的JPQL。在这些场景中,我们可以使用查询注释。
@Query(<font>"select u from User u where u.age > :age1 and u.age < :age2"</font><font>) List<User> queryByAgeRange(@Param(</font><font>"age1"</font><font>) <b>int</b> age1, @Param(</font><font>"age2"</font><font>) <b>int</b> age2); </font>
命名查询
命名查询在Entity类中使用@NamedQuery 注释定义 。例如:
@NamedQuery(name="Model.namedFindAllModelsByType", query="select m from Model m where m.modelType.name= :name")
要在JpaRepository 界面中使用命名查询 ,我们需要执行以下操作:
原生查询
要将查询标记为本机,请在查询注释中使用原生native param = true。
命名原生查询
这与命名查询的工作方式类似。
分页
有时,对于大量数据,我们可能希望以块的形式获取数据。然后,我们可以去分页。分页由 PagingAndSortingRepository 接口和 findAll(Pageable pag) 方法提供。
<b>public</b> Page<User> getAllUsers(<b>int</b> page, <b>int</b> size) { <b>return</b> userRepo.findAll(PageRequest.of(page, size)); }
排序
PagingAndSortingRepository --> findAll(Sort sort)
<b>public</b> List<User> getAllUsersSorted(String paramname) { <b>return</b> userRepo.findAll(Sort.by(Sort.Direction.ASC,paramname)); }
Aulditing校订
在配置类激活使用@EnableJpaAuditing,一些相关注解:
锁Locking
锁定策略有两种类型:
使用@Lock 注释在存储库方法上声明锁定策略 。
@Lock(LockModeType.PESSIMISTIC_WRITE) List<User> findByAgeOrName(<b>int</b> age, String name);