当前位置:   article > 正文

MybatisPlus 中and和or的使用,附有对应的sql语句,有助于理解。_mybatisplus and or

mybatisplus and or

示例一:

需求:取类型为1且创建时间小于等于dateStr="2022-01"的项目。

1.数据库中的创建时间为日期类型,需格式为年月的格式与传进来的开始日期进行匹配

2.条件构造器apply的查询方式解决日期和时间之间查询上的冲突

  1. projectMapper.selectList(new LambdaQueryWrapper<Project>()
  2. .eq(Project::getType,1)
  3. .and(qw -> qw.apply("DATE_FORMAT(create_time, '%Y-%m') <= '" + dateStr + "'")));

执行SQL如下:

  1. SELECT
  2. *
  3. FROM project
  4. WHERE
  5. type = 1
  6. AND (DATE_FORMAT(create_time, '%Y-%m') <= '2022-01');

示例二

and中的or,和外层的or,看sql,有助于理解。

  1. // 示例二
  2. customerMapper.selectList(new LambdaQueryWrapper<Customer>()
  3. .eq(Customer::getTaxpayerIdentificationNumber,"912102113000000000")
  4. .and(qw -> qw.eq(Customer::getParentId,111).or().eq(Customer::getContactNumber,"88"))
  5. .eq(Customer::getName, "啦啦啦")
  6. .or()
  7. .ne(Customer::getNumber, 1)
  8. .eq(Customer::getCompanyType,1));

执行SQL如下:

  1. SELECT
  2. *
  3. FROM
  4. customer
  5. WHERE
  6. taxpayer_identification_number = '912102113000000000'
  7. AND (
  8. parent_id = 111
  9. OR contact_number = '88'
  10. )
  11. AND NAME = '啦啦啦'
  12. OR number <> 1
  13. AND company_type = 1;

示例三:

需求:查截止到今天,未下项目的数据。

  1. under_project_time为下项目时间

  2. 使用条件构造器apply查询方式可以直接把格式一样当前日期和下项目时间进行比较筛选

  1. employeeProjectMapper.selectList(new LambdaQueryWrapper<EmployeeProject>()
  2. .isNotNull(EmployeeProject::getState)
  3. .eq(EmployeeProject::getFlag, 1)
  4. .and(qw -> qw.isNull(EmployeeProject::getUnderProjectTime)
  5. .or().apply("DATE_FORMAT(under_project_time, '%Y-%m-%d') >= DATE_FORMAT(NOW(),'%Y-%m-%d')")));

执行SQL如下:

  1. SELECT
  2. *
  3. FROM
  4. employee_project
  5. WHERE
  6. state IS NOT NULL
  7. AND flag = 1
  8. AND (
  9. under_project_time IS NULL
  10. OR DATE_FORMAT(under_project_time, '%Y-%m-%d') >= '2022-07-27'
  11. );

示例四:

需求:根据传进来的年月字符串dateStr,查传入月的在职男员工数。dateStr = "2022-01"。

  1. entry_time为入职时间,date类

  2. separated_time为离职时间,date类型

  3. 入职时间和离职时间为日期类型,需格式为年月的格式与传进来的dateStr进行比较筛选

查询逻辑:首先性别男,其次:①入职时间小于等于dateStr且未离职;②:入职时间小于等于dateStr,且离职时间大于等于dateStr。

  1. employeeMapper.selectList(new LambdaQueryWrapper<Employee>()
  2. .eq(Employee::getSex, 1)
  3. .and(qw ->
  4. qw.apply("date_format (entry_time,'%Y-%m') <= '" + dateStr + "' AND separated_time IS NULL" )
  5. .or()
  6. .apply("date_format (entry_time,'%Y-%m') <= '" + dateStr + "' AND date_format (separated_time,'%Y-%m') >= '" + dateStr + "'")));

执行SQL如下:

  1. SELECT
  2. *
  3. FROM
  4. employee
  5. WHERE
  6. sex = 1
  7. AND (
  8. date_format(entry_time, '%Y-%m') <= '2022-01'
  9. AND separated_time IS NULL
  10. OR date_format(entry_time, '%Y-%m') <= '2022-01'
  11. AND date_format(separated_time, '%Y-%m') >= '2022-01'
  12. );
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/158331
推荐阅读
  

闽ICP备14008679号