mongoDB数据库基本操作请点击: mongoDB数据库操作指令
order.java
import java.util.Date;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document(collection="t_order")
public class Order {
@Id
@Indexed
private ObjectId id;
@Field("order_num")
private String orderNum;
private Date createDate;
// 映射忽略的字段,该字段不会保存到mongodb。
@Transient
private String cc;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getOrderNum() {
return orderNum;
}
public void setOrderNum(String orderNum) {
this.orderNum = orderNum;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Order(ObjectId id, String orderNum, Date createDate) {
super();
this.id = id;
this.orderNum = orderNum;
this.createDate = createDate;
}
public Order() {
super();
}
@Override
public String toString() {
return "Order [id=" + id + ", orderNum=" + orderNum + ", createDate="
+ createDate + "]";
}
}
Person.java
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="t_person")
public class Person {
@Id // 主键类型只能为:String,ObjectId,BigInteger
private String id;
private String name;
private int age;
private double salary;
@DBRef
private List<Order> orders = null;
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Person(String id, String name, int age, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public Person() {
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age
+ ", salary=" + salary + "]";
}
}
操作数据库
①
import com.entity.Order;
import com.entity.Person;
import com.mongodb.Mongo;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TestMain01 {
@Autowired
private MongoTemplate temp;
@Test
public void test09(){
Person person = temp.findById("1111111111",Person.class);
System.out.println(person.getOrders());
}
// 根据主键id查询
@Test
public void test08(){
Person person = temp.findById("1111111111",Person.class);
System.out.println(person.getOrders());
}
// 测试有级联关系的两个对象
@Test
public void test06(){
Person p = new Person("1111111111","haha",23,1111);
List<Order> list =new ArrayList<Order>();
for(int i = 0 ; i < 3; i++){
ObjectId objectId = new ObjectId(new Date());
Order o = new Order(objectId, 111111+"_"+i, new Date());
temp.save(o);
list.add(o);
}
p.setOrders(list);
temp.save(p);
}
// 删除数据
@Test
public void test05(){
Person s = new Person();
s.setId(1+"");
temp.remove(s);
}
// 查询person表中的所有数据
@Test
public void test03(){
List<Person> list = temp.findAll(Person.class);
for (Person s : list) {
System.out.println(s);
}
}
// 添加数据
@Test
public void test02() {
/*for(int i = 0 ; i< 5;i++){
Student s = new Student(10+i+"", "zhangsan"+i, 12*i, 2000+i);
temp.save(s);
}*/
// 主键如果存在,进行更新
/*Student s = new Student("2", "zhangsasssssn", 111, 2000);
temp.save(s);*/
/**
* insert方法:如果key存在,报错
*/
Person s = new Person("2", "aa", 111, 2000);
temp.insert(s);
}
// 查询所有的库
@Test
public void test01() {
Mongo mongo = ac.getBean("mongo1",Mongo.class);
List<String> list = mongo.getDatabaseNames();
for (String dbName : list) {
System.out.println(dbName);
}
}
}
②
import com.entity.Person;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicUpdate;
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 org.springframework.data.mongodb.core.query.Update.Position;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;
public class TestMain02 {
@Autowired
private MongoTemplate temp;
@Test
public void testAddBatch(){
for(int i = 0 ; i<10;i++){
String id = UUID.randomUUID().toString().replace("-", "");
Person p = new Person(id, "zhangsan"+i, 10+i*2, 10000+i*2);
temp.save(p);
}
}
@Test // 排序
public void testOrder(){
Query query = new Query();
query.addCriteria(new Criteria().where("age").gt(10));
query.limit(10);
query.skip(2);
// 按照salary的升序排列
// query.with(new Sort(Direction.ASC,"salary"));
// 按照salary的降序排列
query.with(new Sort(Direction.DESC, "salary"));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test
public void testLimitSkip(){
Query query = new Query();
query.addCriteria(new Criteria().where("age").gt(10));
query.limit(10);
query.skip(2);
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test // 查询与数组相关的信息
public void testQuery03(){
Query query = new Query();
Pattern pattern = Pattern.compile("^.*1.*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test // 查询与数组相关的信息
public void testQuery02(){
Query query = new Query();
// 查询 age数组长度为4的数据
// query.addCriteria(Criteria.where("age").size(4));
// 查询 age数组第三位 为 "aa"的记录
// query.addCriteria(Criteria.where("age.2").is("aa"));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
@Test
public void testQuery01(){
Query query = new Query();
// 查询 age =18
//query.addCriteria(new Criteria().where("age").is(18));
//查询 age > 12 并且 age< 20
//query.addCriteria(new Criteria().andOperator(new Criteria("age").gt(12),new Criteria("age").lt(20)));
//查询 age =1 或者 age = 100
// query.addCriteria(new Criteria().orOperator(new Criteria("age").is(1),new Criteria("age").is(1000)));
// 查询 age in (1,2)
// query.addCriteria(new Criteria().where("age").in(1,2));
// 查询 age值 除以5 余数为2的数据
query.addCriteria(new Criteria("age").mod(5,2));
List<Person> list = temp.find(query, Person.class);
bianli(list);
}
public void bianli(List<Person> list){
for (Object o : list) {
System.out.println(o);
}
}
@Test
public void testUpdate04(){
Query query = new Query();
query.addCriteria(new Criteria().where("key1").is("hello 1"));
Update update = new Update();
update.set("key1", "value1");
update.pushAll("age",new Object[]{12,"aa",13});
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate03(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 用新元素替换旧元素
DBObject obj = new BasicDBObject("key1", "value1");
Update update = new BasicUpdate(obj);
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate02(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 用新元素替换旧元素
DBObject obj = new BasicDBObject("key1", "value1");
Update update = new BasicUpdate(obj);
temp.updateFirst(query,update, Person.class);
}
@Test
public void testUpdate01(){
Query query = new Query();
query.addCriteria(new Criteria("age").gt(26).lt(30));
// 在原始旧数据的基础上进行修改
Update update = new Update();
update.set("name","helloe zhangsan"); //根据key,对对应的值进行更新
update.inc("salary", 3); // 将该key对于的值进行递增
update.pull("optKey",new String[]{"optionValue1","optionValue2"});//只对数组有效。 将新数据压入到key对应的数组中
update.pop("optKey", Position.FIRST); // 只能对数组有用。将数组特定位置的元素移除
temp.updateFirst(query,update, Person.class);
}
}