目录 背景 JDBC 中的 ResultSet 简介 简单映射 回归最初的问题:查询结果为空时的返回值 结论 背景 一行数据记录如何映射成一个 Java 对象,这种映射机制是 MyBatis 作为 ORM...最后返回映射的结果对象,如果没有映射任何属性,则需要根据全局配置决定如何返回这个结果值,这里不同场景和配置,可能返回完整的结果对象、空结果对象或是 null。...当返回行的所有列都是空时,MyBatis 默认返回 null。当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。...回归最初的问题:查询结果为空时的返回值 | 返回结果为单行数据 可以从 ResultSetHandler的handleResultSets 方法开始分析。...而返回值为集合对象且查为空时,selectList 会把这个存储结果的 List 对象直接返回,此时这个 List 就是个空集合。
而 findById(undefined) 相当于 findOne({ _id: null }),返回 null。 查询结果: 返回数据的格式是 {} 对象形式。...查询结果: 返回数据的格式是 {} 对象形式。 有多个数据满足查询条件的,只返回第一条。 查询条件 conditions 为 {}、 null 或 undefined,将任意返回一条数据。...result 查询结果: 返回数据的格式是 {} 对象形式。 id 为 undefined 或 null,result 返回 null。 没符合查询条件的数据,result 返回 null。...callback 没有符合 filter 的数据时,返回 null。 filter 为空或 {} 时,删除第一条数据。 删除成功返回 {} 形式的原数据。...callback 没有符合 id 的数据时,返回 null。 id 为空或 undefined 时,返回 null。 删除成功返回 {} 形式的原数据。
而非关系型数据库以键值对 (key-value) 存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。...下载地址 4 Koa + Mongodb 操作 4.1 安装链接 npm i mongoose -Sconst mongoose = require('mongoose') // 默认 27017 端口...(ctx) { const user = await User.findById(ctx.params.id) if (!...如果需要的话可以在查表时使用 select 关键字password: { type: String, required: true, select: false // 不会返回 } await..._id 获取) const ownUser = await User.findById(ctx.params.my_id) // mongoose 自带的数据类型, 使用toString()方法
选项 Schema有很多可配置选项,你可以在构造时传入或者直接set,选项较多,暂不学习整理。...Tank.remove({size:small},function(err){ if(err) return handler(err) }) 更新 model 的 update 方法可以修改数据库中的文档,不过不会把文档返回给应用层...如果想更新单独一条文档并且返回给应用层,可以使用 findOneAndUpdate 方法。 六、文档-Documents Mongoose document代表着MongoDB文档的一对一映射。...更新 使用findById: Tank.findById(id,function(err,tank){ if (err) return handlerError(err) tank.size...handleError(err) console.log('%s %s is a %s',person.name.fisrt,person.name.last,person.occupation) }) 查询结果的格式取决于做什么操作
下载 npm i mongoose -s 连接数据库 const mongoose = require("mongoose"); mongoose.connect(dbURL); const db =...mongoose.connection; db.on("error", () => { console.log("链接失败"); }); db.on("open", () => {...ObjectId 定义对象ID Array 定义数组 Decimal128 Map 约束能用对象的方法描述数据类型 是否必须 是否重复 默认值 等,如下定义了一个用户表结构 注意:如果定义表结构时没有定义..._id,mongoose会自己添加一个该字段,该字段不会重复,类型为ObjectId,通过findById()查询 const userSachem = new mongoose.Schema(...required: true, }, avatar: { type: String, default: null
API 应该提供参数,过滤返回结果。下面是一些常见的参数(包括上面的查询、分页以及字段过滤): ?limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?...sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?...config.js # 数据库(mongodb)配置信息 |-- index.js # 入口 |-- controllers # 控制器:用于解析用户输入,处理后返回相应的结果...客户端发起非登录请求时,假如服务器给了 set-cookie,浏览器会自动在请求头中添加 cookie。 服务器接收请求,分解 cookie,验证信息,核对成功后返回 response 给客户端。...); mongoose.connection.on("error", console.error); 用户的 CRUD 项目中的模块是比较多的,我不会一一去演示,因为各个模块实质性的内容是大同小异的
准备工作 let mongoose = require("mongoose"); let connection = require("....UserModel.findOne({}); console.log(docs); })() 通过ObjectId查询 (async function(){ let docs = await UserModel.findById...console.log(docs) })() 每页3条 查询第2页 1 2 3 4 5 6 7 8 9 10 sort 指定排序的字段和升序还是降序 1,-1 skip 指定跳过几条,忽略几条 limit 限定返回的最大条数...UserModel.remove({name:"orange"}) console.log(result); })() image.png eleteOne删除第一条 后面不再匹配 更不会删除...使用了一个ref的类型是引用的User模型 (async function(scoreId){ let score = await Score.findById(scoreId).populate
,res中会返回是否成功以及影响的行数:{"ok":1,"n":1} 其它常用方法还有: Model.findByIdAndRemove(id, [options], [callback]) ...根据_id查询 Model.findById(id, [fields], [options], [callback]) var User = require("..../user.js"); function getById(){ var id = '56f261fb448779caa359cb73'; User.findById(id,...默认值 LBS地址位置 lbs : { type: Array, index: '2d', sparse: true } //地理位置 上面有介绍过很多基于LBS的条件查询,Schema中定义时如上...mongoose操作基本入门大致就是这些,自已试一下,入门完全没问题,并且比node-mongodb-native还是要简单明了一些, 在node.js中操作数据库,如果逻辑相对复杂时,大量的回调嵌套还是比较郁闷的
1 Web架构 web总共分为三个部分: 客户端 服务器 数据库 web网站访问过程: 客户端向服务器发送请求 服务器操作数据库 数据库将结果返回给服务器 服务器将结果响应给客户端 2 数据库概念 数据库....drop() 删除集合 db.dropDatabase() 删除数据库 数据库中数据一般不会真正的删除,所以删除的方法很少调用 一般都是单独添加一个字段,表示数据是否删除 这种删除只是程序上的删除...否则连接不会断开 Mongoose 对象 Schema(模式对象) 定义约束了数据库中的文档结构 Model Model 对象作为集合中的所有文档表示 相当于 MongoDB数据库中的集合collection...console.log('插入成功'); } }); Model.find(conditions, [projection], [options], [callback]) 查询所有符合条件的文档 Model.findById...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof
1 Web架构 web总共分为三个部分: 客户端 服务器 数据库 web网站访问过程: 客户端向服务器发送请求 服务器操作数据库 数据库将结果返回给服务器 服务器将结果响应给客户端 2 数据库概念 数据库....drop() 删除集合 db.dropDatabase() 删除数据库 数据库中数据一般不会真正的删除,所以删除的方法很少调用 一般都是单独添加一个字段,表示数据是否删除 这种删除只是程序上的删除...一般只需要连接一次,连接一次以后,除非停止服务器,否则连接不会断开 Mongoose 对象 Schema(模式对象) 定义约束了数据库中的文档结构 Model Model 对象作为集合中的所有文档表示...('插入成功'); } }); Model.find(conditions, [projection], [options], [callback]) 查询所有符合条件的文档 Model.findById...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof
id:ObjectId var TeacherSchema = new Schema({id:ObjectId});//只有id:ObjectId 该类型的值由系统自己生成,从某种意义上几乎不会重复...err){}); }); 这里,利用Model模型查询到了person对象,该对象属于Entity,可以有save操作,如果使用Model`操作,需注意: PersonModel.findById...: PersonModel.findOne({'name.last':'dragon'},'some select',function(err,person){ //如果err==null...,则person就能取到数据 }); 这种方式相对直接查询,分的比较明细,如果不带callback,则返回query,query没有执行的预编译查询语句,该query对象执行的方法都将返回自己,...只有在执行exec方法时才执行查询,而且必须有回调。
可以在第二个参数的位置来设置查询结果的--即投影 db.emp.find({}, {ename: 1, _id: 0, sal: 1}); 第四章 Mongoose 4.1 Mongoose 的简介...options 查询选项(常用 skip、limit) 示例:{skip: 3, limit: 1} callback 回调函数,查询结果会通过回调函数返回...err) { // console.log(doc); // 通过 find() 查询的结果,返回的对象就是 Document 对象或 Document 对象数组。 ...err) { console.log(count); } }); 4.8 Document--文档对象 通过 Model 对数据库进行查询时,会返回 Document 对象或...通过 Model 查询到结果都是 Document 对象或 Document 对象数组。
= require('mongoose') // 链接数据库 mongoose.connect('mongodb://localhost:27017/express-auth',{ useCreateIndex...在右边就可以看到我们返回的结果。要在server.js目录引入才能生效。 ?...res.send(user) }) 然后在test.http文件测试,可以看出来返回的结果是我们填写的用户名和密码,但是这样密码暴露了,对用户信息造成安全隐私问题。...,如果正确就返回,不正确的话也是返回状态码和错误信息,最后一步就是生成token,返回客户端,客户端可以通过token判断是哪个用户。...req.headers.authorization).split(' ').pop(); // 验证 const {id} = jwt.verify(raw,SECRET) req.user = await User.findById
options, callback);查询第一个匹配条件的文档:Model.findOne(filter, projection, options, callback);根据 id 查询文档:Model.findById...(id, projection, options, callback);其中,filter 表示查询条件,update 表示更新操作,projection 表示指定返回的字段,options 表示查询选项...在使用 mongoose 操作 MongoDB 数据库时,一般的步骤是:设计 Schema(模式)、发布 Model(模型)、增删改查数据。...发布 Model 时,需要将 Schema 传入 mongoose.model() 方法中,生成集合(表)的构造函数。...在使用mongoose时,我们需要先设计Schema,然后将其发布为Model,最后使用Model来对数据库进行增删改查等操作。
= null) { holder = (ViewHolder) view.getTag(); } else { view = inflater.inflate(R.layout.whatever,...view的话会报错,为了避免这种情况,可以用@Nullable和@Optional这两个注解,如果找不到目标view存在,就自动绑定,不存在,也不会出错。..., null); TextView firstName = ButterKnife.findById(view, R.id.first_name); TextView lastName = ButterKnife.findById...(view, R.id.last_name); ImageView photo = ButterKnife.findById(view, R.id.photo); findById()有两个参数,第一个是目标...它主要是通过返回泛型来自动执行类型转换。 自动生成绑定的插件 最后推荐一个插件android butterknife zelezny,可以自动生成绑定代码: ?
app.emit('error', err, this) const status = err.status || 500 // 生产环境时...exports.formatTime = time => moment(time).format('YYYY-MM-DD HH:mm:ss')// 处理成功响应exports.success = ({ ctx, res = null...= app.mongoose const UserSchema = new mongoose.Schema({ mobile: { type: String, unique: true, required...await service.user.create(payload) // 设置响应内容和响应状态码 ctx.helper.success({ctx, res}) } 结果显示请求成功...user) { this.ctx.throw(404, 'user not found') } return this.ctx.model.User.findById
通过这种方式,您可以灵活地注入“兼容的依赖项”,例如,当您为服务编写单元测试时,或者在其他上下文中使用服务时。 没有 DI 的代码 import UserModel from '.....getMyUser(userId){ // models available throug 'this' const user = this.userModel.findById...这个想法是在类中定义你的依赖,当你需要一个类的实例时只需要调用 “Service Locator” 即可。...让我们看一下经典的 Express.js 应用初始化 const mongoose = require('mongoose'); const express = require('express...import * as mongoose from 'mongoose' export default async (): Promise => { const connection
安装mongoose cnpm i --save mongoose 示例: const mongoose = require('mongoose'); mongoose.connect('mongodb...function(err, data) { if(err) { console.error(err); } else { console.log(data); } }); Model.findById...重复执行了几次node app后,看看上面代码的执行结果。 ?...先要获取开关接口所设置的状态值,然后执行查操作,之后返回数据。...结果展示 a. 开关接口设置数据库为mysql ? ? b. 开关接口设置数据库为mongo ? ?
const data = await User.find({ name: /\d/ }, null, { skip: 1 }); // 这里只会查找到 2 3 第二三个参数也能用链式调用的方法定义 查询的结果支持链式调用...User.find().select(["name", "-_id"]); // 查询所有数据 返回对象只有name limit:限制查找结果的长度 skip:设置查找结果的起式位置 sort:对查找结果排序...User.find().sort("-name"); // str 3 2 1 const datas = await User.find().sort("name"); // 1 2 3 str count:返回查找结果的数量...lean:将结果返回为普通的js对象而不是查询得到的Mongoose Documents类型对象 常用的内置字段: 字段 说明 $or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于...通过Model.findById方法 通过每个数据的_id属性查询
领取专属 10元无门槛券
手把手带您无忧上云