广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Mybatis如何实现多个控制条件查询
  • 390
分享到

使用Mybatis如何实现多个控制条件查询

2024-04-02 19:04:59 390人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录实现多个控制条件查询扩展知识实现多个条件简单查询数据库的字段名和实体类的属性名不一致时实现多个条件复杂查询mybatis条件查询总结1.if条件语句2.choose(whenot

实现多个控制条件查询

扩展知识

1.给包起别名用<typeAliases>标签

< typeAliases>
< typeAlias type=“MybatiesAnimal.Animal” alias=“animal”/>
< !-- 指定实体类在哪个包里 -->
< package name=“MybatiesAnimal”/>
< /typeAliases>

2.在<mappers>中通过<package>标签引Mapper.xml

如果想用package直接引入所有mapper/xml, 那么要求接口和xml在一个包里

实现多个条件简单查询

操作步骤如下:

1.在Mapper.xml中输入要查询的SQL语句

2.接口文件中参数用@Param接

语句如下:

public List selAnimalBy(@Param(“NAME”) String a,@Param(“kind”) String b);

如果传的是2个java简单类型 那么需要用@Param(“name”) 指定参数名

3.text文档中输出

语句如下:

List< Animal> animal1=sqlsession.getMapper(AnimalMapper.class).selAnimalBy(“老虎”, “猫科”);
System.out.println(animal1);

数据库的字段名和实体类的属性名不一致时

因为数据库命名多个单词之间用下划线连接,而Java命名规则为第二个字母大写,命名规则不同时,需要传值。

方法一:修改SQL语句

SELECT a_sid sid,kind,numbers,address,NAME FROM animal

给a_sid 取别名为sid

xml中语句修改如下:

方法二:通过配置resultMap标签

原查询语句:

< select id=“selAnimalBy” resultType=“animal” >
SELECT * FROM animal WHERE NAME=#{NAME} AND kind=#{kind}
< /select>

修改为:

实现多个条件复杂查询

例如:查询动物列表中猫科中包含虎字段的数据

SQL语句为:

SELECT * FROM animal WHERE 1=1 AND kind=“猫科” AND NAME LIKE ‘%虎%'

1.配置xml中的select标签

如下图:

2.添加接口中的执行语句

public List< Animal> selCon(Animal animal);

3.text文档检验结果

Animal animal1=new Animal();
animal1.setKind(“猫科”);
animal1.setName(“虎”);
List< Animal>animal2=sqlsession.getMapper(AnimalMapper.class).selCon(animal1);
System.out.println(animal2);

输出结果如下:

MyBatis条件查询总结

1.if条件语句

<!--  if(判断参数) - 将实体类不为空的属性作为where条件 -->  
    <select id="getStudentList_if" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity">  
        SELECT ST.STUDENT_ID,  
               ST.STUDENT_NAME,  
               ST.STUDENT_SEX,  
               ST.STUDENT_BIRTHDAY,  
               ST.STUDENT_PHOTO,  
               ST.CLASS_ID,  
               ST.PLACE_ID  
          FROM STUDENT_TBL ST   
         WHERE  
        <if test="studentName !=null ">  
            ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')  
        </if>  
        <if test="studentSex != null and studentSex != '' ">  
            AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}  
        </if>  
        <if test="studentBirthday != null ">  
            AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}  
        </if>  
        <if test="classId != null and classId!= '' ">  
            AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}  
        </if>  
        <if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">  
            AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}  
        </if>  
        <if test="placeId != null and placeId != '' ">  
            AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}  
        </if>  
        <if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">  
            AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}  
        </if>  
        <if test="studentId != null and studentId != '' ">  
            AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}  
        </if>   
    </select> 

2.choose (when otherwise)

<!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->  
<select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">  
    SELECT *  
      FROM User u   
    <where>  
        <choose>  
            <when test="username !=null ">  
                u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')  
            </when >  
            <when test="sex != null and sex != '' ">  
                AND u.sex = #{sex, jdbcType=INTEGER}  
            </when >  
            <when test="birthday != null ">  
                AND u.birthday = #{birthday, jdbcType=DATE}  
            </when >  
            <otherwise>  
            </otherwise>  
        </choose>  
    </where>    
</select>  
<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
        select * from t_blog where 1 = 1 
        <choose>
            <when test="title != null">
                and title = #{title}
            </when>
            <when test="content != null">
                and content = #{content}
            </when>
            <otherwise>
                and owner = "owner1"
            </otherwise>
        </choose>
</select>

4.in的用法

    <select id="getNewListByLabelID" resultMap="BaseResultMap" parameterType="arraylist">
        SELECT
        <include refid="Base_Column_List"/>
        FROM tb_problem
        WHERE id IN
        <foreach collection="ids" index="index" item="id" separator="," close=")" open="(">
            #{id}
        </foreach>
    </select>

还可以这样

<select id="queryAllOpenProduct" parameterType="com.tims.open.domain.OpenProductQueryCondition"
    resultType="com.tims.open.domain.OpenProduct">
    SELECT
         *
    FROM
        product_db.product p
    WHERE
        p.isvalid = 1
    <if test="list != null">
        <foreach collection="list" index="index" item="item" separator="," open="AND p.id IN (" close=")">
               #{item}
        </foreach>
    </if>
</select>
//查询condition类
Public OpenProductQueryCondition{
    private Integer productId;  
    private List<Integer> list;
}

5.模糊查询

