Tk.mybatis零sql语句实现动态sql查询的方法(4种)

 更新时间:2021年12月01日 17:13:37   作者:tyler.shi  
有时候,查询数据需要根据条件使用动态查询,这时候需要使用动态sql,本文主要介绍了Tk.mybatis零sql语句实现动态sql查询的方法,感兴趣的可以了解一下

有时候,查询数据需要根据条件使用动态查询,这时候需要使用动态sql,通常我们会自己写动态sql来实现,比如:

<select id="findStudentByCondition" resultType="com.example.service.entity.Student">
    SELECT id, name, score FROM tbl_student
    <where>
      <if test="score !=null and score > 0">
        score > #{score}
      </if>
      <if test="name !=null and name != ''">
         <bind name="pattern" value=" '%' + name + '%' "/>
        AND name LIKE #{pattern}
      </if>
    </where>
    ORDER BY score DESc
  </select>

        这个sql是查询成绩大于90并且名字包含“i”的学生信息。但是有时候又加了一个条件,又要去改sql,改入参,有没有一种方式可以将写动态sql像写代码一样实现呢?如果你有这个想法,推荐你了解一下Tk.mybatis。

      关于Tk.mybatis的介绍以及如何配置,本文暂不介绍,不了解的请自行百度,本文只介绍如何基于tk.mybatis实现不写sql语句也能实现动态sql查询。

实现方式:

1. 使用Example实现

2. 使用Example.createCriteria

3. 使用Example.builder实现

4. 使用WeekendSqls实现

方式一:使用Example实现

/**
   * 第一种:使用example查询
   */
  @Test
  public void testSelectByExample() {
    Example example = new Example(Student.class);
    // 设置查询列
    example.selectProperties("id","name","score");
    // 动态sql
    example.and()
        .andGreaterThan("score",90)
        .andLike("name", "%i%");
    // 去重
    example.setDistinct(true);
    // 排序
    example.orderBy("score").desc();
    List<Student> students = studentMapper.selectByExample(example);
    System.out.println(students);
  }

方式二:使用example.createCriteria实现

/**
   * 第二种:使用example.createCriteria查询
   */
  @Test
  public void testSelectByExampleCriteria() {
    Example example = new Example(Student.class);
    // 设置查询列
    example.selectProperties("id","name","score");
    // 动态查询
    example.createCriteria()
        .andGreaterThan("score",90)
        .andLike("name", "%i%");
    // 去重
    example.setDistinct(true);
    // 排序
    example.orderBy("score").desc();
    List<Student> students = studentMapper.selectByExample(example);
    System.out.println(students);
  }

方式三:使用Example.builder实现

/**
   * 第三种:使用Example.builder实现
   */
  @Test
  public void testSelectByExampleBuilder() {
    Example example = Example.builder(Student.class)
        // 查询列
        .select("id","name","score")
        // 动态sql
        .where(Sqls.custom()
            .andGreaterThan("score",90)
            .andLike("name","%i%"))
        // 去重
        .distinct()
        // 排序
        .orderByDesc("score")
        .build();
    List<Student> students = studentMapper.selectByExample(example);
    System.out.println(students);
  }

方式四:使用weekendSqls实现

/**
   * 第四种:使用weekendSqls实现
   */
  @Test
  public void testSelectByWeekendSqls() {
    WeekendSqls<Student> sqls = WeekendSqls.custom();
    sqls = sqls
        .andGreaterThan(Student::getScore,90)
        .andLike(Student::getName,"%i%");
    List<Student> sysRoles = studentMapper.selectByExample(Example.builder(Student.class)
        .select("id","name","score")
        .where(sqls)
        .distinct()
        .orderByDesc("score")
        .build());
    System.out.println(sysRoles);
 
  }

 到此这篇关于Tk.mybatis零sql语句实现动态sql查询的方法(4种)的文章就介绍到这了,更多相关Tk.mybatis 动态sql查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于dubbo的超时处理及重试原则

    关于dubbo的超时处理及重试原则

    这篇文章主要介绍了关于dubbo的超时处理及重试原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java开发利器之Guava Cache的使用教程

    Java开发利器之Guava Cache的使用教程

    缓存技术被认为是减轻服务器负载、降低网络拥塞、增强Web可扩展性的有效途径之一。今天咱们就来聊聊Guava Cache本地缓存,感兴趣的可以了解一下
    2022-09-09
  • java连接ElasticSearch集群操作

    java连接ElasticSearch集群操作

    这篇文章主要介绍了java连接ElasticSearch集群操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java SpringSecurity使用详解

    java SpringSecurity使用详解

    这篇文章主要介绍了java中Spring Security的实例详解的相关资料,spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案,需要的朋友可以参考下
    2021-08-08
  • SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例

    SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例

    本篇文章主要介绍了SpringMVC 文件上传配置,详解介绍了如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤,有兴趣的可以了解一下。
    2016-12-12
  • Java中redisTemplate注入失败NullPointerException异常问题解决

    Java中redisTemplate注入失败NullPointerException异常问题解决

    这篇文章主要介绍了Java中redisTemplate注入失败NullPointerException异常问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-08-08
  • Spring中循环依赖的解决方法详析

    Spring中循环依赖的解决方法详析

    这篇文章主要给大家介绍了关于Spring中循环依赖的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 详解如何在Spring中为@Value注解设置默认值

    详解如何在Spring中为@Value注解设置默认值

    在Spring开发中,我们经常会遇到需要从配置文件中读取属性的情况,@Value注解是Spring提供的一种便捷方式,能够让我们轻松地将配置文件中的属性注入到Spring Bean中,
    2024-10-10
  • Java基于状态模式实现的文档编辑模式切换功能实例

    Java基于状态模式实现的文档编辑模式切换功能实例

    这篇文章主要介绍了Java基于状态模式实现的文档编辑模式切换功能,结合实例形式详细分析了状态模式的概念、原理及java使用状态模式实现文档编辑模式切换操作相关技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • Java弱键集合WeakHashMap及ConcurrentCache原理详解

    Java弱键集合WeakHashMap及ConcurrentCache原理详解

    这篇文章主要介绍了Java弱键集合WeakHashMap及ConcurrentCache原理详解,基于哈希表的Map接口实现,支持null键和值,但是WeakHashMap具有弱键,可用来实现缓存存储,在进行GC的时候会自动回收键值对,需要的朋友可以参考下
    2023-09-09

最新评论