广告
返回顶部
首页 > 资讯 > 精选 >mybatis中的动态sql问题怎么解决
  • 837
分享到

mybatis中的动态sql问题怎么解决

2023-07-05 07:07:34 837人浏览 安东尼
摘要

本篇内容主要讲解“mybatis中的动态sql问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis中的动态sql问题怎么解决”吧!Mybatis框架的动态SQL技术是一种根据

本篇内容主要讲解“mybatis中的动态sql问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis中的动态sql问题怎么解决”吧!

    Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是通过标签解决拼接SQL语句字符串时的问题

    1、if(常用)

    if:根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中

        List<Emp> getEmpByCondition(Emp emp);

    当empName为null和“ ”时,会拼接and age,此时会报错,可以1=1恒成立解决。

    • 用and表示&&(并且)

    • emp_name是字段名

    • if只有test标签且必须使用

    <!--List<Emp> getEmpListByMoreTJ(Emp emp);-->    <select id="getEmpListByMoreTJ" resultType="Emp">select * from t_emp where 1=1<if test="empName!= '' and empName!= null">    and emp_name = #{empName}</if><if test="age != '' and age != null">    and age = #{age}</if><if test="sex != '' and sex != null">    and sex = #{sex}</if></select>
    @Test    public void testGetEmpByCondition(){        SqlSession sqlSession = SqlSessionUtils.getSqlSession();        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);        List<Emp> list = mapper.getEmpByCondition(new Emp(null, "陈智", 33, "女", null));        System.out.println(list);    }
    select eid,emp_name,age,sex,email from t_emp where emp_name = ? and age = ? or sex = ?

    2、where

    当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and或or去掉(在程序执行后生成的sql会将内容前多余的and或or去掉)

    and写在第二句是为了和上面拼接,写在第一句是和下面拼接(即固定有elect * from t_emp emp_name= ?)

    <select id="getEmpListByMoreTJ2" resultType="Emp">    select * from t_emp<where><if test="empName != '' and empName != null">    emp_name = #{empName }</if><if test="age != '' and age != null">    and age = #{age}</if><if test="sex != '' and sex != null">    and sex = #{sex}</if></where></select>

    当where标签中没有内容时(或者使用getEmpByCondition传入的值全为null或“ ”),此时where标签没有任何效果。则直接SQL语句为select * from t_emp

    --------------------分割--------------------

    where标签不能将其中内容后面多余的and或or去掉:(会报错)

    语句为select * from t_emp emp_name= ? and

    <select id="getEmpListByMoreTJ2" resultType="Emp">    select * from t_emp<where><if test="empName != '' and empName != null">    emp_name = #{empName } and</if><if test="age != '' and age != null">    age = #{age} and</if><if test="sex != '' and sex != null">    sex = #{sex}</if></where></select>

    3、trim

    where的增强

    若标签中有内容时:

    • prefix|suffix:将trim标签中内容前面或后面添加指定内容

    • suffixOverrides|prefixOverrides:将trim标签中内容前面或后面去掉指定内容

    若标签中没有内容时,trim标签也没有任何效果(跟上面的where一样)

    <!--List<Emp> getEmpByCondition(Emp emp);-->    <select id="getEmpByCondition" resultType="Emp">        select <include refid="empColumns"></include> from t_emp        <trim prefix="where" suffixOverrides="and|or">            <if test="empName != null and empName != ''">                emp_name = #{empName} and            </if>            <if test="age != null and age != ''">                age = #{age} or            </if>            <if test="sex != null and sex != ''">                sex = #{sex} and            </if>            <if test="email != null and email != ''">                email = #{email}            </if>        </trim>    </select>

    4.choose、when、otherwise

    相当于if...else if...else

        List<Emp> getEmpByChoose(Emp emp);

    when至少要有一个,otherwise最多只能有一个

    与第一点if的区别:choose只会满足一个条件便退出,一个不满足则执行otherwise

    <!--List<Emp> getEmpByChoose(Emp emp);-->    <select id="getEmpByChoose" resultType="Emp">        select * from t_emp        <where>            <choose>                <when test="empName != null and empName != ''">                    emp_name = #{empName}                </when>                <when test="age != null and age != ''">                    age = #{age}                </when>                <when test="sex != null and sex != ''">                    sex = #{sex}                </when>                <when test="email != null and email != ''">                    email = #{email}                </when>                <otherwise>                    did = 1                </otherwise>            </choose>        </where>    </select>
    @Test    public void testGetEmpByChoose(){        SqlSession sqlSession = SqlSessionUtils.getSqlSession();        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);        List<Emp> list = mapper.getEmpByChoose(new Emp(null, "", null, "", ""));        System.out.println(list);    }

    mybatis中的动态sql问题怎么解决

    5、foreach

    • collection:设置需要循环的数组集合

    • item:表示数组或集合中的每一个数据

    • separator:循环体之间的分割符

    • open:foreach标签所循环的所有内容的开始符

    • close:foreach标签所循环的所有内容的结束符

    5.1批量删除

        int deleteMoreByArray(@Param("eids") Integer[] eids);
    <!--int deleteMoreByArray(@Param("eids") Integer[] eids);-->    <delete id="deleteMoreByArray">        delete from t_emp where        <foreach collection="eids" item="eid" separator="or">            eid = #{eid}        </foreach>        <!--            delete from t_emp where eid in            <foreach collection="eids" item="eid" separator="," open="(" close=")">                #{eid}            </foreach>        -->    </delete>
    @Test    public void testDeleteMoreByArray(){        SqlSession sqlSession = SqlSessionUtils.getSqlSession();        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);        int result = mapper.deleteMoreByArray(new Integer[]{12,13,14,15});        System.out.println(result);    }

    mybatis中的动态sql问题怎么解决

    5.2批量添加

        int insertMoreByList(@Param("emps") List<Emp> emps);
    <!--int insertMoreByList(@Param("emps") List<Emp> emps);-->    <insert id="insertMoreByList">        insert into t_emp values        <foreach collection="emps" item="emp" separator=",">            (null,#{emp.empName},#{emp.age},#{emp.sex},#{emp.email},null)        </foreach>    </insert>

    Arrays.asList该方法是将数组转化成List集合的方法 

    如果你的List只是用来遍历,就用Arrays.asList()。

    如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。

    @Test    public void testInsertMoreByList(){        SqlSession sqlSession = SqlSessionUtils.getSqlSession();        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);        Emp emp1 = new Emp(null,"a1",23,"男","123@qq.com");        Emp emp2 = new Emp(null,"a2",23,"男","123@qq.com");        Emp emp3 = new Emp(null,"a3",23,"男","123@qq.com");        List<Emp> emps = Arrays.asList(emp1, emp2, emp3);        System.out.println(mapper.insertMoreByList(emps));    }

    6、sql标签

    设置SQL片段:<sql id="empColumns">eid,emp_name,age,sex,email</sql>

    引用SQL片段:<include refid="empColumns"></include>

    mybatis中的动态sql问题怎么解决

    到此,相信大家对“mybatis中的动态sql问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: mybatis中的动态sql问题怎么解决

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

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

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

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

    下载Word文档
    猜你喜欢
    • mybatis中的动态sql问题怎么解决
      本篇内容主要讲解“mybatis中的动态sql问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis中的动态sql问题怎么解决”吧!Mybatis框架的动态SQL技术是一种根据...
      99+
      2023-07-05
    • MyBatis怎么解决Update动态SQL逗号的问题
      这篇文章主要介绍“MyBatis怎么解决Update动态SQL逗号的问题”,在日常操作中,相信很多人在MyBatis怎么解决Update动态SQL逗号的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyB...
      99+
      2023-06-28
    • MyBatis解决Update动态SQL逗号的问题
      目录Update动态SQL逗号问题解决办法Mapper(Update)逗号位置Update动态SQL逗号问题 最做项目遇到以下情况,MyBatis中需要动态拼接Update,由于之前...
      99+
      2022-11-13
    • mybatis中的动态sql问题
      目录1、if(常用)2、where3、trim4.choose、when、otherwise5、foreach5.1批量删除5.2批量添加6、sql标签总结Mybatis框...
      99+
      2023-02-27
      mybatis动态sql 动态sql mybatis sql
    • MyBatis注解实现动态SQL问题
      目录MyBatis注解实现动态SQLMyBatis动态拼接 SQL参数最后补充几个知识点总结MyBatis注解实现动态SQL 在 Mybatis 中,使用注解可以很方便的进行sql操...
      99+
      2023-02-07
      MyBatis注解 MyBatis注解实现动态SQL MyBatis动态SQL
    • Mybatis的sql注释问题怎么解决
      这篇文章主要介绍“Mybatis的sql注释问题怎么解决”,在日常操作中,相信很多人在Mybatis的sql注释问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mybatis的sql注释问题怎么解决...
      99+
      2023-07-02
    • mybatis使用${}时sql注入的问题怎么解决
      这篇文章给大家介绍mybatis使用${}时sql注入的问题怎么解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mybatis使用${}时sql注入的问题最近在上线项目的时候,代码审查没有通过,提示有sql注入的风险...
      99+
      2023-06-22
    • mybatis-plus的sql语句打印问题怎么解决
      本篇内容介绍了“mybatis-plus的sql语句打印问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种方式:mybatis...
      99+
      2023-06-30
    • Mybatis拦截器打印sql问题怎么解决
      本篇内容介绍了“Mybatis拦截器打印sql问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.log4j2配置修改关闭log4...
      99+
      2023-07-05
    • 解析Mybatis Porxy动态代理和sql解析替换问题
      目录JDK常用核心原理概述过程详解JDK动态代理sql语句解析替换JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Myba...
      99+
      2022-11-12
    • MyBatis中怎么实现动态SQL!
      这篇文章将为大家详细讲解有关MyBatis中怎么实现动态SQL!,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、if标签if是最常用标签,经常用在判断语句...
      99+
      2022-10-18
    • Mybatis对sql表的一对多查询问题怎么解决
      这篇“Mybatis对sql表的一对多查询问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis对sql表...
      99+
      2023-07-02
    • 怎么分析mybatis的动态SQL
      这期内容当中小编将会给大家带来有关怎么分析mybatis的动态SQL,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、动态SQL:if 语句根据 username 和 sex 来查询数据。如果userna...
      99+
      2023-06-28
    • mybatisplus @Select注解中拼写动态sql异常问题的解决
      目录mybatisplus @Select注解中拼写动态sql异常出现原因解决方案在注解上使用动态SQL(@select使用if)用script标签包围用Provider去...
      99+
      2022-11-12
    • Mybatis中xml的动态sql怎么实现
      这篇文章主要介绍“Mybatis中xml的动态sql怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中xml的动态sql怎么实现”文章能帮助大家解决问题。动态SQL简介动态 SQ...
      99+
      2023-07-02
    • Mybatis中的动态SQL语句解析
      这篇文章主要介绍了Mybatis中的动态SQL语句解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下   Mybatis中配置SQL有两种方式,一种是利用...
      99+
      2022-10-18
    • Mybatis怎么解决sql中like通配符模糊匹配问题
      小编给大家分享一下Mybatis怎么解决sql中like通配符模糊匹配问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!sql中like通配符模糊匹配问题针对or...
      99+
      2023-06-26
    • SpringBoot中的Mybatis依赖问题怎么解决
      本篇内容主要讲解“SpringBoot中的Mybatis依赖问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中的Mybatis依赖问题怎么解决”吧!Pom导入依赖&...
      99+
      2023-06-30
    • 怎么解决mybatis中的mapper命名问题
      这篇文章主要介绍了怎么解决mybatis中的mapper命名问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mybatis mapper命名问题mapper文件中id命名最...
      99+
      2023-06-15
    • Mybatis在注解上怎么实现动态SQL
      本文小编为大家详细介绍“Mybatis在注解上怎么实现动态SQL”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis在注解上怎么实现动态SQL”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在注解上实现动...
      99+
      2023-07-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作