• 动态SQL+分页


    动态SQL是MyBatis的一个强大的特性

    动态SQL基于OGNL的表达式,可以使用动态SQL完成多条件查询等逻辑实现

    MyBatis通过标签的配合使用,可实现如下功能

    语句的动态拼接

    前后缀格式处理

    复杂参数处理

    常用标签

    if:利用if实现简单的条件选择

    where:简化SQL语句中where的条件判断

    choose(when、otherwise):相当于java中的switch语句,通常与when和otherwise搭配

    foreach:迭代一个集合,通常用于in条件

    set:解决动态更新语句

    trim:可以灵活地去除多余的关键字

    if标签

    查询出角色id值为2且用户姓名包含"赵"的用户信息

    测试方法传入角色id参数为null的时候,为什么检索结果为空?

    原因

    如何解决?

    if标签;动态SQL技术中最常用的标签之一,类似于Java中的if语句

    语法

     示例

    Dao接口
    
        //根据用户名称和角色查询用户列表,用户名实现模糊查询  参数是基础数据类型
    
        //实现多条件查询  条件用户名和角色是可选的
    
        List getUserListByNameAndRole1(@Param("xm") String name, @Param("js") Integer role);
    
    1. Dao接口映射文件
    2. <!--根据用户名称和角色查询用户列表,用户名实现模糊查询 参数是基础数据类型 条件可选-->
    3. <select id="getUserListByNameAndRole1" resultType="user">
    4. SELECT * FROM smbms_user WHERE 1=1 /*1=1是为了防止 后面没有条件 那么where关键字就成多余的了*/
    5. <if test="xm!=null and xm!=''">
    6. AND userName LIKE CONCAT ('%',#{xm},'%')
    7. </if>
    8. <if test="js!=null">
    9. AND userRole=#{js}
    10. </if>
    11. </select>
    1. 测试类
    2. @Test
    3. public void getUserListByNameAndRole1Test(){
    4. SqlSession sqlSession=null;
    5. try {
    6. //创建SqlSession实例
    7. sqlSession= MybatisUtil.createSqlSession();
    8. //创建UserMapper接口实例,调用其方法执行相关的SQL语句
    9. List<User> list = sqlSession.getMapper(UserMapper.class).getUserListByNameAndRole1("赵",null);
    10. for (User user:list){
    11. log.info("编码:" + user.getUserCode()+"\t用户名:"+user.getUserName()+"\t角色:"+user.getUserRole());
    12. }
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. }finally {
    16. MybatisUtil.closeSqlSession(sqlSession);
    17. }
    18. }

    where标签(if+where)

    根据上面的示例,如果1=1不写;当所有的条件为null或者是有条件时,控制台汇报SQL异常错误

    原因是

    如何解决?

    where标签:它自动识别其标签内是否有返回值,若有,就插入一个where。

    若该标签返回的内容是以and或or开头,会自动删除

    语法

    示例

    1. Dao接口映射文件
    2. <!--根据用户名称和角色查询用户列表,用户名实现模糊查询 参数是基础数据类型 条件可选-->
    3. <select id="getUserListByNameAndRole1" resultType="user">
    4. SELECT * FROM smbms_user
    5. <where>
    6. <if test="xm!=null and xm!=''">
    7. AND userName LIKE CONCAT ('%',#{xm},'%')
    8. </if>
    9. <if test="js!=null">
    10. AND userRole=#{js}
    11. </if>
    12. </where>
    13. </select>
  • 相关阅读:
    flask-cache使用报错Python3 ModuleNotFoundError: No module named ‘werkzeug.contrib‘
    为什么索引要用B+树来实现呢,而不是B树
    【其他专题】好用的截图(包括动图gif)软件分享
    vscode离线安装插件
    Testing Library - About Queries
    DB2数据库SQL语法参考手册
    Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?
    如何查看 class 文件的编译器版本
    解决npm install 安装报错记录贴
    蓝牙运动耳机哪个好、六款最热门的运动耳机推荐
  • 原文地址:https://blog.csdn.net/weixin_47541976/article/details/126864410