详解MongoDB和Spring整合的实例代码

这篇文章主要介绍了详解MongoDB和Spring整合的实例代码,Spring提供了MongoTemplate这样一个模板类的实现方法,简化了具体操作。有兴趣的可以了解一下

MongoDB现在用的非常非常多,如何和Spring整合也是经常碰到的问题。

Spring提供了MongoTemplate这样一个模板类的实现方法,简化了具体操作。

下面讲一下具体实现:

添加依赖

  org.springframework.dataspring-data-mongodb1.10.3.RELEASE

其余Spring相关的忽略

Spring的配置applicationContext-mongo.xml

        

mongo:mongo-client是定义MongoDB的客户端连接,需要host和port参数,如果需要账号密码的话,需要增加credentials配置

mongo:db-factory配置连接工厂,指定具体的连接数据库,本例默认为test

defaultMongoTypeMapper默认Mongodb类型映射

mongo:mapping-converterMongoDB的实体映射

mongoTemplate这是最主要的,定义模板类,依赖连接工厂和实体映射

这里举一个article的增删改查的例子。

相关实体Article.java

 @Document(collection = "article_info") public class Article { @Id private String id;//id @Field("title") private String title;//标题 @Field("url") private String url;//链接 @Field("author") private String author;//作者 @Field("tags") private List tags;//tag 标签 @Field("visit_count") private Long visitCount;//访问次数 @Field("add_time") private Date addTime;//添加时间 // get set方法省略 

@Document(collection = "article_info")这个注解和Hibernate的注解Entiry非常相似,就是定义一个文档,对象MongoDB存储的Collection的名称是article_info

@Id指该字段是主键,不能缺少

@Field("add_time")指该字段映射MongoDB的实际字段,如果一致可以省略

ArticleRepository实际访问接口

 @Repository("ArticleRepository") public interface ArticleRepository extends PagingAndSortingRepository { //分页查询 public Page
findAll(Pageable pageable); //根据author查询 public List
findByAuthor(String author); //根据作者和标题查询 public List
findByAuthorAndTitle(String author, String title); //忽略参数大小写 public List
findByAuthorIgnoreCase(String author); //忽略所有参数大小写 public List
findByAuthorAndTitleAllIgnoreCase(String author, String title); //排序 public List
findByAuthorOrderByVisitCountDesc(String author); public List
findByAuthorOrderByVisitCountAsc(String author); //自带排序条件 public List
findByAuthor(String author, Sort sort); }

Spring的data repository封装了一套增删改查的方法,就和JPA实现的一样,ArticleRepository继承PagingAndSortingRepository,就集成了常用的增删改查方法,比如save、findOne、exists、findAll、delete等等,可以采用默认实现方式来完成常用的增删改查操作。

测试上述各个方法ArticleRepositoryTest.java

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:applicationContext-mongo.xml"}) public class ArticleRepositoryTest { @Autowired private ArticleRepository articleRepository; /** * 新增记录 */ @Test public void add() { //增加一条记录 Article article = new Article(); article.setId("1"); article.setTitle("MongoTemplate的基本使用"); article.setAuthor("kcy"); article.setUrl("http://jianshu.com/"); article.setTags(Arrays.asList("java", "mongodb", "spring")); article.setVisitCount(0L); article.setAddTime(new Date()); articleRepository.save(article); //批量添加 List
articles = new ArrayList<>(10); for (int i = 0; i <10; i++) { Article article2 = new Article(); article2.setId(String.valueOf(i + 1)); article2.setTitle("MongoTemplate的基本使用"); article2.setAuthor("kcy"); article2.setUrl("http://jianshu.com" + i); article2.setTags(Arrays.asList("java", "mongodb", "spring")); article2.setVisitCount(0L); article2.setAddTime(new Date()); articles.add(article2); } articleRepository.save(articles); } /** * 修改记录,修改id为1的访问次数+1 */ @Test public void update() { Article article = articleRepository.findOne("1"); article.setVisitCount(article.getVisitCount() + 1); articleRepository.save(article); } /** * 批量修改,查看author为kcy的统一修改为kcy2 */ @Test public void batchUpdate() { List
articles = articleRepository.findByAuthor("kcy"); articles.forEach(article -> { article.setAuthor("kcy2"); }); articleRepository.save(articles); } /** * 删除记录,删除id为10的 */ @Test public void delete() { Article article = articleRepository.findOne("10"); articleRepository.delete(article); } @Test public void batchDelete() { List
articles = articleRepository.findByAuthor("kcy2"); articleRepository.delete(articles); } /** * 查询所有 * * @author 孔垂云 */ @Test public void findAll() { Iterable
articles = articleRepository.findAll(); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 根据author查询 * * @author 孔垂云 */ @Test public void findByAuthor() { List
articles = articleRepository.findByAuthor("kcy"); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 按照author和title查询 * * @author 孔垂云 */ @Test public void findByAuthorAndTitle() { List
articles = articleRepository.findByAuthorAndTitle("kcy", "MongoTemplate的基本使用"); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 根据作者查询,忽略大小写 * * @author 孔垂云 */ @Test public void findByAuthorIgnoreCase() { List
articles = articleRepository.findByAuthorIgnoreCase("JASON"); articles.forEach(article -> { System.out.println(article.getId()); }); } /** * 忽略所有参数的大小写 * * @author 孔垂云 */ @Test public void findByAuthorAndTitleAllIgnoreCase() { List
articles = articleRepository.findByAuthorAndTitleAllIgnoreCase("KCY", "MONGOTEMPLATE的基本使用"); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 根据author查询,并且以访问次数降序排序显示 * * @author 孔垂云 */ @Test public void findByAuthorOrderByVisitCountDesc() { List
articles = articleRepository.findByAuthorOrderByVisitCountDesc("kcy"); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 根据作者查询,并且以访问次数升序排序显示 * * @author 孔垂云 */ @Test public void findByAuthorOrderByVisitCountAsc() { List
articles = articleRepository.findByAuthorOrderByVisitCountAsc("kcy"); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 自带排序条件 * * @author 孔垂云 */ @Test public void findByAuthorBySort() { List
articles = articleRepository.findByAuthor("kcy", new Sort(Direction.ASC, "VisitCount")); articles.forEach(article -> { System.out.println(article.toString()); }); } /** * 分页查询所有,并且排序 */ @Test public void findByPage() { int page = 1; int size = 2; Pageable pageable = new PageRequest(page, size, new Sort(Direction.ASC, "VisitCount")); Page
pageInfo = articleRepository.findAll(pageable); //总数量 System.out.println(pageInfo.getTotalElements()); //总页数 System.out.println(pageInfo.getTotalPages()); for (Article article : pageInfo.getContent()) { System.out.println(article.toString()); } } }

上面一段代码较长,基本上MongoDB常用的各种例子都讲清楚了,比如增加、批量增加、修改、删除、按id查找、按标题查询、分页等等。

源码下载

本工程详细源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是详解MongoDB和Spring整合的实例代码的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java