草庐IT

MyBatis动态拼接SQL,MyBatisPlus条件构造器

雷大胖胖 2024-07-02 原文

目录

一MyBatis动态拼接SQL

1:if标签

2、where标签

3:foreach标签

二 MyBatisPlus条件构造器

2.1使用QueryWrapper进行各种条件构造

2.1.1案例一组装条件查询

2.1.2、例2:组装排序条件

2.1.3、例3:组装删除条件

2.1.4、例4:条件的优先级

2.1.5实现子查询

2.2常用的QueryWrapper查询语法总结


一MyBatis动态拼接SQL

1:if标签

<select id="selectByMoney" resultType="User">
        <include refid="user_sql"></include>
        <where>
            <if test="money!=null and money!=''">
                and money>1000
            </if>
        </where>
    </select>

2where标签

<select id="selectByMoney" resultType="User">
        <include refid="user_sql"></include>
        <where>
            <if test="money!=null and money!=''">
                and money>1000
            </if>
        </where>
    </select>

where标签的作用是可以自动处理掉第一个and

3:foreach标签

<select id="selectUserById" resultType="User">
        <include refid="user_sql"></include>
         <where>
             <foreach collection="ids" open="and id in(" item="id" separator="," close=")">
                 #{id}
             </foreach>

         </where>

    </select>

二 MyBatisPlus条件构造器

2.1使用QueryWrapper进行各种条件构造

2.1.1案例一组装条件查询

 @RequestMapping("/hello15")
    //查询用户名中包含a和余额在1000-9000之间的用户信息
    public List<User> text15(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.like("user_name","a");
        queryWrapper.between("money",1000,9000);
        queryWrapper.eq("password","111");
        List<User> list = dao.selectList(queryWrapper);
        return list;

    }

2.1.2、例2:组装排序条件

 @RequestMapping("/hello16")
    public  List<User> text16(){
        //根据用户余额降序排序,如果遇到相同余额的则按照id升序排序
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper
                .orderByDesc("money")
                .orderByAsc("id");
        List<User> list = dao.selectList(queryWrapper);
        return list;
    }

2.1.3、例3:组装删除条件

 @RequestMapping("/hello17")
    public int text17(){
        //删除余额为空的用户信息
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper
                .isNull("money");
        int count = dao.delete(queryWrapper);
        return  count;
    }

2.1.4、例4:条件的优先级

  @RequestMapping("/hello18")
    public int text18(){
        //修改余额大于1000并且用户名等于admin或者余额为空的用户信息
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper
                .gt("money",1000)
                .eq("user_name","admin")
                .or().isNull("money");
        //通过对象set方法修改信息
        User user = new User();
        user.setUserName("大胖");
        user.setPassword("888");
        int count = dao.update(user, queryWrapper);
        return count;
    }

2.1.5实现子查询

@RequestMapping("/hello19")
    public List<User> text19(){
        //查询余额大于3等于3000的用户信息
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("id","select id from t_user where money>=3000");
        List<User> list = dao.selectList(queryWrapper);
        return list;
    }

2.2常用的QueryWrapper查询语法总结

queryWrapper.lt() 小于
queryWrapper.le() 小于等于
queryWrapper.gt() 大于
queryWrapper.ge() 大于等于
queryWrapper.eq() 等于
queryWrapper.ne() 不等于
queryWrapper.like(“属性”,“值”) 模糊查询%值%
queryWrapper.notLike(“属性”,“值”) 模糊查询不包含%值%
queryWrapper.likeLeft(“属性”,“值”) 模糊查询%值 以什么结尾
queryWrapper.likeRight(“属性”,“值”) 模糊查询 值% 以什么开始
queryWrapper.isNull() 值为空或者为null
queryWrapper.isNotNull() 值不为空 或者为null
queryWrapper.in(“属性”,“条件”,“条件”) 符合多个条件的值
queryWrapper.notIn(“属性”,“条件”,“条件”) 不符合多个条件的值
queryWrapper.or() 或者
queryWrapper.and() 和
queryWrapper.sql(sql语句) 符合sql语句的值
queryWrapper.notSql(sql语句) 不符合SQL语句的值

有关MyBatis动态拼接SQL,MyBatisPlus条件构造器的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  3. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  4. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  5. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  6. ruby-on-rails - 使用包含多个关联和单独的条件 - 2

    我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS

  7. ruby-on-rails - 在 haml View 中重构条件 - 2

    除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p

  8. ruby - 在 Ruby 中动态创建数组 - 2

    有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.

  9. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  10. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

随机推荐