一、在spring框架中启用mongo db
spring集成mongodb可以通过java和xml两种方式进行集成,下面是xml方式:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd" > <!--启用repository扫描功能--> <mongo:repositories base-package="com.qcsy"/> <!--定义用于访问 MongoDB 的 MongoClient 实例--> <mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}"> <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="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" /> </mongo:mongo-client> <!--定义用于连接到数据库的连接工厂--> <mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongoClient"/> <!--实际操作 mongodb 的 template,在代码中注入。注意如果此处id不叫mongoTemplate。可能会导致使用Repositry的时候找不到,需要特殊映射--> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> </beans>
配置文件:
#mongo db的配置,如果不启用则不需要配置 mongo.host=localhost mongo.port=27017 # 数据库名称. 默认是'db'. mongo.dbname=test # 每个主机允许的连接数 mongo.connectionsPerHost=10 # 线程队列数,它和上面connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出异常 mongo.threadsAllowedToBlockForConnectionMultiplier=5 # 连接超时的毫秒 0是默认值且无限大。 mongo.connectTimeout=1000 # 最大等待连接的线程阻塞时间 默认是120000 ms (2 minutes). mongo.maxWaitTime=1500 # 保持活动标志,控制是否有套接字保持活动超时 官方默认为true 且不建议禁用 mongo.socketKeepAlive=true # 用于群集心跳的连接的套接字超时。 mongo.socketTimeout=1500
二、映射模型实体
@Document public class User { @Id private String userid; @Field("userinfo") private String username; private String userpassword; ......get\set方法........ }
@Document与@Entity类似,表明是一个实体,@Id表明是主键
其他的Spring data mongoDB注解还有:
@Document
把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。@Document(collection="mongodb 对应 collection 名")
@Id
文档的唯一标识,在mongodb中为ObjectId,它是唯一的
@Indexed
声明该字段需要索引,建索引可以大大的提高查询效率。
@CompoundIndex
复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
@Field
给映射存储到 mongodb 的字段取别名
@Dbref
标识引用其他文档,这个文档有可能在另外的数据库中
@Version
标识改属性作为版本控制
@Transient
默认情况下所有的私有字段都映射到文档,该注解标识的字段从存储在数据库中的字段列中排除(即该字段不保存到 mongodb)
三、使用MongoTemplate访问mongodb
@Autowired private MongoOperations mongoOperations;
在这里,我们将MongoTemplate注入到MongoOperations ,因为MongoTemplate是MongoOperations 实现类,使用接口注入是一个好的做法
/** * 保存数据 */ @Override public void templateSave() { User user=new User(); user.setUserid("001"); user.setUsername("测试"); user.setUserpassword("11"); mongoOperations.save(user,"user"); } /** * 更新数据 */ @Override public void templateUpdate() { //where跟的是字段,is相当于等于 Query query=Query.query(Criteria.where("userid").is("001")); mongoOperations.updateFirst(query, Update.update("username","修改"),User.class); } /** * 查询数据 * @return */ @Override public User templateQuery() { Query query=Query.query(Criteria.where("userid").is("001")); return mongoOperations.find(query,User.class).get(0); }
四、使用MongoDb Repository访问mongodb
- 与spring data jpa类似,spring data mongodb同样有类似的操作方式,实现一个接口继承MongoRepository<T,id>:
public interface MongoDemoRepository extends MongoRepository<User,String> { User findFirstByUsername(String username); }
通过继承接口,spring data会自动实现基本的crud方法,同时,还支持通过方法的形式扩展自己想要的方法,例如通过以下关键词扩展(图片在网上找的):
自定义查询方法,格式为“find/get/readBy+字段名+方法后缀”,方法传进的参数即字段的值。
支持的部分常用方法后缀有:
- 除此之外,与spring data jpa 类似,它也支持@Query的方式自定义指定。但它不是指定的sql而是一个json .
@Query("{'userpassid':'qq','username':?0}") List<User> findUsername(String username);
- 它同样可以通过接口的方式和spring data jpa 类似实现mongotemplate与repository混合方法。此处不做介绍
热门文章
- 免费VPN翻墙推荐 | 3月30日20.1M/S|免费SSR/Clash/Shadowrocket/V2ray订阅节点地址分享
- pyecharts绘制桑基图实现节点颜色自定义
- 骨架屏技术讲解以及如何在Vue中实现骨架屏
- 免费VPN翻墙推荐 | 3月28日22M/S|免费SSR/Shadowrocket/Clash/V2ray订阅节点地址分享
- 深圳宠物领养中心免费政策(深圳市领养宠物中心)
- 养狗的人容易得15种病视频讲解(养狗的人容易得癌症吗)
- 动物一针疫苗多少钱(动物疫苗多少钱一支)
- 免费VPN翻墙推荐 | 4月14日20.6M/S|免费Shadowrocket/SSR/Clash/V2ray订阅节点地址分享
- 宠物美容师证怎么考(宠物美容师证怎么考知乎)
- RabbitMQ数据同步一致性解决方案