Spring项目接入MongoDB

1|0前言

由于今日公司mysql数据库压力过大,由部分数据打算迁移至mongoDb,在此做个记录。

2|0配置

2|1pom文件中增加配置:

--

点击查看代码
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.9.0.RELEASE</version> </dependency>

这里需要注意下你的Spring版本的兼容情况,我的项目Spring版本为4.2.5。Spring版本兼容情况如下:

Spring Data MongoDB 1.8.0.RELEASE 1.9.0.RELEASE 1.9.4.RELEASE 1.9.9.RELEASE 2.0.0.RELEASE 2.1.9.RELEASE 3.0.3.RELEASE
mongo-java-driver 2.13.0 2.14.0 2.14.3 2.14.3 3.5.0 3.5.0 3.5.0
Spring Framework 4.1.7.RELEASE 4.2.5.RELEASE 4.2.8.RELEASE 4.3.13.RELEASE 5.0.0.RELEASE 5.1.8.RELEASE 5.2.8.RELEASE

参考链接:Spring Data MongoDB 与 mongo java driver 与 spring Framework 的版本兼容情况

2|2properties配置:

--

点击查看代码
mongo.hostport=127.0.0.1:27017 mongo.host=127.0.0.1 mongo.port=27017 mongo.connectionsPerHost=8 mongo.threadsAllowedToBlockForConnectionMultiplier=4 #连接超时时间 mongo.connectTimeout=1000 #等待时间 mongo.maxWaitTime=1500 #Socket超时时间 mongo.socketTimeout=1500 #admin登录信息 mongo.username=mongoadmin mongo.password=mongoadmin #DataBaseName #认证数据库名 mongo.authenticationDbname=admin #要链接的数据库名 mongo.databaseName=ttt

--

2|3servlet.xml中配置:

--
mongo-client的写法:

点击查看代码
<mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" credentials="${mongo.username}:${mongo.password}@${mongo.authenticationDbname}"> <mongo:client-options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" socket-keep-alive="true" socket-timeout="${mongo.socketTimeout}" /> </mongo:mongo-client> <!-- 使用用户名密码 --> <mongo:db-factory id="mongoDbFactory" dbname="${mongo.databaseName}" mongo-ref="mongoClient"/> <bean id="MongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean>

--

如果是老版mongo的写法为(此写法已过时):

点击查看代码
<!-- 下面是mongo的方式 --> <mongo:mongo replica-set="${mongo.hostport}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" socket-keep-alive="true" socket-timeout="${mongo.socketTimeout}" slave-ok="true" write-number="1" write-timeout="0" write-fsync="true" /> </mongo:mongo> <mongo:db-factory username="${mongo.username}" password="${mongo.password}" dbname="${mongo.databaseName}" mongo-ref="mongo"/> <!-- 不使用用户名密码 --> <!-- <mongo:db-factory dbname="${mongo.databaseName}" mongo-ref="mongo"/>--> <bean id="MongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean>

--

3|0简单的增删改查

3|1实体类

--

点击查看代码
@Document(collection = "student") @CompoundIndexes({ @CompoundIndex(name = "idx_name_time", def = "{'name': 1, 'create_time':-1}") }) public class Student{ @Id private ObjectId id; @Field("name") private String name; @Field("create_time") private Date createTime; }

--

3|2仓储类

--

点击查看代码
@Repository public class StudentDaoImpl implements StudentDao { @Autowired private MongoTemplate mongoTemplate; @Override public int insert(Student student) { try{ mongoTemplate.insert(student); return 1; }catch (Exception e){ log.error("insert failed, ",e); return 0; } } @Override public List<Student> findList(StudentQueryDto queryDto) { Query query = new Query(); Criteria criteria = new Criteria(); if (null != queryDto.getName()) { criteria.and("name").is(queryDto.getName()); } if (null != pointDataQueryDto.getStartTime() && null != pointDataQueryDto.getEndTime()) { criteria.andOperator(Criteria.where("create_time").gte(queryDto.getStartTime()) , Criteria.where("create_time").lt(queryDto.getEndTime())); } else if (null != queryDto.getStartTime()) { criteria.and("create_time").gte(queryDto.getStartTime()); } else if (null != queryDto.getEndTime()) { criteria.and("create_time").lt(queryDto.getEndTime()); } query.addCriteria(criteria); return new ArrayList<>(mongoTemplate.find(query, Student.class)); } @Override public Long findListCount(StudentQueryDto queryDto) { Query query = new Query(); Criteria criteria = Criteria.where("name").is(queryDto.getName()) .andOperator(Criteria.where("create_time").gte(queryDto.getStartTime()) ,Criteria.where("create_time").lt(queryDto.getEndTime())); query.addCriteria(criteria); return mongoTemplate.count(query, Student.class); } @Override public long deleteByTime(Date startTime, Date endTime) { Criteria criteria =new Criteria(); criteria.andOperator(Criteria.where("create_time").gte(startTime) ,Criteria.where("create_time").lt(endTime)); Query query = new Query(criteria); WriteResult result = mongoTemplate.remove(query, PointData.class); long count = result.getN(); return count; } }

__EOF__

本文作者君子酱
本文链接https://www.cnblogs.com/gdvxfgv/p/17007491.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   君子酱  阅读(381)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示