在之前的spring-boot-jpa项目中,简单的使用了jpa查询了一下数据库。
这个接口有很多基本的方法。
继承的这个是用来分页的
这个是一下复杂查询的接口
这个分页又继承CrudRepository
是基本的增删改查
@RequestMapping(value = "save", method = RequestMethod.GET)
public String postAccount(@RequestParam(value = "name") String name,
@RequestParam(value = "money") double money) {
Account account = new Account();
account.setMoney(money);
account.setName(name);
Account account1 = accountDao.save(account);
return account1.toString();
@RequestMapping("/delete")
public void delete(String id) {
accountDao.deleteById(Integer.valueOf(id));
}
public interface AccountDao extends JpaRepository<Account,Integer> {
@Query(value = "select * from account where name = ?1", nativeQuery = true)
public List nativeQuery(String name);
}
@Query
nativeQuery = true
表示使用原生sql查询。
配合事务和编辑可以执行修改删除操作
@Transactional
@Modifying
@Query(value = "delete from account where name = ?1", nativeQuery = true)
public void deleteByName(String name);
创建base实体类
public class BaseAccountPage implements Serializable {
/**
* 默认页码
*/
private int page = 1;
/**
* 分页数量
*/
private int size = 10;
/**
* 排序名称
*/
private String index = "name";
/**
*
* 排序正序
*
*/
protected String sord = "asc";
setter、getter省略
}
控制器:
其中PageRequest的sort参数可以没有,就默认不排序了。
@RequestMapping("/queryByPage")
public List queryByPage(int pageNum) {
BaseAccountPage page = new BaseAccountPage();
page.setPage(pageNum);
page.setSize(5);
page.setSord("desc");
page.setIndex("id");
System.out.println(page.toString());
//获取排序对象
Sort.Direction direction = Sort.Direction.ASC.toString().equalsIgnoreCase(page.getSord()) ? Sort.Direction.ASC : Sort.Direction.DESC;
//根据排序对象排序
Sort sort = new Sort(direction, page.getIndex());
//创建分页对象
PageRequest pageRequest = new PageRequest(page.getPage()-1, page.getSize(), sort);
return accountDao.findAll(pageRequest).getContent();
}
当然也可以直接使用原生sql查询
@RequestMapping("/findByParam")
public Account findByParam(int id) {
// getOne返回引用对象 findOne返回实体,Optional 是一个包含或着不包含一个非空值的容器对象。
//getOne查不到报错。查到又不可以直接json返回,原因不详。
Account one = accountDao.getOne(3);
System.out.println(one.toString());
//根据 `实例` 查询Example
//这里条件会自动把int、duble的默认为0,注意一下。
Account account = new Account();
account.setId(10);
account.setMoney(12.0);
// 如果一个值存在,isPresent()将会返回true 并且 get() 将会返回所对应的值.
Example example = Example.of(account);
Optional optional = accountDao.findOne(example);
return optional.orElse(null);
}