IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mybatis编写动态SQL -> 正文阅读

[大数据]mybatis编写动态SQL

? ? ? Mybati的动态SQL在XML中支持的几种标签。

  • if
  • choose(when、otherswise)
  • trim(where、set)
  • foreach
  • bind
    数据准备
INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (1, 'admin', '123456', 'admin@mybatis.tk', '管理员', NULL, '2021-09-30 20:53:21');
INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (3, 'admin_test', '1234567', 'admin_test@qq.com', 'test1 info', 0x010203, '2021-10-01 12:27:37');
INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (6, 'test2', '12345672', 'test2@qq.com', 'test2 info', 0x010203, '2021-10-01 12:59:03');
INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (10, 'test1', '1234567', 'test111@qq.com', 'test1111 info', 0x010203, '2021-10-01 13:15:29');
INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (1001, 'test', '123456', 'test@mybatis.tk', '测试用户', NULL, '2021-09-30 20:54:03');

if用法

1.1 需求
根据输入的条件去检索用户信息:当输入用户名时,需要根据用户名进行模糊查询;当只输入邮箱的时,根据邮箱进行完全匹配;当同时输入用户名和邮箱的时候,用这两个条件去查询用户。
1.2 对应的文件的编写
接口的相关编写

    /**
     * 根据动态条件查询用户信息
     * @param sysUser
     * @return
     */
    public List<SysUser> selectByUser(SysUser sysUser);

对应的UserMapper.xml文件的编写

    <select id="selectByUser" resultType="com.wei.entity.SysUser">
        select id, user_name, user_password, user_email,user_info, head_img, create_time
        from sys_user
        where 1 = 1
        <if test="userName != null and userName != ''">
            and user_name like concat('%',#{userName},'%')
        </if>
        <if test="userEmail != null and userEmail != ''">
            and user_email = #{userEmail}
        </if>
    </select>

if标签无法实现if···else的逻辑,要想要实现对应的可以使用choose··when
choose用法
2.1 需求
??当id有值的时候,优先从id中取值,当没有id值的时候从username中取值,如果都没有,则返回空。
2.2对应的文件的编写

    /**
     * 根据用户id或用户名进行查询
     * @param sysUser
     * @return
     */
    public SysUser selectByIdOrUserName(SysUser sysUser);

对应的UserMapper.xml文件的编写

    <select id="selectByIdOrUserName" resultType="com.wei.entity.SysUser">
        select * from sys_user
        where 1 = 1
        <choose>
            <when test="id != null">
                and id =#{id}
            </when>
            <when test="userName != null and userName != ''">
                and user_name = #{userName}
            </when>
            <otherwise>
                and 1 = 2
            </otherwise>
        </choose>
    </select>

where、set、trim的用法
3.1 基本使用
??where标签的作用:如果改标签包含的元素有返回值,就插入一个where,如果where后面的字符串是以AND和OR开头的,则将他们剔除。
改写1.2对应的xml文件

    <select id="selectByUser1" resultType="com.wei.entity.SysUser">
        select id, user_name, user_password, user_email,user_info, head_img, create_time
        from sys_user
        <where>
            <if test="userName != null and userName != ''">
                and user_name like concat('%',#{userName},'%')
            </if>
            <if test="userEmail != null and userEmail != ''">
                and user_email = #{userEmail}
            </if>
        </where>
    </select>

??当if语句中的内容都没有值的时候,SQL语句中不会出现where。
foreach的使用
4.1使用场景
??用foreach实现in集合
4.2对应的文件的编写

    /**
     * 根据用户id集合进行查询
     * @param idList
     * @return
     */
    public List<SysUser> selectByIdList(List<Long> idList);

UserMapper.xml文件的编写

    <select id="selectByIdList" resultType="com.wei.entity.SysUser">
        select * from sys_user 
        where id in
        <foreach collection="list" open="(" close=")" separator=","
                 item="id" index="i">
            #{id}
        </foreach>
    </select>

4.3相关字段及其属性说明
foreach包含以下属性:

  • collection:必填,值为迭代循环的属性名
  • item:变量名,值为从迭代对象取出的每一个值
  • index:索引的属性名
  • open:整个循环内容开头的字符串
  • close:整个循环内容结尾的字符串
  • separator:每次循环的分割符
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:33:20  更:2021-10-20 12:34:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:51:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码