概述
Repository:
1. Repository:最顶层的接口,一个空的接口,统一所有的Repository类型,并且能够让组件扫描的时候能够自动识别
2. CrudRepository: Repository的子接口,提供CRUD的操作
3. PagingAndSortingRepository: CrudRepository的子接口,添加了分页和排序的功能
4. JpaRepository: 是PagingAndSortingRepository的子接口,增加一些实用的功能,比如批量操作
5. JpaSpecificationExecutor:来定义复杂查询
@Entity表示这个类是一个实体类,参与JPA和数据库表的映射
@Table表示具体映射的表名
@Id表示这个字段是主键,@GeneratedValue表示这个主键的生成策略
@Column表示映射到数据库的表的字段名,字段名和表字段不一致,修改注解@Column的name属性
public interface UserRepository extends JpaRepository<User,Integer>, JpaSpecificationExecutor<User> {
}
//继承JpaRepository方便直接调用现有的方法进行CRUD,
//继承JpaSpecificationExecutor则是方便定义一些复杂的查询
原生SQL与JPQL:
定义方法时候,上面加上注解@Query,默认nativeQuery是false,此时value填入的是JPQL语句,修改nativeQuery是true,就能够写入SQL语句
//@Query注解里面写JPQL语句,定义查询
@Query(nativeQuery = false,value = " SELECT p FROM User p WHERE id = ?1")
User readId(Integer id);
//Query注解也可以定义SQL语句,只要将nativeQuery属性改为true
@Query(nativeQuery = true, value = "select name from user where id = :id")
String findNamebyId(@Param("id")Integer id);
update/delete操作需要事务支持,必须在service层,添加事务,因为spring data,默认情况下每个方法是只读事务,不能完成update/delete操作。在@Query注解中定义,必须加上@Modify,告诉spring data 这是一个update/delete操作。
模糊查询:
//模糊查询
@Query(nativeQuery = true,value = " select * from user where name like %?1% ")
User findUserByLikeName(String name);
分页查询:
定义分页查询,只需要将查询的参数和分页对象作为参数。
Page<User> findByNameLike(String str , Pageable pageable);
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
增加countQuery属性,用于总数的统计 可以不要
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class SpringDataTest {
@Autowired
private UserRepository repository;
@Test
public void test(){
/**
* SpringData jpa 的分页
* Pageable接口的实现类是PageRequest,Page接口的实现类是PageImpl。
*/
Pageable page = new PageRequest(0,2,new Sort(Sort.Direction.DESC,"id"));
Page<User> personList = repository.findByLastname("张%",page);
System.out.println("总记录数" + personList.getTotalElements());
System.out.println("当前第几页: " + (personList.getNumber() + 1));
System.out.println("总页数: " + personList.getTotalPages());
System.out.println("当前页面的记录数:" + personList.getContent());
System.out.println("当前页面的记录数: " + personList.getNumberOfElements());
}
}
ort对象,定义排序规则,常用的是下面这种构造函数,支持可变参数的
public Sort(Sort.Direction direction, String... properties) {
this(direction, (List)(properties == null ? new ArrayList() : Arrays.asList(properties)));
}
最后
以上就是靓丽季节为你收集整理的Springdata Jpa使用规范的全部内容,希望文章能够帮你解决Springdata Jpa使用规范所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复