2108-04动态sql

mybatis的集合操作

知识点:如果遇到集合参数传递,需要将集合遍历

标签:foreach循环遍历集合

标签属性说明:1.collection表示遍历的集合类型:1.1数组 关键字array 1.2list集合 关键字list

1.3 Map集合 关键字Map中的key

2.open 循环开始标签 close 循环结束标签 包裹循环体

3.separator 分隔符

4.item 当前循环遍历的数据的变量

动态sql

2.1动态sql-where-if

核心思想:自动判断是否为null,如为null,则字段不参与sql,例如xml中sql语句中有where id = # {id},如此时前端传过来的值为null,如果不加判断,怎会出现id=null,id怎么可以出现等于null的情况呢,所以需要进行判断

动态sql规则:

1.<if test = "写判断条件,可以直接获取属性值"><if/>

其中true表示:会拼接 字段条件 false表示:不会拼接字段条件

2.多余的关键字 由于动态sql拼接必然会导致多余的and 或者 or

3.where标签说明 可以去除 where后边多余的and 或者 or

<select id="findUser3" resultType="User">
        select <include refid="user_cloumn" /> from demo_user
            <where>
                <if test="name != null and name != ''">
                    and name=#{name}
                </if>
                <if test="age != null">
                    and age = #{age}
                </if>
            </where>
    </select>

2.2.动态sql-set-if

set标签用法:去除set条件中多余的,号,如要实现用户数据修改,但是要根据前端传的值不为null时可以set

 <update id="updateSqlSet">
        update demo_user
            <set>
                <if test="name !=null"> name=#{name}, </if>
                <if test="age !=null">  age = #{age}, </if>
                <if test="sex !=null">  sex = #{sex} </if>
            </set>
            where id = #{id}
    </update>

2.3动态sql-分支结构语法

在查询等操作下,如果一个属性的值不满足,则使用另一个属性,这时候在sql语句中就需要使用if-else或者if-else if -else

实例:如果name有值,按照name查询,否则按照年龄查询,如果name,age都没有,按照sex查询

select <include refid="user_cloumn"/> from demo_user
        <where>
            <choose>
                <when test="id != null">
                    id = #{id}
                </when>
                <when test="name != null and name != ''">
                    name = #{name}
                </when>
                <when test="age != null">
                    age = #{age}
                </when>
                <otherwise>
                    sex=#{sex}
                </otherwise>
            </choose>
        </where>

resultType和resultMap的区别

resultType:要求:对象的属性名称和表中的字段一一对应

例如:对象User(id,name,age,sex)   表:demo_user(dog_id,dog_name,dog_age,dog_sex)

总结:resultType适合单标映射,并且属性名称一致

resulltMap:如果发现表中的字段和属性名称不一致时,使用resultMap映射

注意:resultMap中如果映射包括表中的主键字段,那么在resultMap标签中要使用<id propery="" column></resultMap>标签来映射主键,其他非主键的映射则用<result....你懂得.....></result>

对象:Dog(dogId,dogName)  表:dog(dog_id,dog_name) 属性不匹配,所以映射失败

注解开发

注解使用规则:1.注解标识接口方法,接口方法调用,直接注解的内容

2.注解将查询的结果集,根据方法的返回值类型动态映射

使用注解开发时mybatis需要管理mapper的接口

<mappers>
        <!-- 使用注解时 mybatis需要管理mapper的接口 -->
        <mapper class="com.jt.mapper.UserAnnoMapper"></mapper>
    </mappers>

开发注意事项:1.注解开发,只适用于单标CURD操作,多表操作一定会出现问题

2.如果涉及到复杂标签时 ,where/set/foreach等标签时,不可以使用注解

3.所以应该熟练掌握xml映射文件的写法,注解开发只是辅助的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-plus是在Mybatis基础上进行封装的一个框架,它简化了平时开发过程中对常用接口的调用,可以省去一些繁琐的操作。然而,对于一些更为复杂的查询,Mybatis-plus可能无法满足需求,此时就需要我们自定义SQL语句来实现。通过在入口类的MybatisSqlSessionFactoryBuilder#build方法中注入mybatis-plus自定义的动态配置xml文件,可以实现自定义SQL语句和动态SQL的功能。具体的实现步骤如下: 1. 在应用启动时,在入口类的MybatisSqlSessionFactoryBuilder#build方法中将mybatis-plus的自定义动态配置xml文件注入到Mybatis中。 2. 在自定义的动态配置xml文件中,可以使用各种Mybatis-plus提供的方法来实现动态SQL的功能,比如IF标签、CHOOSE标签、FOREACH标签等。 3. 在自定义SQL语句中,可以结合Mybatis-plus的Wrapper类来实现条件查询,例如使用LambdaQueryWrapper来构建查询条件。 总结起来,Mybatis-plus提供了简化开发的接口,但对于一些更为复杂的查询,仍然需要我们自定义SQL语句和动态SQL来实现。通过注入自定义的动态配置xml文件,并结合Mybatis-plus提供的方法和Wrapper类,可以实现更加灵活和高效的数据查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mybatis-plus/mybatis 自定义 sql 语句、动态 sql](https://blog.csdn.net/CREATE_17/article/details/109117091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mybatis Plus实现动态SQL语句的原理,你知道吗?](https://blog.csdn.net/weixin_38405253/article/details/119880820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值