<!-- ******************** 模糊查询的常用的3种方式:********************* -->
    <select id="getUsersByFuzzyQuery" parameterType="User" resultType="User">
        select <include refid="columns"/> from users
        <where>
            <!--
                方法一: 直接使用 % 拼接字符串 
                注意:此处不能写成  "%#{name}%" ,#{name}就成了字符串的一部分,
                会发生这样一个异常: The error occurred while setting parameters,
                应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上%
            -->
            <if test="name != null">
                name like "%"#{name}"%"
            </if>
            <!--方法二: 使用concat(str1,str2)函数将两个参数连接 -->
            <if test="phone != null">
                and phone like concat(concat("%",#{phone}),"%")
            </if>
            <!--方法三: 使用 bind 标签,对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询 -->
            <if test="email != null">
                <bind name="pattern" value="'%'+email+'%'"/>
                and email like #{pattern}
            </if>
        </where>
    </select>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用Mybatis如何实现多个控制条件查询

本文链接: https://www.lsjlt.com/news/142151.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Mybatis如何实现多个控制条件查询
    目录实现多个控制条件查询扩展知识实现多个条件简单查询数据库的字段名和实体类的属性名不一致时实现多个条件复杂查询MyBatis条件查询总结1.if条件语句2.choose(whenot...
    99+
    2022-11-13
  • 如何实现多条件查询
    这篇文章主要讲解了“如何实现多条件查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现多条件查询”吧! 而在对用户进行查...
    99+
    2022-10-18
  • Layui如何实现多条件查询
    这篇文章主要介绍了Layui如何实现多条件查询,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近做一个档案系统,发现字段超多带分页的多条件查询(分页需要后端分页,传page给...
    99+
    2023-06-25
  • 使用JPA+querydsl如何实现多条件动态查询
    目录JPAquerydsl多条件动态查询介绍一下querydsl看源码springdataJPA和querydsl什么是SpringDataJPA?什么是QueryDSL?@Mapp...
    99+
    2022-11-13
  • 利用mybatis如何实现一个一对多查询功能
    利用mybatis如何实现一个一对多查询功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.需求分析:在开发中会遇到这样一个问题,查询订单信息,级联查询出用户信息和订单明...
    99+
    2023-05-31
    mybatis 一对多查询
  • 使用Spring Data JPA如何实现多条件的分页查询
    使用Spring Data JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。话不多说,请看代码:public Map<String, Obje...
    99+
    2023-05-31
    spring 分页查询 dat
  • 使用mongoTemplate实现多条件加分组查询方式
    目录mongoTemplate实现多条件查询mongoTemplate分组查询的坑先来一个常见的错误信息: Due to limitations of the com.mongodb...
    99+
    2022-11-13
  • 怎么使用JPA+querydsl实现多条件动态查询
    这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
    99+
    2023-06-29
  • MyBatis-Plus使用条件构造器实现不同条件的查询,更新删除操作
    Wrapper 是所有条件构造器的父类,作用是生成条件语句,即where后面的sql子句 在调用查询,更新,删除操作时,需要根据条件进行判断,可以使用条件构造器进行组合条件,生成where后面条件子句 QueryWrap...
    99+
    2023-08-31
    sql mysql 数据库
  • springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能
    完整案例: SpringBoot + laypage分页 + 模糊查询 完整案例 下面在通过实例代码介绍下springboot +mybatis 使用PageHelper实现分页并带...
    99+
    2022-11-13
  • 使用mybatis如何实现查询缓存
    这篇文章将为大家详细讲解有关使用mybatis如何实现查询缓存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1 缓存的意义将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上...
    99+
    2023-05-31
    mybatis 查询缓存
  • 如何在python3中使用sqlite3限制条件查询
    如何在python3中使用sqlite3限制条件查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。import json import sql...
    99+
    2023-06-14
  • mybatis如何使用注解实现一对多关联查询
    mybatis 注解实现一对多关联查询 @Select("select id,mockexam_section as section,id as sectionId" ...
    99+
    2022-11-12
  • 如何在springboot中使用mybatis-plus实现一个多表分页查询功能
    这篇文章将为大家详细讲解有关如何在springboot中使用mybatis-plus实现一个多表分页查询功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。新建一个springboot工程需要...
    99+
    2023-06-07
  • java项目中使用datatables如何实现一个带条件查询功能
    这篇文章给大家介绍java项目中使用datatables如何实现一个带条件查询功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用datatables自带后台查询 前台代码:<!DOCTYPE html>...
    99+
    2023-05-31
    java 条件查询 datatables
  • ThinkPHP5如何实现前端多条件组合查询提交
    今天小编给大家分享一下ThinkPHP5如何实现前端多条件组合查询提交的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、需求...
    99+
    2023-07-06
  • SpringDataJpa如何使用union多表分页条件查询
    目录如何使用union多表分页条件查询条件分页踩过的坑分享几个用到的mysql语法jpa执行原生sql union bug解决如何使用union多表分页...
    99+
    2022-11-13
  • 使用Mybatis 如何实现多对一或一对多的关联查询
    使用Mybatis 如何实现多对一或一对多的关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先  数据库量表之间字段关系(没有主外键)studentmaj...
    99+
    2023-05-31
    mybatis 一对多 多对一
  • 如何使用Mockjs模拟接口实现增删改查、分页及多条件查询
    本篇内容主要讲解“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Mockjs模拟接口实现增删改查、分页及多条件查询”吧!一、什么...
    99+
    2023-06-30
  • MyBatis如何使用PageHelper实现分页查询
    目录使用PageHelper实现分页查询1、创建数据表2、创建项目2.1 创建实体类(Entity层)2.2 数据库映射层(Mapper层)3、运行测试MyBatis PageHel...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作