Python实现Mybatis Plus

Python实现Mybatis Plus

from flask import g
from sqlalchemy import asc, desc


class QueryWrapperBuilder:
    conditions = {}
    order_by_info = {}

    def __new__(cls, *args, **kwargs):
        obj = super(QueryWrapperBuilder, cls).__new__(cls)
        return obj

    def __init__(self, obj):
        self.obj = obj
        self.conditions = {}
        self.order_by_info = {}

    @classmethod
    def builder(cls, obj=None):
        """
        :param obj: 数据库模型类
        :return:
        """
        return cls(obj)

    def is_null(self, field):
        self.conditions[field.key] = None == field
        return self

    def is_not_null(self, field):
        self.conditions[field.key] = None != field
        return self

    def eq(self, field, value):
        if value:
            self.conditions[field.key] = field == value
        return self

    def gt(self, field, value):
        if value:
            self.conditions[field.key] = field > value
        return self

    def gte(self, field, value):
        if value:
            self.conditions[field.key] = field >= value
        return self

    def lt(self, field, value):
        if value:
            self.conditions[field.key] = field < value
        return self

    def lte(self, field, value):
        if value:
            self.conditions[field.key] = field <= value
        return self

    # 新增方法
    def between(self, field, value):
        if value and isinstance(value, list):
            self.conditions[field.key] = field.between(value[0], value[1])
        return self

    def in_(self, field, value):
        if value and isinstance(value, list):
            self.conditions[field.key] = field.in_(value)
        return self

    def like(self, field, value):
        if value:
            self.conditions[field.key] = field.like(f'%{value}%')
        return self

    def order_by_desc(self, *fields):
        if fields:
            for field in fields:
                self.order_by_info[field.key] = desc(field)
        return self

    def order_by_asc(self, *fields):
        if fields:
            for field in fields:
                self.order_by_info[field.key] = asc(field)

        return self

    def filter(self):
        return [v for k, v in self.conditions.items()]

    def order_by_filter(self):
        return [v for k, v in self.order_by_info.items()]

    def lambda_query(self):
        return self

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 18:40:03       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 18:40:03       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 18:40:03       90 阅读
  4. Python语言-面向对象

    2024-07-10 18:40:03       98 阅读

热门阅读

  1. 管理客户的10个CRM系统技巧

    2024-07-10 18:40:03       30 阅读
  2. 四、Python日志系统之日志文件的备份和删除

    2024-07-10 18:40:03       26 阅读
  3. ZC2205-24V500mAUltralow-Quiescent-Current LDO

    2024-07-10 18:40:03       18 阅读
  4. 六、golang基础之面向对象特征

    2024-07-10 18:40:03       25 阅读
  5. 开源项目的机遇与挑战

    2024-07-10 18:40:03       28 阅读
  6. 关于go和rust语言的对比

    2024-07-10 18:40:03       27 阅读
  7. python入门基础知识·二

    2024-07-10 18:40:03       26 阅读
  8. 概率基础——矩阵正态分布matrix normal distribution

    2024-07-10 18:40:03       23 阅读
  9. 网络编程:常用网络测试工具

    2024-07-10 18:40:03       26 阅读