SQL转MongoDB语法工具类(sql-to-mongo-db-query-converter工具包的使用)

目录

场景:    

举例:

        我这边存储的sql where子句是:

        他需要用到的MongoDB语法格式是:

实操:

1.引用依赖

2.封装转义工具类

3.测试用例

以下是运行结果:


场景:    

    最近写了一个目录管理的需求,用的MySQL数据库,存储了一些查询条件,对接我的同事他做的模块用的是MongoDB数据库,这样就需要转义。

举例:

        我这边存储的sql where子句是:

a != 1 and b = 2 or (c =3 and d = 4 or e like '%5%')

        他需要用到的MongoDB语法格式是:

{
    "$or":[
        {
            "a":{
                "$ne":1
            }
        },
        {
            "b":2
        },
        {
            "$or":[
                {
                    "c":3
                },
                {
                    "d":4
                },
                {
                    "e":{
                        "$regex":"^.*5.*$"
                    }
                }
            ]
        }
    ]
}

        这样看,转义自己写是相当费劲,因为语法完全不一样,尤其是涉及到多个‘“或”“与”“非”加括号的时候就很容易崩溃了...

        所以最好的办法就是面向对象,没错去找工具类,吃现成的……

        经鄙人不懈努力的查找下,终于再github上找到了可用的工具包

        sql-to-mongo-db-query-converter

        终于看到曙光了,附一下地址:

sql转MongoDB语法的工具包github地址

接下来就是引用依赖自己封装写工具类了,以下是我给同事提供的工具类代码

实操:

1.引用依赖

<dependency>
   <groupId>com.github.vincentrussell</groupId>
   <artifactId>sql-to-mongo-db-query-converter</artifactId>
   <version>1.21</version>
</dependency>

2.封装转义工具类

import com.github.vincentrussell.query.mongodb.sql.converter.MongoDBQueryHolder;
import com.github.vincentrussell.query.mongodb.sql.converter.QueryConverter;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;

/**
 * 类描述: mysql语句转mongoDB语句
 *
 * @author bijianhuan
 * @version 1.0
 * @date 2022/6/18 11:26
 */
@Slf4j
public class MysqlConvertToMongoDB {

    public static Document SqlConvertToMongoDB(String dataCondition) throws Exception {
        log.info("需要转义sql: " + dataCondition);
        String sql = "select * from t where " + dataCondition;
        log.info("转义前的sql: " + sql);
        QueryConverter queryConverter = new QueryConverter.Builder().sqlString(sql).build();
        MongoDBQueryHolder mongoDBQueryHolder = queryConverter.getMongoQuery();
        String collection = mongoDBQueryHolder.getCollection();
        Document query = mongoDBQueryHolder.getQuery();
        String mongosql = query.toJson();
        log.info("转义后的sql: " + mongosql);
        log.info("返回值Document: " + query);
        return query;
    }

}

3.测试用例

import org.bson.Document;

/**
 * 类描述:
 *
 * @author bijianhuan
 * @version 1.0
 * @date 2022/6/18 11:30
 */
public class CheckFormat {
    public static void main(String[] args) throws Exception {

        Document document = MysqlConvertToMongoDB.SqlConvertToMongoDB("a != 1 and b = 2 or (c =3 and d = 4 or e like '%5%')");

    }

}

以下是运行结果:

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
是的,如果你使用 Spring Boot Starter Data MongoDB,那么在使用 MongoTemplate 之前,需要配置 MongoTemplate。在 Spring Boot 中,可以通过在配置类上添加注解 `@EnableMongoRepositories` 来启用 MongoDB 集成。 以下是一个简单的配置类示例,它定义了一个名为 mongoTemplate 的 MongoTemplate bean: ``` @Configuration @EnableMongoRepositories(basePackages = "com.example.mongo.repositories") public class MongoConfig extends AbstractMongoClientConfiguration { @Value("${spring.data.mongodb.uri}") private String connectionString; @Value("${spring.data.mongodb.database}") private String dbName; @Override public MongoClient mongoClient() { ConnectionString connString = new ConnectionString(connectionString); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connString) .build(); return MongoClients.create(settings); } @Override protected String getDatabaseName() { return dbName; } @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoClient(), getDatabaseName()); } } ``` 在这个例子中,我们使用 `@EnableMongoRepositories` 注解来启用 MongoDB 集成,并指定了存储库接口的基本包名称。在 `mongoClient()` 方法中,我们创建了一个 MongoDB 客户端并返回它。在 `mongoTemplate()` 方法中,我们创建了一个名为 mongoTemplate 的 MongoTemplate bean。这个 bean 可以直接在你的代码中注入并使用。 注意,这里我们继承了 `AbstractMongoClientConfiguration` 类,这是因为它提供了一些默认的配置,例如自动配置了 MongoClient 和 MongoDatabaseFactory。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bijianhuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值