mybatis动态sql和分页

本文深入探讨MyBatis框架的高级特性,包括动态SQL、模糊查询的不同实现方式、查询结果集的处理方法、分页查询优化及特殊字符处理技巧等。通过具体示例解析这些特性如何帮助开发者更高效地操作数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.mybatis动态sql

    1.1 if 

    1.2 trim   mybatis中trim是动态拼接;java中表示去除前后空格
   
     prefix:前缀
     suffix:后缀
     suffixOverride:去除后缀指定的字符
     prefixOverrides:去除前缀指定的字符

    1.3 foreach

                 ①

                ②

               ③ 

                    
  
    1.4 其他

       choose/set/where

                 

2.模糊查询(3种方式)


 
    2.1 参数中直接加入%%

    2.2 使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)
       
          关键:#{...}与${...}区别?
          参数类型为字符串,#会在前后加单引号['],$则直接插入值

          注:
          1) mybatis中使用OGNL表达式传递参数
          2) 优先使用#{...}

                      

                上面这种方法需要在传值的时候拼上%%

                
          3) ${...}方式存在SQL注入风险

         

                   上面这种方法不需要在传值的时候拼上%%

      

    2.3 SQL字符串拼接CONCAT(这个也不需要在传值的时候拼上%%)

               

3.查询返回结果集

    resultMap:适合使用返回值是自定义实体类的情况

    resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型 

    3.1 使用resultMap返回自定义类型集合
    3.2 使用resultType返回List<T>                                                                                                          3.3 使用resultType返回单个对象                                                                                                        3.4 使用resultType返回List<Map>,适用于多表查询返回结果集                                                      3.5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集

4.分页查询

   为什么要重写mybatis的分页?
   Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
   
    4.1 导入分页插件
       <dependency>
         <groupId>com.github.pagehelper</groupId>
         <artifactId>pagehelper</artifactId>
         <version>5.1.2</version>
       </dependency>

    4.2 将pagehelper插件配置到mybatis中
       <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
       <plugin interceptor="com.github.pagehelper.PageInterceptor">
       </plugin>

    4.3 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页
       //设置分页处理
       if (null != pageBean && pageBean.isPaginate()) {
         PageHelper.startPage(pageBean.getCurPage(), pageBean.getPageRecord());
       }
       
    4.4 获取分页信息(二种方式)
      
     4.4.1 使用插件后,查询实际返回的是Page<E>,而非List<E>,Page继承了ArrayList,同时还包含分页相关的信息
          Page<Book> page = (Page<Book>)list;
          System.out.println("页码:" + page.getPageNum());
          System.out.println("页大小:" + page.getPageSize());
          System.out.println("总记录:" + page.getTotal());
     4.4.2 使用PageInfo
          PageInfo pageInfo = new PageInfo(list);
          System.out.println("页码:" + pageInfo.getPageNum());
          System.out.println("页大小:" + pageInfo.getPageSize());
          System.out.println("总记录:" + pageInfo.getTotal());

                   

 5.特殊字符处理
    >(&gt;)   
    <(&lt;)  
    &(&amp;) 
 空格(&nbsp;)

错误方法:

错误方法会报的错:

 

正确方法:

执行代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值