Mybatis动态sql和分页

1.mybatis动态sql

(1) if
(2) trim 
(3)foreach
(4)其他
(5)choose/set/where

2.模糊查询(3种方式)
2.1 参数中直接加入%%
2.2 使用${…}代替#{…}(不建议使用该方式,有SQL注入风险)

关键:#{…}与KaTeX parse error: Expected 'EOF', got '#' at position 21: …区别? 参数类型为字符串,#̲会在前后加单引号['],则直接插入值
注:

  1. mybatis中使用OGNL表达式传递参数
  2. 优先使用#{…}
  3. ${…}方式存在SQL注入风险

2.3 SQL字符串拼接CONCAT

3.查询返回结果集

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

3.1 使用resultMap返回自定义类型集合

3.2 使用resultType返回List

3.3 使用resultType返回单个对象

3.4 使用resultType返回List,适用于多表查询返回结果集

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,而非List,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;)
    <![CDATA[ <= ]]> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

--x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值