MongoDb学习三(spring-data-mongodb)
本文采用2个种配置方式、xml配置 代码配置方式进行数据库的连接。
实现简单的增删该查等一些操作。代码都有注释
官方文档如下
https://docs.spring.io/spring-data/mongodb/docs/2.1.3.RELEASE/reference/html/
具体代码如下
pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SpringMogo</groupId> <artifactId>chaoba</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>chaoba</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.1.3.RELEASE</version> </dependency> </dependencies> </project>
xml配置文件spring.xml 存放到资源文件夹即可
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation= "http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Default bean name is 'mongo' --> <mongo:mongo-client host="localhost" port="27017" id="mongo"/> <mongo:db-factory dbname="chaoba" mongo-ref="mongo"/> <bean id="MongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> </beans>
文章实体类 package document; import java.util.Date; import java.util.List; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; @Document(collection="artcle_info") public class Artcle { @Id() private String id; @Field("title") private String title; @Field("content") private String content; @Field("tags") private List<String> tags; @Field("time") private Date addTIme; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<String> getTags() { return tags; } public void setTags(List<String> tags) { this.tags = tags; } public Date getAddTIme() { return addTIme; } public void setAddTIme(Date addTIme) { this.addTIme = addTIme; } }
主要代码。增删改查 package SpringMogo.chaoba; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.bson.types.ObjectId; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import document.Artcle; /** * Hello world! * */ public class App { /* * 通过xml配置文件获取mongotemp */ private static MongoTemplate mongoTemp; static { mongoTemp = (MongoTemplate) new ClassPathXmlApplicationContext("classpath:spring.xml").getBean("MongoTemplate"); } public static void main(String[] args) { // insertArtcle(); // mongoTemp.getCollectionNames().forEach(System.out::println); // updateArtcle(); // del(); } /* * 插入。需要吧Document存入list */ private static void insertArtcle() { List<Artcle> list = new ArrayList(); Artcle a = new Artcle(); a.setTitle("暮雪超霸"); a.setAddTIme(new Date()); a.setTags(Arrays.asList("帅哥", "最帅")); a.setContent("暮雪超霸是一个小帅哥"); list.add(a); mongoTemp.insert(list, Artcle.class); } /* * 修改 修改有多个重载方法。可以指定clas或者指定集合名称、。如果使用集合名称。key就是集合key 如果是clas。写实体名 */ private static void updateArtcle() { // 这种方法。如果查询条件不存在。不修改,不插入 mongoTemp.updateFirst(Query.query(new Criteria("title").is("暮雪超霸")), Update.update("content", "暮雪超霸是最帅的小哥哥"), Artcle.class); // 查询条件如果不存在,。插入数据 mongoTemp.upsert(Query.query(new Criteria("title").is("暮雪超霸111")), Update.update("content", "暮雪超霸是最帅的小哥哥"), Artcle.class); // 删除指定的key mongoTemp.updateFirst(Query.query(new Criteria("title").is("暮雪超霸")), new Update().unset("title"), Artcle.class); // 删除数据。不返回数据 mongoTemp.remove(Query.query(Criteria.where("title").is("暮雪超霸")), Artcle.class); // 删除一条并返回数据 Artcle resu = (Artcle) mongoTemp.findAndRemove(Query.query(Criteria.where("title").is("暮雪超霸111")), Artcle.class); System.out.println(resu.getTitle()); // 删除多条;并返回数据 List<Artcle> list = mongoTemp.findAllAndRemove(Query.query(Criteria.where("title").is("暮雪超霸111")), Artcle.class); } private static void del() { // 删除数据。不返回数据 mongoTemp.remove(Query.query(Criteria.where("title").is("暮雪超霸")), Artcle.class); // 删除一条并返回数据 Artcle resu = (Artcle) mongoTemp.findAndRemove(Query.query(Criteria.where("title").is("暮雪超霸111")), Artcle.class); System.out.println(resu.getTitle()); // 删除多条;并返回数据 List<Artcle> list = mongoTemp.findAllAndRemove(Query.query(Criteria.where("title").is("暮雪超霸111")), Artcle.class); // 删除集合 mongoTemp.dropCollection(Artcle.class); // 删除库 mongoTemp.getDb().drop(); } private static void select() { // 带条件查询 List<Artcle> list = mongoTemp.find(Query.query(Criteria.where("title").is("暮雪超霸")), Artcle.class); // 查询所有 List<Artcle> list1 = mongoTemp.findAll(Artcle.class); // 查询个数 long count = mongoTemp.count(Query.query(Criteria.where("title").is("暮雪超霸")), Artcle.class); // 查询一个 Artcle artcle = mongoTemp.findOne(Query.query(Criteria.where("title").is("暮雪超霸")), Artcle.class); // id查询 artcle = mongoTemp.findById(new ObjectId("5c04b4af4a24a32b24d8078c"), Artcle.class); // 分页查询 如果在大量数据下。先排序,然后记录上次最后一条数据id,如果大于上次id。limit 页数 list = mongoTemp.find(Query.query(Criteria.where("title").is("暮雪超霸")).skip(0).limit(10), Artcle.class); // in查询 还有and 大于小于 等方法 list1 = mongoTemp.find(Query.query(Criteria.where("title").in("暮雪超霸", "暮雪超霸1")), Artcle.class); list1 = mongoTemp.find(Query.query(Criteria.where("title").orOperator(Criteria.where("title").is("暮雪超霸"))), Artcle.class); // or查询 list1 = mongoTemp.find(Query.query( new Criteria().orOperator(Criteria.where("title").is("暮雪超霸"), Criteria.where("title").is("暮雪超霸1"))), Artcle.class); } }
代码连接 package document; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import com.mongodb.MongoClient; import com.mongodb.ServerAddress; public class MongoDbCodeContent { /* * 代码方式连接 */ public static void main(String[] args) { MongoClient client = new MongoClient(new ServerAddress("127.0.0.1", 27017)); MongoTemplate mongoTemplate = new MongoTemplate(new SimpleMongoDbFactory(client, "chaoba")); mongoTemplate.getCollectionNames().forEach(System.out::println); } }
一万年太久,只争朝夕!