zoukankan      html  css  js  c++  java
  • MyBatis的动态sql语句

    注意:这里的数据库中的表仍然使用的是前面的user表
    前面我们提到的都是固定的sql语句 并且业务功能比较单一 比如通过id查询用户 通过姓名来查询用户等等 但是我们这里没有去考虑到业务比较复杂的情况 例如当用户名不为空的时候 我们根据用户名进行查询
    但是 当地址不为空的时候 我们还要加上地址进行进一步的判断 所以这里是根据条件来进行动态的查询
    前面的步骤还是相同
    1、在iuserdao接口中添加相应的方法
    List findByUser(User user);
    2、在iuserdao.xml中进行相应的配置

    if标签中写的是对象的属性名 我们可以对其进行一个条件的判断 这里的意思是如果username不为空的情况下 那么我们肯定是根据username来进行查询 并且这里如果address不为空的情况下 我们还需要拼接上address的条件 当然
    如果两者都为空的情况下 我们肯定是查询所有的用户
    3、编写相应的测试类
    测试1:

    当username和address都不为空的情况下,测试结果
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}
    测试2:注释掉其中一行

    测试结果:

    同理 如果我们注释掉两个条件 那么肯定是查询所有的用户
    当然这里我们还得注意一点 因为在配置中我们没有指定模糊查询的条件 所以我们需要在测试中进行体现

    这里我们为了简化拼接的配置 我们可以采取第二种标签where
    1、持久层的接口仍然是刚才的方法
    2、iuserdao中的配置可以修改为以下的形式

    3、编写测试类

    测试结果:
    User{id=41, username='老王', sex='男', birthday=Tue Feb 27 17:47:08 CST 2018, address='北京'}
    User{id=43, username='小王', sex='女', birthday=Sun Mar 04 11:34:34 CST 2018, address='深圳'}
    User{id=45, username='二王', sex='男', birthday=Sun Mar 04 12:04:06 CST 2018, address='南京'}
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}
    和上面的形式是等价的

    需求:查询id取多个值中的某一个的时候的用户信息
    进行范围查询的时候 就要将集合中的值 作为参数动态的添加进来
    在查询条件对象中添加一个集合用于封装参数
    private List ids;
    并且生成setter和getter方法

    在持久层也就是userdao接口中添加相应的方法
    List findInIds(QueryVo vo);

    映射文件中配置相应的信息

    foreach标签用于遍历集合 属性的介绍
    collection:代表要遍历的集合元素
    open语句的开始的部分
    close代表结束的部分
    item代表遍历集合的每个元素 生成的变量名
    separator代表分隔符
    测试类:

    测试结果:
    User{id=41, username='老王', sex='男', birthday=Tue Feb 27 17:47:08 CST 2018, address='北京'}
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}

  • 相关阅读:
    2021年中国DevOps现状调查报告发布!
    带你看清梦饷集团如何成为上海在线新经济四小龙
    AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR
    云图说 | 华为云医疗智能体,智联大健康,AI药物研发
    带你走进“华为链”
    初学者入门知识图谱必看的能力:推理
    带你探索CPU调度的奥秘
    鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求
    FLINK基础(137):DS流与表转换(3) Handling of (Insert-Only) Streams(2)fromDataStream(FLINK1.13以上)
    FLINK基础(136):DS流与表转换(2) Handling of (Insert-Only) Streams(1)简介(FLINK1.13以上)
  • 原文地址:https://www.cnblogs.com/phantom576/p/11954127.html
Copyright © 2011-2022 走看看