目录
SpringData可以任意集成各类数据库像elasticsearch、mysql、redis、mongodb等数据库,其操作方法都是比较统一的,方便快速开发,并将可以大大降低代码耦合。
下面开始实现springData集成mongodb
一、导入依赖
主要依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--测试类依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--junit4-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
配置文件:
spring:
data:
mongodb:
# uri: mongodb://localhost:27017/mydb
# 有用户名密码的uri:
# mongodb://username:password@ip:port/database
host: mongo-server
port: 27017
database: mydb
username: username
password: password
authentication-database: admin # 不用uri的写法这行必须加上
二、实体类
package com.dragonwu.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Reader;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author DragonWu
* @date 2022-09-26 9:10
**/
@Document("article")//集合名
public class Article implements Serializable {//序列化不能少
@Id
private String id;
@Indexed //索引的注解,通过索引查询会很快 unique=true是设置唯一索引
private String author;
private String title;
@Field("myContent")//存入数据库时用这个别名
private String content;
@CreatedDate //创建时默认创建该时间字段
private Date createTime;
//private List<Reader> readers;
//getter setter......
@Override
public String toString() {
return "Article{" +
"id='" + id + '\'' +
", author='" + author + '\'' +
", title='" + title + '\'' +
", content='" + content + '\'' +
", createTime=" + createTime +
", readers=" + readers +
'}';
}
}
这里需要注意的是@CreatedDate注解使用前需要到启动类上添加@EnableMongoAuditing
如配置类:
package com.dragonwu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.config.EnableMongoAuditing;
/**
* @author DragonWu
* @date 2022-09-26 9:08
**/
@SpringBootApplication
@EnableMongoAuditing //@CreatedDate需要有该启动注解才能生效
public class APP {
public static void main(String[] args) {
SpringApplication.run(APP.class,args);
}
}
一般springData的实体类都通过@Document注解来指定哪个数据表,@Id来指定id主键,@Indexed来制定索引,@Columns来指定字段的属性,@Field来指定字段别名
其他的请查阅相关资料。
三、数据操作层
package com.dragonwu.dao;
import com.dragonwu.model.Article;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
/**
* @author DragonWu
* @date 2022-09-26 9:22
**/
public interface ArticleDao extends MongoRepository<Article,String> {
//支持关键字查询,和JPA的用法一样
List<Article> findByAuthor(String author);
//分页查询
List<Article> findByAuthor(String author,PageRequest pageRequest);
}
继承对应接口就行,更JPA的使用类似。
四、测试
package com.dragonwu;
import com.dragonwu.dao.ArticleDao;
import com.dragonwu.model.Article;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
/**
* @author DragonWu
* @date 2022-09-26 9:27
**/
@SpringBootTest(classes = APP.class)
@RunWith(SpringRunner.class)
public class myTest {
@Autowired
private ArticleDao articleDao;
@Test
public void testC() {
Article article = new Article();
article.setAuthor("Jack");
articleDao.save(article);
}
@Test
public void testR() {
List<Article> articles = articleDao.findByAuthor("Jack");
System.out.println(articles);
//分页查询
PageRequest pageRequest = PageRequest.of(current, size);
List<Article> articles2 = articleDao.findByAuthor("Jack",pageRequest);
System.out.println(articles2);
}
@Test
public void testD(){
Article article=articleDao.findAll().get(0);
articleDao.delete(article);
}
}
测试的使用也和JPA的使用类似。
总结到此。