1更新语句
Query query = Query.query(Criteria.where("uid").is(taskId));
query.addCriteria(new Criteria("mobilePhone").is(par.getMobilePhone()));
Update update = new Update();
update.set("taskStatus", (byte)status);
mongoTemplate.updateFirst(query, update, "parTaskInfo");
2 查找的状态
Query query = new Query();
query.addCriteria(new Criteria("expWaybillNum").is(bill).and("controllerTaskFlag").in(2,11).and("netId").is(netId));
query.with(new Sort(Sort.Direction.DESC, "createTime"));
ParParceladdress parParceladdress = mongoTemplate.findOne(query, ParParceladdress.class);
3.更新一个字段的数量
Update update = Update.update("updateTime", date).inc("parNumber", +1).set("indexStr",indexStr1+"=="+indexStr); //parNumber: 包裹数量
logger.info("到派发报表****增加一条 更新条件update: " + JSON.toJSONString(update));
mongoTemplate.updateFirst(query, update, OutboxReportNumber.class);
4.查找全部数据库中的全部信息并且按照一定的time的时间降序并且取出其中的一个。
Query query=new Query();query.with(new Sort(Sort.Direction.DESC, "createTime"));
return this.mongoTemplate.find(query,SiteCompanyInfo.class).get(0);
5 批量插入
this.mongoTemplate.insert(list, SiteCompanyInfo.class);//批量插入
6 批量查询
List<Long> peoId;
Query query = Query.query(Criteria.where("uid").in(peoId));
List<People> people= mongoTemplate.find(query, People.class);
7 数目的统计
Query query = new Query();
query.with(new Sort(Direction.DESC, "createTime"));
query.addCriteria(Criteria.where("age").is(Long.valueOf(age))
.and("name").is(type).and("class").is("2"));
long num = mongoTemplate.count(query, Entry.class)
8 使用分页
写法1
Query query=new Query();
query.addCriteria(Criteria.where("id").is(is).and("name").regex(name));
query.skip((page - 1) * num).limit(num);//这个表示的是除了显示一页,其他的都跳过(skip)。
resultList = this.mongoTemplate.find(query,Tree.class);
写法2
Query query = Query.query(where("memberId").is(memberId).and("status'").is(0));
query.with(new Sort(Direction.DESC, "createTime")).limit(10).skip((currentPage - 1) * 10);
List<ParParcelinfo> infos = mongoTemplate.find(query, People.class);
9 三天之内的数据查询
Date now = new Date();
Calendar ca = Calendar.getInstance();
ca.add(Calendar.DATE, -3);
Date before = ca.getTime();
query.addCriteria(Criteria.where("createTime").lte(now).gte(before));//<=now >=before
10 在客户端查询存在某个字段的记录
db.getCollection('shopInfo').find({"chargerCertId":{$exists: true }})
11 在客户端按name字段降序,按age升序;
db.user.find().sort({"name":-1,"age":1})
12 使用updat只是单个进行更新,如果有这个字段就进行更新,没有的话就创建一个新的
db.getCollection('shopInfo').update({"chargerCertId" : "342522199208290315"},{$set:{"yangName":"王者"}})
13 模糊查询
下面实例中,要按照用户的姓名进行模糊查询,如:王,我们可以这样做:
使用不区分大小写的模糊查询
13.1完全匹配
Pattern pattern = Pattern.compile("^王$", Pattern.CASE_INSENSITIVE);
13.2右匹配
Pattern pattern = Pattern.compile("^.*王$", Pattern.CASE_INSENSITIVE);
13.3左匹配
Pattern pattern = Pattern.compile("^王.*$", Pattern.CASE_INSENSITIVE);
13.4模糊匹配
Pattern pattern = Pattern.compile("^.*王.*$", Pattern.CASE_INSENSITIVE);
Query query = Query.query(Criteria.where("name").regex(pattern).and("id").is(id));//当name为空也是存在的
List<PlaceInfo> placeList = mongoTemplate.find(query, Person.class, "person");
14 建立索引
db.People.ensureIndex({"placeName":1});//参考:http://blog.163.com/ji_1006/blog/static/10612341201311243825985/
15 查询多个或的条件
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("key1").is("0"),Criteria.where("key1").is(null));
16 查询一段时间内的数据(前提sDate和eDate都是Date格式)
criteria.where("createTime").gte(sDate).lte(eDate);
17 自增和自建
Update up = new Update();
up.inc("num",1);//递增
up.inc("num",-1);//递减
18 批量更新
Query query = new Query();
Update up = new Update();
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
this.moogoTemplate.updateMulti(query,up,People.Class);
<select id="queryOnSiteAndAllocateInfo" parameterType="java.lang.Long" resultType="java.util.HashMap">
SELECT comp.comp_id,
comp.comp_name as compName,
comp.first_letter as firstLetter,
comp.comp_type_num as compTypenum,
comp.longitude,
comp.latitude,
comp.relation_comp_id,
comp.regist_flag as registFlag,
comp.comp_status as compStatus,
comp.comp_address as compAddress
FROM
bas_comp_rel rel
LEFT JOIN
bas_compinfo comp
ON
rel.rel_comp_id=comp.comp_id
WHERE
1 = 1
AND rel.comp_id = #{compId};
</select>
resultMap:适合使用返回值是自定义实体类的情况。
resultType:适合使用返回值得数据类型是非自定义的,除了jdk的提供的类型外,还可以使用自定义的实体类。还有一种情况就是在数据库中的字段和实体类中的字段不一致的时候,就要使用resultMap,在配置时使用一一对应关系。
parameterType:可以是自定义的实体类。
当返回值是多个值的时候不要想当然的认为更改 resultType="java.util.List"因为在resultType中放的是盛放的元素,而不应该直接写容器,所以这个时候要使用自定的resultMap来写,就是上面的那种形式。
2 自定义的实体类的标准写法
<resultMap id="baseResultMap" type="com.yang.BasCompInfo" >
<id column="comp_id" property="compId" jdbcType="BIGINT" />//id
<result column="comp_num" property="compNum" jdbcType="VARCHAR" />
<association property="admins" column="adminsId" javaType="com.yang.pojo.Admin" select="selectOneAdmins"/>
<!-- 可以写关联角色 ,当然也可以不写 -->
<association property="animal" column="animalId" javaType="com.yang.pojo.Animal" select="selectOneAnimal"/>
</result>
<!-- 在下面直接写上自己关联对象 -->
<select id="selectOneAdmins" resultType="com.yang.pojo.Tree">
select * from a_tree where id = #{treeId}
</select>
<select id="selectOneAnimal" resultType="com.yang.pojo.Tree">
select * from a_animal where id = #{animalId}
</select>