关于MoogoBD数据库的语法和mysql一些不错的语句

一:关于moogoDB的语句
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);


二:关于mysql的语句
<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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值