- 前言
- 1. 依赖
- 2. 配置
- 2.1 配置文件
- 2.2 配置代码
- 3. 实体类
- 4. 实战
- 4.1 查询
- 4.2 插入
- 4.3 删除
关于mongo的相关知识可看我这篇文章:
- 云服务器下载安装mongo数据库并远程连接详细图文版本(全)
- MongoDB框架零基础入门
通过如下找到你想要的依赖包,在这搜索对应的版本号:mvn仓库
导入相对应的依赖包:
2. 配置org.springframework.boot spring-boot-starter-data-mongodb 2.7.2 org.mongodb mongodb-driver-sync 4.7.1
可以通过配置文件或者是代码进行重构
2.1 配置文件该配置文件主要用来连接mongo,需要服务器ip地址、用户名、密码等(类似mysql的连接)
可以通过配置文件,定义其配置参数
具体参数有如下(将其对应参数写在application.properties即可):
| 参数 | 描述 |
|---|---|
| spring.data.mongodb.uri | mongodb://localhost:27017/testMongoDB |
| spring.data.mongodb.host | mongo连接地址 |
| spring.data.mongodb.port | 端口号 |
| spring.data.mongodb.authentication-database | 验证的数据库 |
| spring.data.mongodb.username | 数据库用户名 |
| spring.data.mongodb.password | 数据库密码 |
| spring.data.mongodb.database | 连接的数据库名 |
和上面的配置差不多,只不过此处用代码加工了下而已
配置文件定义如下(将其具体隐私使用了xxxx或者yyyy进行表示):mongo.audio.uri=mongodb://xxxxx:yyyyy@127.0.0.1:端口/xxxxx?connectTimeoutMS=10000&socketTimeoutMS=10000
配置类代码引入:
@Configuration
public class MultiMongoTemplate {
@Primary
@Bean
public MongoTemplate audioMongoTemplate(@Value("${mongo.audio.uri}") String uri) {
MongoTemplate mongoTemplate = new MongoTemplate(new SimpleMongoClientDatabaseFactory(uri));
setDefaultTypeMapper(mongoTemplate);
return mongoTemplate;
}
// 省略多个数据库的连接地址
private void setDefaultTypeMapper(MongoTemplate mongoTemplate) {
if (null == mongoTemplate) {
return;
}
MappingMongoConverter converter = (MappingMongoConverter) mongoTemplate.getConverter();
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
}
}
3. 实体类
此实体类用在数据库以及代码中
具体定义如下:
- @Data的注解可看这篇文章:spring中@Data注解详细解析
- @AllArgsConstructor : 注解在类上,有参构造
- @NoArgsConstructor : 注解在类上,无参构造
其Field注解对应数据库的显示,遵从驼峰规则
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
// 没有创建的时候会给数据库自动创建一个collection
@Document(collection = Collections.SDK_FILE_CONFIG)
@Data
@ToString
@NoArgsConstructor
public class SdkInfo {
@Id
private String id;
@Field("file_name")
private String fileName;
@Field("file_size")
private String fileSize;
@Field("create_time")
private String createTime;
@Field("page")
private String page;
@Field("size")
private String size;
@Field("Operator_name")
private String OperatorName;
@Field("upload_url")
private String uploadUrl;
@Field("download_url")
private String downloadUrl;
}
查看其数据库显示:
之后通过代码模块进行连接测试:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MainApplication.class)
@Slf4j
public class MongoConnectTest {
private static final Logger logger = LoggerFactory.getLogger(MongoConnectTest.class);
@Autowired
@Qualifier("audioMongoTemplate")
private MongoTemplate mongoTemplate;
// 以下为测试文件的章节
}
关于MongoTemplate的实体类中还有多个函数,以下函数已经够用了
4.1 查询查询显示所有的值
关于find的具体函数定义如下:
@Test
public void test1(){
Query query=new Query();
List configs = mongoTemplate.find(query, SdkInfo.class);
// 输出整张表对应的某个字段 通过get获取
configs.forEach(config -> log.info(config.getId()));
// 输出整张表对应的全部值 通过totoString
configs.forEach(config -> log.info(config.toString()));
}
关于findAll的具体函数定义如下:
等同于:
// 查询mongo全部集合
@Test
public void test1(){
Query query=new Query();
List configs = mongoTemplate.findAll(SdkInfo.class);
// 输出整张表对应的某个字段值 通过get获取
configs.forEach(config -> log.info(config.getId()));
// 输出整张表对应的全部值 通过totoString
configs.forEach(config -> log.info(config.toString()));
}
还有一种查询的格式类似这种:
Query query=new Query(); query.with(Sort.by(new Sort.Order(Sort.Direction.ASC, "fileSize"))); try (MongoCursorcursor = //指定查询集合 mongoTemplate.getCollection("sdk_file_config") //组装查询条件 .find(query.getQueryObject()) //组装排序方式(非必须,可不设置) .sort(query.getSortObject()) //设置游标查询不超时 .noCursorTimeout(true) //设置批量从数据库中获取的数据量 .batchSize(1000) .cursor()) { Document doc; while (cursor.hasNext()) { doc = cursor.next(); System.out.println(doc.get("download_url")); } } catch (Exception e) { e.printStackTrace(); }
类似这种是获取整一列的值
如果获取这一列的某个值而已,具体如下:
@Test
public void test1(){
Query query=new Query(Criteria.where("name").is("码农研究僧"));
List configs = mongoTemplate.find(query, SdkInfo.class);
// 输出整张表对应的全部值 通过totoString
configs.forEach(config -> log.info(config.toString()));
}
如果获取满足条件的一行数据
@Test
public void test4(){
Query query=new Query();
SdkInfo configs = mongoTemplate.findOne(query, SdkInfo.class);
String id = configs.getId();
log.info(id);
}
将其写好的数据,结合java web,放到前端form表单中
@Override public List4.2 插入
数据库的插入一版都是通过insert
将其写好的数据一一insert进入
结合java web开发,传入对应的数据,相对应的插入某些字段值
@Override
public void uploadmongo(String fileName, Long fileSize, String getUploadUrl, String getDownloadUrl){
SdkInfo sdkInfo = new SdkInfo();
sdkInfo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
sdkInfo.setFileName(fileName);
sdkInfo.setOperatorName("码农研究僧");
sdkInfo.setUploadUrl(getUploadUrl);
sdkInfo.setDownloadUrl(getDownloadUrl);
SdkInfo insert = mongoTemplate.insert(sdkInfo);
if(String.valueOf(insert) != null){
logger.info(String.valueOf(insert));
}else{
logger.info("Failed to insert data");
}
}
4.3 删除
关于删除,类似mongo的drop删除整个表或者remove删除某一列的数据
结合javaweb 的form表单,根据获取某个字段值,对应删除正一行数据
@Override
public void deletemongo(String id) {
Query query = new Query(Criteria.where("_id").is(id));
mongoTemplate.remove(query, SdkInfo.class);
}



