Spring Data JPA 简单的使用
2018-02-02 00:20
399 查看
Spring Data JPA
包含4个接口(org.springframework.data.repository.Repository):
1. Repository
2. CrudRepository (继承了Repository接口)
3. PagingAndSortingRepository (支持分页排序,继承了CrudRepository接口)
4. JpaRepository (继承了PagingAndSortingRepository接口)
5. JpaSpecificationExecutor(按查询条件进行查询)
一、Repository
1. 正常操作:
findById where id =?
findByName wherename=?
备注:可以返回一个对象或对象列表,但如果返回有多个结果时,有一个对象进行接收会抛出org.springframework.dao.IncorrectResultSizeDataAccessException:result returns more than one elements; 异常
2.使用原生sql,即@ Query
eg1:(@Query中的User为类名,没加nativeQuery = true)
@Query("select * from User where username=%?1% and age=?2")
public List<User>getUserl(String name,int age);
eg2:(@Query中的user为表名,加了nativeQuery = true)
@Query("select * from user whereusername=%?1% and age=?2" ,nativeQuery = true)
public List<User>getUserl(String
name,int age);
eg3:
@Query(“update User set name=?2
where id =?1 ”)
public void update(int id,String name);
这里不能直接调用,1.需要增加@Modifying注解并且.需要在Server层就行事务管理
定义:
@Modifying
@Query(“update User set name=?2 where id =?1 ”)
public void update(int id,String name);
调用:
@Service
public class UserServer{
@Autowired
private UserDao userDao;
@Transactional
public void update(int id,String name){
userDao.update(id,name);
}
}
插入,删除同上
二、CrudRepository(直接用)
//保存一个对象
save(S var1);
//保存一堆对象
save(Iterable<S>var1);
//根据Id查对象
TfindOne(ID var1);
//判断Id是否存在
boolean exists(ID var1);
//查询所有
Iterable<T> findAll();
//根据Id列表,查询所有
Iterable<T> findAll(Iterable<ID> var1);
//查询数量
long count();
//根据id删除一个
void delete(ID var1);
//根据对象删除一个
void delete(T var1);
//批量删除
void delete(Iterable<? extends T> var1);
//全部删除
void deleteAll();
三、PagingAndSortingRepository
支持分页,直接上例子:
1.分页
public void pageTest(){
Pageable pageable = new PageRequest(0,5);
Page<User> page = userRespository.findAll(pageable);
}
备注:
org.springframework.data.domain.Pageable;
页数从0开始
查询第0页,每页显示5条
查询总页数 page.getTotalPages();
查询总记录数 page.getTotalElements();
当前页(从第0页开始)page.getNumber();
查询到的内容List<User> page.getContent();
当前页面的记录数 page.getNumberOfElements();
2.排序
public void testSort(){
Sort.Order order = newSort.Order(Sort.Direction.DESC,"id");
Sort sort = new Sort(order);
Pageable pageable = new PageRequest(0,5,sort);
Page<User> page = userRespository.findAll(pageable);
}
备注:
Sort.Direction.DESC降序 “id” 排序字段
四、JpaRepository(有上面所有功能)
五、JpaSpecificationExecutor(按查询条件进行查询)
publicvoid testJpaSpecificationExecutor(){
Specification<Uset> specification= new Specification<User>() {
@Override
public Predicate
toPredicate(Root<User>root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder
criteriaBuilder)
{
Path path =root.get("age");
Path path1 =root.get("name");
Path path2 = root.get("id");
Predicate predicate =criteriaBuilder.and(criteriaBuilder.gt(path,20),criteriaBuilder.like(path1,"%zhang%)"));
return criteriaBuilder.and(predicate,criteriaBuilder.gt(path2,3));
}
};
userRespository.findAll(specification);
}
包含4个接口(org.springframework.data.repository.Repository):
1. Repository
2. CrudRepository (继承了Repository接口)
3. PagingAndSortingRepository (支持分页排序,继承了CrudRepository接口)
4. JpaRepository (继承了PagingAndSortingRepository接口)
5. JpaSpecificationExecutor(按查询条件进行查询)
一、Repository
1. 正常操作:
findById where id =?
findByName wherename=?
备注:可以返回一个对象或对象列表,但如果返回有多个结果时,有一个对象进行接收会抛出org.springframework.dao.IncorrectResultSizeDataAccessException:result returns more than one elements; 异常
2.使用原生sql,即@ Query
eg1:(@Query中的User为类名,没加nativeQuery = true)
@Query("select * from User where username=%?1% and age=?2")
public List<User>getUserl(String name,int age);
eg2:(@Query中的user为表名,加了nativeQuery = true)
@Query("select * from user whereusername=%?1% and age=?2" ,nativeQuery = true)
public List<User>getUserl(String
name,int age);
eg3:
@Query(“update User set name=?2
where id =?1 ”)
public void update(int id,String name);
这里不能直接调用,1.需要增加@Modifying注解并且.需要在Server层就行事务管理
定义:
@Modifying
@Query(“update User set name=?2 where id =?1 ”)
public void update(int id,String name);
调用:
@Service
public class UserServer{
@Autowired
private UserDao userDao;
@Transactional
public void update(int id,String name){
userDao.update(id,name);
}
}
插入,删除同上
二、CrudRepository(直接用)
//保存一个对象
save(S var1);
//保存一堆对象
save(Iterable<S>var1);
//根据Id查对象
TfindOne(ID var1);
//判断Id是否存在
boolean exists(ID var1);
//查询所有
Iterable<T> findAll();
//根据Id列表,查询所有
Iterable<T> findAll(Iterable<ID> var1);
//查询数量
long count();
//根据id删除一个
void delete(ID var1);
//根据对象删除一个
void delete(T var1);
//批量删除
void delete(Iterable<? extends T> var1);
//全部删除
void deleteAll();
三、PagingAndSortingRepository
支持分页,直接上例子:
1.分页
public void pageTest(){
Pageable pageable = new PageRequest(0,5);
Page<User> page = userRespository.findAll(pageable);
}
备注:
org.springframework.data.domain.Pageable;
页数从0开始
查询第0页,每页显示5条
查询总页数 page.getTotalPages();
查询总记录数 page.getTotalElements();
当前页(从第0页开始)page.getNumber();
查询到的内容List<User> page.getContent();
当前页面的记录数 page.getNumberOfElements();
2.排序
public void testSort(){
Sort.Order order = newSort.Order(Sort.Direction.DESC,"id");
Sort sort = new Sort(order);
Pageable pageable = new PageRequest(0,5,sort);
Page<User> page = userRespository.findAll(pageable);
}
备注:
Sort.Direction.DESC降序 “id” 排序字段
四、JpaRepository(有上面所有功能)
五、JpaSpecificationExecutor(按查询条件进行查询)
publicvoid testJpaSpecificationExecutor(){
Specification<Uset> specification= new Specification<User>() {
@Override
public Predicate
toPredicate(Root<User>root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder
criteriaBuilder)
{
Path path =root.get("age");
Path path1 =root.get("name");
Path path2 = root.get("id");
Predicate predicate =criteriaBuilder.and(criteriaBuilder.gt(path,20),criteriaBuilder.like(path1,"%zhang%)"));
return criteriaBuilder.and(predicate,criteriaBuilder.gt(path2,3));
}
};
userRespository.findAll(specification);
}
相关文章推荐
- Spring Data Jpa 简单使用事务
- Spring Data Jpa 简单使用事务
- Spring--简单使用quartz实现定时作业
- 使用Spring来创建一个简单的工作流引擎
- 使用AOP,在spring中实现简单的性能测试
- 使用Spring来创建一个简单的工作流引擎
- 一个使用spring的最简单的例子。
- 使用Spring来创建一个简单的工作流引擎
- Spring -- 简单使用quartz实现定时作业
- Spring--简单使用quartz实现定时作业
- Spring:使用JdbcTemplate的简单实例-基于XML文件配置
- 使用Spring来创建一个简单的工作流引擎
- Spring:使用JdbcTemplate的简单实例-基于注释
- 使用Spring来创建一个简单的工作流引擎
- Spring中配合hibernate使用的简单例子
- 使用buffalo集成spring写的一个简单的登录子模块
- Spring--简单使用quartz实现定时作业
- Spring--简单使用quartz实现定时作业
- [转]Spring--简单使用quartz实现定时作业
- 使用Spring来创建一个简单的工作流引擎