前面几天我们都在学习使用mongoTemplate来操作数据库,其实data框架提供了很多种方式,mongoTemplate只是其中一种,今天我们来学习下使用Repositor操作数据库。
Repositor其实就类似于hibernate这种框架,主要目的就是为了提高开发效率,让开发者使用起来更加的简单,但是我个人不太推荐使用这种方式,这种方式确实显得有点傻瓜式了,而且对于比如说后期进公司的新人来说,不懂它这种规律是无法去改造的。
说了这么多我们开始学习吧。
首先我们在之前定义的applicationContent.xml中添加Repositor的配置 指定repository所在的包
<mongo:repositories base-package="com.cxytiandi.mongo.repository" />
然后在配置的包中新建个repository的接口
@Repository("ArticleRepositor")
public interface ArticleRepositor extends PagingAndSortingRepository<Article, String> {
//分页查询
public Page<Article> findAll(Pageable pageable);
//根据author查询
public List<Article> findByAuthor(String author);
//根据作者和标题查询
public List<Article> findByAuthorAndTitle(String author, String title);
//忽略参数大小写
public List<Article> findByAuthorIgnoreCase(String author);
//忽略所有参数大小写
public List<Article> findByAuthorAndTitleAllIgnoreCase(String author, String title);
//排序
public List<Article> findByAuthorOrderByVisitCountDesc(String author);
public List<Article> findByAuthorOrderByVisitCountAsc(String author);
//自带排序条件
public List<Article> findByAuthor(String author, Sort sort);
}
大家能看到接口中定义了很多种的查询方式 不知道大家有发现规律没,这边所有的查询方法都以find开头,比如说findAll()表示查询所有。 如果我们要根据某个字段去查询就使用findByAuthor author就是你要查询的字段,如果多个字段的话就是findBy字段1And字段2。 然后还有就是排序什么的,忽略大小写,模糊查询等等都有类似的语法。 看起来是不是很简单,只要掌握它的规律就行,即使你完全不懂mongodb的语法也能去操作mongodb。
下面我给出调用的示列,大家一看就明白了
/**
* 查询所有
* @author yinjihuan
*/
private static void findAll() {
Iterable<Article> articles = articleRepositor.findAll();
articles.forEach(article ->{
System.out.println(article.getId());
});
}
/**
* 根据作者查询
* @author yinjihuan
*/
private static void findByAuthor() {
List<Article> articles = articleRepositor.findByAuthor("jason");
articles.forEach(article ->{
System.out.println(article.getId());
});
}
/**
* 分解作者和标题查询
* @author yinjihuan
*/
private static void findByAuthorAndTitle() {
List<Article> articles = articleRepositor.findByAuthorAndTitle("yinjihuan", "MongoTemplate的基本使用");
articles.forEach(article ->{
System.out.println(article.getId());
});
}
/**
* 根据作者查询,忽略大小写
* @author yinjihuan
*/
private static void findByAuthorIgnoreCase() {
List<Article> articles = articleRepositor.findByAuthorIgnoreCase("JASON");
articles.forEach(article ->{
System.out.println(article.getId());
});
}
/**
* 忽略所有参数的大小写
* @author yinjihuan
*/
private static void findByAuthorAndTitleAllIgnoreCase() {
List<Article> articles = articleRepositor.findByAuthorAndTitleAllIgnoreCase("JASON", "MONGOTEMPLATE的基本使用");
articles.forEach(article ->{
System.out.println(article.getId());
});
}
/**
* 根据作者查询,并且以访问次数降序排序显示
* @author yinjihuan
*/
private static void findByAuthorOrderByVisitCountDesc() {
List<Article> articles = articleRepositor.findByAuthorOrderByVisitCountDesc("yinjihuan");
articles.forEach(article ->{
System.out.println(article.getAuthor());
});
}
/**
* 根据作者查询,并且以访问次数升序排序显示
* @author yinjihuan
*/
private static void findByAuthorOrderByVisitCountAsc() {
List<Article> articles = articleRepositor.findByAuthorOrderByVisitCountAsc("yinjihuan");
articles.forEach(article ->{
System.out.println(article.getAuthor());
});
}
/**
* 自带排序条件
* @author yinjihuan
*/
private static void findByAuthorBySort() {
List<Article> articles = articleRepositor.findByAuthor("yinjihuan", new Sort(Direction.ASC, "VisitCount"));
articles.forEach(article ->{
System.out.println(article.getAuthor());
});
}
/**
* 分页查询所有,并且排序
*/
private static void findByPage() {
int page = 1;
int size = 2;
Pageable pageable = new PageRequest(page, size,new Sort(Direction.ASC, "VisitCount"));
Page<Article> pageInfo = articleRepositor.findAll(pageable);
//总数量
System.out.println(pageInfo.getTotalElements());
//总页数
System.out.println(pageInfo.getTotalPages());
for (Article article : pageInfo.getContent()) {
System.out.println(article.getAuthor());
}
}
当然我这边只是列出来一些最基本的用法,还有很多用法我把官方文档上的示列给大家贴出来。