tangyuan-mongo,使用SQL语法访问MongoDB
2017-08-17 16:56
411 查看
1. 介绍
tangyuan-mongo是tangyuan框架中的MONGO服务组件,tangyuan-mongo组件将一系列的Mongo操作封装成Tangyuan中的服务,并提供统一的方式进行访问;同时还提供以SQL语法的方式访问Mongo。项目源码:https://github.com/xsonorg/tangyuan2/
官网地址:http://xson.org/
2. 使用SQL语法访问Mongo
如果我们要查询性别为女性,年龄在18岁到28岁之间的用户,如果使用Mongo原始的语法,我们需要这样写:db.user.find({"gender":"Female", "age":{"$gte":18, "$lte":28}})
现在,我们可以使用下面的方式:
select * from user where gender = 'Female' and age >= 18 and age <= 28
是不是感觉就像SQL查询?是的没错,tangyuan-mongo就是提供以SQL语法的方式访问Mongo。
3. 支持的SQL语法
3.1 插入
语法INSERT INTO tbl_name (col_name,...) VALUES (col_value,...)
示例
INSERT INTO user_info(id, name, age, amount) VALUES(1, 'xsonorg', 18, 1000);
解析后Mongo语法
db.user_info.insert({ "id" : 1 , "name" : "xsonorg" , "age" : 18 , "amount" : 1000})
3.2 查询
语法SELECT {col_name | expr}, ... [FROM tbl_name [WHERE where_definition] [ORDER BY col_name [ASC | DESC] , ...] [LIMIT {[offset,] row_count}]
示例
SELECT * from user_info where age >= 18 and age <= 28 order by age limit 10
解析后Mongo语法
db.user_info.find({ "age" : { "$gte" : 18 , "$lte" : 28}}).sort({"age" : 1}).limit(10)
3.3 更新
语法UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
示例
UPDATE user_info SET name = 'xson.org', age = age + 2 where id = 1
解析后Mongo语法
db.user_info.update({ "id" : 1} , { "$set" : { "name" : "xson.org"} , "$inc" : { "age" : 2}}, false, true );
3.4 删除
语法DELETE FROM tbl_name [WHERE where_definition]
示例
delete from user_info where user_id = 1
解析后Mongo语法
db.user_info.remove({ "id" : 1})
4. Mongo服务
第三章中对支持的SQL语法做了说明,本章中,我们会进一步介绍如何基于SQL语句,来定义Mongo服务,以及Mongo服务的使用。首先,什么是Mongo服务?Mongo服务的本质是tangyuan中的提供MongoDB操作的服务,包含了一系列的SQL语句和XML标签,在用户访问Mongo服务的时候,框架会将SQL语句解析成MONGO语法,通过解析后的Mongo语法来操作MongoDB,并返回结果。
下面我们来看一个完整的示例:
4.1 完整的示例
a. 增加依赖的Jar<dependency> <groupId>org.xson</groupId> <artifactId>tangyuan-mongo</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.3.0</version> </dependency>
b. 添加服务组件
在tangyuan总配置文件(tangyuan.xml)中添加mongo组件:
<?xml version="1.0" encoding="UTF-8"?> <tangyuan-component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xson.org/schema/tangyuan/component.xsd"> <!--添加Mongo服务组件 --> <component resource="component-mongo.xml" type="mongo" /> </tangyuan-component>
c. 配置组件
tangyuan-mongo组件本身的配置(component-mongo.xml):
<?xml version="1.0" encoding="UTF-8"?> <mongo-component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xson.org/schema/tangyuan/mongo/component.xsd"> <!-- Mongo数据源 --> <dataSource id="mongods"> <property name="url" value="mongodb://127.0.0.1:27017/mdb" /> </dataSource> <!-- Mongo服务插件 --> <plugin resource="test-mongo.xml"/> </mongo-component>
d. 编写Mongo服务
在服务插件(test-mongo.xml)文件中定义Mongo服务:
<?xml version="1.0" encoding="UTF-8"?> <mongoservices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xson.org/schema/tangyuan/mongo/service.xsd" ns="demo"> <!-- Mongo查询服务 --> <selectOne id="getUser" dsKey="mongods"> SELECT * from user_info where id = 1 </selectOne> </mongoservices>
e. 单元测试
[@Test](https://my.oschina.net/azibug) public void testMongo() { XCO request = new XCO(); // set Object obj = ServiceActuator.execute("demo/getUser", request); System.out.println(obj); }
f. 返回结果
当前服务
getUser返回的结果是一个XCO对象,其XML格式表示如下:
<?xml version="1.0" encoding="UTF-8"?> <X> <S K="_id" V="59950f7f2932a11a68285d21"/> <I K="id" V="1"/> <S K="name" V="xson.org"/> <I K="age" V="26"/> <I K="amount" V="1000"/> </X>
通过之前的步骤,我们实现了一个完整的流程,从组件的配置、服务的定义到服务的调用。在上述示例中我们演示了Mongo查询服务,其实在tangyuan-mongo中,还支持其他几种Mongo服务,下面我们会依次介绍。注意一点:所有的Mongo服务都需要在服务插件文件中定义,比如示例中的
test-mongo.xml文件,下面示例中将不再特别说明。
4.2 MONGO查询服务,查询一个结果集
<selectSet id="getUserList" dsKey="mongods"><![CDATA[
SELECT * from user_info where age >= 18 and age <= 28 order by age limit 10]]></selectSet>
MONGO查询结果集服务是通过
selectSet标签进行定义的。返回的是一个
List<XCO>对象.
4.3 MONGO查询服务,查询一条记录
<selectOne id="getUser" dsKey="mongods"> SELECT * from user_info where id = 1 </selectOne>
MONGO查询单条记录服务是通过
selectOne标签进行定义的。返回的是一个
XCO对象.
4.4 MONGO查询服务,查询一个字段
<selectVar id="getUserName" dsKey="mongods"> SELECT name from user_info where id = 1 </selectVar>
MONGO查询字段服务是通过
selectVar标签进行定义的。返回的是该字段对应的具体类型。
4.5 MONGO插入服务
<insert id="addUser" dsKey="mongods">
INSERT INTO user_info(id, name, age, amount) VALUES(1, 'xsonorg', 18, 1000);</insert>
MONGO插入服务是通过
insert标签进行定义的,用作于插入一个文档。返回值为该文档的
_id值,
String类型。
4.6 MONGO更新服务
<update id="updateUser" dsKey="mongods"><![CDATA[
UPDATE user_info SET name = 'xson.org', age = age + 2 where id = 1]]></update>
MONGO更新服务是通过
update标签进行定义的,用作于更新文档。返回值为影响行数,
Integer类型。
4.7 MONGO删除服务
<delete id="deleteUser" dsKey="mongods"> delete from user_info where id = 2 </delete>
MONGO删除服务是通过
delete标签进行定义的,用作于文档的删除。返回值为影响行数,
Integer类型。
4.8 MONGO组合服务
<mongo-service id="opUser" dsKey="mongods">
<insert>
INSERT INTO user_info(id, name, age, amount) VALUES(2, 'tangyuan-mongo', 18, 1000);
</insert>
<update><![CDATA[
UPDATE user_info SET name = 'xson.org', age = age + 2 where id = 1]]></update>
<selectSet resultKey="{users}"><![CDATA[
SELECT * from user_info where age >= 18 and age <= 28 order by age limit 10]]></selectSet>
<return>
<property value="{users}"/>
</return>
</mongo-service>
MONGO组合服务是通过
mongo-service标签进行定义的,用作于将多个Mongo基本服务封装成一个新的服务,供用户访问。返回对象可通过
return标签定义。
结语
通过本文的内容,我们对于tangyuan-mongo组件有了初步的了解,如果您对此感兴趣的话,可以通过下面的连接地址,进一步详细的了解该组件的使用。tangyuan-mongo技术文档:http://www.xson.org/project/mongo/1.2.0/
相关文章推荐
- 使用SQL访问MongoDB
- SQL View 的使用语法与原则
- AppFramework1.0数据库访问组件使用说明(七)SqlTemplate与SqlMap的使用
- [Microsoft][ODBC SQL Server Driver]语法错误或违反访问规则 解决办法
- sql语法的一些使用方法
- 如何使用 ADO Stream 对象访问和修改 SQL Server BLOB 数据
- 分解pb的数据管道语法,加入自己的SQL,灵活使用数据管道
- 不安装 oracle的客户,就可以使用pl/sql访问远程oracle 数据库的方法
- Oracle学习笔记:sqlplus使用ip地址访问Oracle服务器
- Transact-SQL 引用中的语法关系图使用下列规则
- 不安装 oracle的客户,就可以使用pl/sql访问远程oracle 数据库的方法
- sql查询时,出现 "在纤程模式下不支持异类查询和 OLEDB 访问接口的使用"问题
- SOA 数据访问--使用 LINQ To SQL 和实体框架实现灵活的数据访问
- SQL View 的使用语法与原则
- ADO.NET访问ACCESS数据库是SQL语句的通配符使用注意事项
- SQL还原数据库时发生错误,"因为数据库正在使用,所以未能获得对数据库的排它访问权。"解决方法。
- 详解Java的JDBC API的存储过程与SQL转义语法的使用
- 使用URL访问SQL 2005 Reporting Services
- 使用c#访问microsoft sql server compact (初级)
- 尝试通过使用 TCP/IP 套接字连接到群集中的 SQL Server 命名实例时收到“SQL Server does not exist or access denied”(SQL Server 不存在,或者访问被拒绝)错误消息