下面我将为你详细讲解SpringData JPA的常用语法汇总。
1.概述
SpringData JPA是Spring框架的一个子项目,它提供了一种非常方便的方式来简化JPA的使用,降低了编写JPA代码的复杂度。SpringData JPA主要是基于JPA规范来实现的,并对JPA规范进行了一些扩展,提供了一些更为方便的API和方法。
2.常用语法汇总
2.1基本查询
SpringData JPA提供了一个非常强大的查询语言,其主要是基于方法名来进行查询的,下面是一些示例:
- 根据用户姓名进行查询
User findByUsername(String username);
- 根据用户姓名和密码进行查询
User findByUsernameAndPassword(String username,String password);
- 根据用户年龄进行查询
List<User> findByAge(int age);
2.2条件查询
除了基本查询以外,SpringData JPA还提供了一些条件查询的方法:
- 根据用户姓名进行模糊查询
List<User> findByUsernameLike(String username);
- 根据用户姓名进行模糊查询并按照年龄从大到小排序
List<User> findByUsernameLikeOrderByAgeDesc(String username);
- 根据用户年龄查询最大的一条记录
User findFirstByOrderByAgeDesc();
2.3分页查询
SpringData JPA还提供了分页查询的方法,如下所示:
- 查询所有数据并分页
Page<User> findAll(Pageable pageable);
- 根据用户姓名进行模糊查询并分页
Page<User> findByUsernameLike(String username, Pageable pageable);
- 查询年龄大于等于20岁的用户并分页
Page<User> findByAgeGreaterThanEqual(int age, Pageable pageable);
3.示例说明
下面是一个示例,假设我们有一个User实体类,其中包含了id、username、password和age四个字段。
3.1 创建User类
@Entity
@Table(name="tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private Integer age;
}
3.2 创建UserRepository类
public interface UserRepository extends JpaRepository<User, Integer> {
User findByUsername(String username);
User findByUsernameAndPassword(String username,String password);
List<User> findByAge(int age);
List<User> findByUsernameLike(String username);
List<User> findByUsernameLikeOrderByAgeDesc(String username);
User findFirstByOrderByAgeDesc();
Page<User> findAll(Pageable pageable);
Page<User> findByUsernameLike(String username, Pageable pageable);
Page<User> findByAgeGreaterThanEqual(int age, Pageable pageable);
}
3.3 创建测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void contextLoads() {
}
@Test
public void testFindById(){
User user = userRepository.getOne(1);
Assert.assertNotNull(user);
}
@Test
public void testFindByUsername(){
User user = userRepository.findByUsername("admin");
Assert.assertNotNull(user);
}
@Test
public void testFindByUsernameAndPassword(){
User user = userRepository.findByUsernameAndPassword("admin","admin");
Assert.assertNotNull(user);
}
@Test
public void testFindByAge(){
List<User> userList = userRepository.findByAge(20);
Assert.assertTrue(userList.size()>0);
}
@Test
public void testFindByUsernameLike(){
List<User> userList = userRepository.findByUsernameLike("%a%");
Assert.assertTrue(userList.size()>0);
}
@Test
public void testFindByUsernameLikeOrderByAgeDesc(){
List<User> userList = userRepository.findByUsernameLikeOrderByAgeDesc("%a%");
Assert.assertTrue(userList.size()>0);
}
@Test
public void testFindFirstByOrderByAgeDesc(){
User user = userRepository.findFirstByOrderByAgeDesc();
Assert.assertNotNull(user);
}
@Test
public void testFindAll(){
Page<User> userPage = userRepository.findAll(new PageRequest(0,5));
Assert.assertTrue(userPage.getTotalElements()>0);
}
@Test
public void testFindByUsernameLikePage(){
Page<User> userPage = userRepository.findByUsernameLike("%a%", new PageRequest(0,5));
Assert.assertTrue(userPage.getTotalElements()>0);
}
@Test
public void testFindByAgeGreaterThanEqualPage(){
Page<User> userPage = userRepository.findByAgeGreaterThanEqual(20, new PageRequest(0,5));
Assert.assertTrue(userPage.getTotalElements()>0);
}
}
以上就是一个简单的SpringData JPA的示例,其中包含了基本的查询、条件查询和分页查询。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringData JPA的常用语法汇总 - Python技术站