- 前言
- 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(); Listconfigs = 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(); Listconfigs = 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("码农研究僧")); Listconfigs = 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); }