动态sql和分页

1.mybatis动态sql

1.1 if

1.2 trim 

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

3.3 使用resultType返回单个对象

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

3.5 使用resultType返回Map,适用于多表查询返回单个结果集

4.分页查询

为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的

4.1 导入分页插件
   
     com.github.pagehelper
     pagehelper
     5.1.2
   

4.2 将pagehelper插件配置到mybatis中
   
   
   

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 page = (Page)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.特殊字符处理
>(>)
<(<)
&(&)
空格( )

作业:
1)choose、set、where标签的使用(写例子)
2)mybatis实现批量insert/update/delete(选做)
3)课堂代码3遍录屏
4)使用foreach标签遍历map集合 item是value index是key

你可能感兴趣的:(学习类)