import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interfaceUserRepositoiryextendsJpaRepository<User, Integer> { // 可以使用@Query注解在其value属性中写JPA语句灵活查询 @Query("SELECT u FROM User u WHERE u.userId = (SELECT MAX(u2.id) FROM User u2)") Person getMaxUserId(); // 在@Query注解中使用占位符 @Query(value = "SELECT u FROM User u where u.userName = ?1 and u.email = ?2") List<Person> queryUserNameAndEmail(String name, String email); // 使用命名参数传递参数 @Query(value = "SELECT u FROM User u where p.userName = :name") List<Person> queryUserName(@Param("name") String name); // SpringData可以在参数上添加% @Query("SELECT u FROM User p WHERE p.userName LIKE %?1%") List<Person> queryUserNameLike(String name); // SpringData可以在参数上添加% @Query("SELECT u FROM User u WHERE p.userName LIKE %:name%") List<Person> queryUserNameLike2(@Param("name")String name);
@Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')") List<String> findUsersWithPartOfName(@Param("username") String username); // 在@Query注解中添加nativeQuery=true属性可以使用原生的SQL查询 @Query(value="SELECT count(1) FROM user", nativeQuery=true) long getTotalRow(); }
2、关联查询
从两张表中查找数据
1 2 3 4 5 6 7 8 9 10
public interface FloorContentRepos extends JpaRepository<FloorContent,String>{ public Page<FloorContent> findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable); } 从例子中就可以看出JPA关联查询主要在“_”这个符号的使用,下面来给大家具体的介绍一下这个符号到底代表什么含义。 首先findBy是必须写的,表示使用JPA规则进行查询。 如果查询的是本张表中的内容,例如查询本张表中的name字段就可以这么写:findByName()。 如果查询的是楼层中的name字段就可以这么写:findByFloor_Name()。 如果是既要查询本张表中的name字段,也要查询楼层中的name字段,就可以这么写:findByFloor_NameAndName()。 从上面的案例就可以看出可以在findBy后面添加要关联的实体类,然后在实体类后面写上“_”,"_"符号后面是添加关联表的字段而不是本身表的字段,这点要记住。如何还想关联更多的表可以在后面添加:And+表名字+“_”+表中要查询的字段。或者只是想关联本身的查询字段可以在后面添加:And+查询的字段。 千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。