SpringBoot中用CrudRepository简化Mysql查询

发布于 2016-07-10  22.78k 次阅读


只需要使用

public interface UPersonDao extends CrudRepository<UPerson, Integer>{
}

声明一个Dao类继承CrudRepository以后我们就能直接用CrudRepository带的各种方法。

一、提供了的方法

1.保存save

<S extends T> S save(S entity);

<S extends T> Iterable<S> save(Iterable<S> entities);

上面一个是传入一个entity,保存以后返回这个entity。
下面的一个理论上来说可以传多个entity,但是我测试的数组和List都不行。
例:

private UPersonDao uPersonDao;
@RequestMapping("/save")
public Object save(){
UPerson uPerson = new UPerson();
uPerson.setName("Cheney");
uPerson.setAge("100");
return uPersonDao.save(uPerson);
}

2.按id查找findOne

T findOne(ID id);

传入一个id,返回一个对象。
例:

private UPersonDao uPersonDao;
@RequestMapping("/findone")
public Object findone(){
UPerson uPerson = uPersonDao.findOne(1);
return uPerson;
}

3.按id删除

void delete(ID id);

传入一个id并删除,无返回值。
例:

private UPersonDao uPersonDao;
@RequestMapping("/delete")
public String delete(){
uPersonDao.delete(1);
return "deleted";
}

还有一个删除所有:

void deleteAll();

可以清空整张表。

二、自己写常用的方法

如果要按某些属性来查找,那么可以直接在UPersonDao中声明:

List findByAge(int age);

这样子我们就能使用findByAge方法来按照age字段查找数据。
例:

private UPersonDao uPersonDao;
@RequestMapping("/findByAge")
public Object findbyage(int age){
    List uPerson = uPersonDao.findByAge(20);
    return uPerson;
}

在UPersonDao中还可以这么声明:

//使用多个属性name和age同时查找
List findByNameAndAge(String name,int age);
//用IgnoreCase使查询忽略大小写
List findByNameIgnoreCase(String lastname);
//用AllIgnoreCase这样所有的变量都忽略大小写
List findByNameAndAgeAllIgnoreCase(String lastname, String firstname);
//设置结果排序方式
List findByNameOrderByAgeAsc(String lastname);
List findByAgeOrderByNameDesc(String lastname);

更多查询见官方文档:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories