深入理解MyBatis-Plus框架中的Wrapper、QueryWrapper和UpdateWrapper

引言:
MyBatis-Plus是一款优秀的第三方MyBatis增强工具,提供了很多强大且易用的功能,其中包括了Wrapper、QueryWrapper和UpdateWrapper等封装类。它们在MyBatis-Plus框架中起到了重要的作用,使得条件查询和更新更加方便和灵活。本文将详细介绍Wrapper、QueryWrapper和UpdateWrapper的作用和用法,并对一些扩展功能进行探讨。

一、Wrapper简介
Wrapper是MyBatis-Plus中的一个通用抽象接口,用于封装查询或更新的条件。它提供了一系列用于构建条件的方法,可以链式调用,方便进行多条件组合。

二、QueryWrapper的作用和使用方法

  1. 作用:
    QueryWrapper是Wrapper接口的一个实现类,主要用于构建查询条件。

  2. 使用方法:
    (1)创建QueryWrapper对象:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

(2)设置查询条件:

queryWrapper.eq("username", "admin")
            .between("age", 20, 30)
            .orderByAsc("create_time");

(3)执行查询:

List<User> userList = userMapper.selectList(queryWrapper);
  1. 扩展功能:模糊查询、自定义SQL、Lambda表达式
    QueryWrapper支持多种查询条件的构建方式,包括模糊查询、自定义SQL和Lambda表达式等。下面是一些扩展的示例:

(1)使用模糊查询:

queryWrapper.like("username", "a");

(2)使用自定义SQL:

queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}", "2021-01-01");

(3)使用Lambda表达式(需要引入MyBatis-Plus的LambdaQueryWrapper类):

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(User::getUsername, "a");

三、UpdateWrapper的作用和使用方法
注意:
1.使用queryWrapper + 实体类形式可以实现修改,但是无法将列值修改为null值!
2.使用updateWrapper可以随意设置列的值!!

  1. 作用:
    UpdateWrapper是Wrapper接口的另一个实现类,主要用于构建更新条件。

  2. 使用方法:
    (1)创建UpdateWrapper对象:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();

(2)设置更新条件和操作:

updateWrapper.set("status", 1)
             .eq("username", "admin");

(3)执行更新:

int result = userMapper.update(null, updateWrapper);
  1. 扩展功能:Lambda表达式的更新操作
    UpdateWrapper也支持Lambda表达式的更新操作,使用起来更加方便:
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(User::getStatus, 1)
                   .eq(User::getUsername, "admin");
int result = userMapper.update(null, lambdaUpdateWrapper);

四、小结与扩展
通过使用Wrapper、QueryWrapper和UpdateWrapper,我们可以轻松完成复杂的条件查询和更新操作。同时,MyBatis-Plus还提供了更多强大的功能,例如分页查询、排序、聚合查询等,读者可以继续深入研究。

希望本文能够帮助读者更好地理解MyBatis-Plus框架中的Wrapper、QueryWrapper和UpdateWrapper,并为开发工作提供一些实用的技巧和思路。对于进一步学习和应用MyBatis-Plus框架,建议阅读官方文档和相关教程。



PS:个人一直在使用的大流量卡,非物联卡,想了解办理的可点下面链接:
https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=c942fa25546f0a28b967e505d8255dd7
大流量卡详情

个人使用情况:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 回答1: updatewrapper是Python中的一个函数,它的作用是将一个函数的元数据(如文档字符串、函数名、参数列表等)复制到另一个函数中。它有以下几个方法: 1. update_wrapper(wrapper, wrapped, assigned=None, updated=None) 这个方法将wrapped函数的元数据复制到wrapper函数中。assignedupdated参数分别指定哪些元数据应该被复制。如果不指定这些参数,则默认复制所有元数据。 2. update_wrapper(wrapper, wrapped) 这个方法与上一个方法类似,但是默认复制所有元数据。 3. wraps(wrapped, assigned=None, updated=None) 这个方法是一个装饰器,它将一个函数包装成另一个函数,并将wrapped函数的元数据复制到wrapper函数中。assignedupdated参数分别指定哪些元数据应该被复制。如果不指定这些参数,则默认复制所有元数据。 4. partial_update_wrapper(wrapper, wrapped, assigned=None, updated=None) 这个方法与update_wrapper类似,但是只复制wrapped函数的一部分元数据到wrapper函数中。assignedupdated参数分别指定哪些元数据应该被复制。如果不指定这些参数,则默认复制所有元数据。 5. get_wrapper_decorator(wrapper, wrapped) 这个方法返回一个装饰器,它将wrapped函数包装成wrapper函数,并将wrapped函数的元数据复制到wrapper函数中。这个方法通常用于在类中定义装饰器。 以上就是updatewrapper的所有方法。 ### 回答2: updatewrapper是一个用于包装Python装饰器的辅助函数。它的所有方法如下: 1. update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES) 此方法将包装器函数(wrapper)的属性更新为被包装函数(wrapped)的属性。在Python中使用装饰器时,经常使用这个方法来保证包装器函数被包装函数具有相同的名称文档字符串等属性。 * 参数: - wrapper: 包装器函数 - wrapped: 被包装函数 - assigned: 可选参数,指定要复制到包装器函数中的被包装函数的名称列表,默认值是WRAPPER_ASSIGNMENTS(常量包含了属性名称列表) - updated: 可选参数,指定要复制到包装器函数中的被包装函数的属性名称列表,默认值是WRAPPER_UPDATES(常量包含了属性名称列表) 2. update_wrapper.__name__ 获取update_wrapper方法的名称。 3. update_wrapper.__module__ 获取update_wrapper方法所在的模块名称。 4. update_wrapper.__doc__ 获取update_wrapper方法的文档字符串。 5. WRAPPER_ASSIGNMENTS 一个常量列表,定义了在update_wrapper方法调用中应该复制被装饰函数的哪些属性(比如__name__、__doc__等)。 6. WRAPPER_UPDATES 一个常量列表,定义了在update_wrapper方法调用中应该更新被装饰函数的哪些属性(比如__dict__等)。 总之,updatewrapper是一个方便的Python库函数,用于给包装器函数设置属性。它接受三个参数:wrapper(包装器函数),wrapped(被包装函数),可选的assigned、updated参数。assignedupdated参数定义了哪些属性应该从包装end函数复制到包装器函数中。此外,updatewrapper还定义了常量WRAPPER_ASSIGNMENTSWRAPPER_UPDATES,用于指定要复制或更新的属性列表。 ### 回答3: updatewrapper是Python标准库中的一个模块,主要提供了三个方法:update_wrapper、wrapsWRAPPER_ASSIGNMENTS。 1. update_wrapper update_wrapper函数的作用是将一个函数的属性复制到另一个函数或方法中,使它们具有相同的属性。update_wrapper的参数有三个:wrapper(被包装的函数)、decorated(包装函数)assigned(可选参数,给定一个属性列表,仅将这些属性从被包装函数复制到包装函数中)。默认情况下,update_wrapper将使用WRAPPER_ASSIGNMENTS列表中的属性进行复制。 示例代码: ```python from functools import update_wrapper def my_decorator(f): def wrapper(*args, **kwds): '''Decorator function''' print('Calling decorated function') return f(*args, **kwds) return update_wrapper(wrapper, f) @my_decorator def example(): '''Docstring''' print('Called example function') print(example.__name__) print(example.__doc__) ``` 输出结果: ``` example Docstring ``` 2. wraps wraps函数是一个decorator工具,用于将装饰器中包装函数的名称文档字符串复制到包装器函数中。wraps本质上是update_wrapper的一个包装函数,它的参数是func,返回一个带有被包装函数的装饰器。它与update_wrapper的区别在于它已经预先指定了wrapper函数更新属性的列表,因此可以直接使用。 示例代码: ```python from functools import wraps def my_decorator(f): @wraps(f) def wrapper(*args, **kwds): '''Decorator function''' print('Calling decorated function') return f(*args, **kwds) return wrapper @my_decorator def example(): '''Docstring''' print('Called example function') print(example.__name__) print(example.__doc__) ``` 输出结果: ``` example Docstring ``` 3. WRAPPER_ASSIGNMENTS WRAPPER_ASSIGNMENTS是一个元组,其中包含要从源函数复制到目标函数的属性。默认情况下,这个元组包含__module__、__name__、__qualname__、__doc__、__annotations__属性的标识符。可以通过修改WRAPPER_ASSIGNMENTS元组中的属性来自定义属性。 示例代码: ```python from functools import update_wrapper, WRAPPER_ASSIGNMENTS def my_decorator(f): def wrapper(*args, **kwds): '''Decorator function''' print('Calling decorated function') return f(*args, **kwds) return update_wrapper(wrapper, f, assigned=('__name__', '__doc__', '__module__')) @my_decorator def example(): '''Docstring''' print('Called example function') print(example.__name__) print(example.__doc__) print(example.__module__) ``` 输出结果: ``` example Docstring __main__ ``` 以上就是update_wrapper的所有方法,使用这些方法能够更好地为函数或方法提供装饰的功能,增强代码的可读性可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸡上道

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

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

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

打赏作者

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

抵扣说明:

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

余额充值