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

 更新时间:2022年03月11日 09:48:32   作者:black小黑黑  
这篇文章主要介绍了使用Mybatis如何实现多个控制条件查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

实现多个控制条件查询

扩展知识

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot异常处理之异常显示的页面问题

    SpringBoot异常处理之异常显示的页面问题

    这篇文章主要介绍了SpringBoot异常处理异常显示的页面的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 一文了解Java中record和lombok的使用对比

    一文了解Java中record和lombok的使用对比

    Java的 record 关键字是Java 14中引入的一个新的语义特性。Lombok 是一个Java库,可以自动生成一些已知的模式为Java字节码。本文我们将探讨各种使用情况,包括java record 的一些限制。对于每个例子,我们将看到Lombok如何派上用场,并比较这两种解决方案
    2022-07-07
  • Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

    Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

    MyBatis框架由Java的JDBC API进一步封装而来,在操作数据库方面效果拔群,接下来我们就一起来看看Java通过MyBatis框架对MySQL数据进行增删查改的基本方法:
    2016-06-06
  • java实现通用分页(后端)

    java实现通用分页(后端)

    这篇文章主要介绍了java实现通用分页(后端)方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java如何实现抽取json文件指定字段值

    java如何实现抽取json文件指定字段值

    这篇文章主要介绍了java如何实现抽取json文件指定字段值,具有很好的参考价值,希望对大家有所帮助。
    2022-06-06
  • SpringCloud微服务熔断器Hystrix使用详解

    SpringCloud微服务熔断器Hystrix使用详解

    这篇文章主要介绍了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一个组件,在整个生态中主要为我们提供服务隔离,服务熔断,服务降级功能,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • eclipse创建项目没有dynamic web的解决方法

    eclipse创建项目没有dynamic web的解决方法

    最近上课要用到eclipse,要用到Dynamic web project.但是我下载的版本上没有.接下来就带大家了解 eclipse创建项目没有dynamic web的解决方法,文中有非常详细的图文示例,需要的朋友可以参考下
    2021-06-06
  • scala 匿名函数案例详解

    scala 匿名函数案例详解

    Scala支持一级函数,函数可以用函数文字语法表达,即(x:Int)=> x + 1,该函数可以由一个叫作函数值的对象来表示,这篇文章主要介绍了scala 匿名函数详解,需要的朋友可以参考下
    2023-03-03
  • Springboot整合阿里巴巴SMS的实现示例

    Springboot整合阿里巴巴SMS的实现示例

    本文主要介绍了Springboot整合阿里巴巴SMS的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • SpringBoot设置首页(默认页)跳转功能的实现方案

    SpringBoot设置首页(默认页)跳转功能的实现方案

    这篇文章主要介绍了SpringBoot设置首页(默认页)跳转功能,本文通过两种方案,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论