mybatis动态sql和分页

    科技2025-08-24  37

    目录

    1.mybatis动态sql2.模糊查询(3种方式)3.查询返回结果集4.分页查询

    1.mybatis动态sql

    1.1 if 1.2 trim 1.3 foreach(遍历集合,批量查询、通常用于in关键字) 1.4 choose/set/where

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

    2.1 参数中直接加入%% 2.2 使用KaTeX parse error: Expected 'EOF', got '#' at position 8: {...}代替#̲{...}(不建议使用该方式,…{…}区别? 参数类型为字符串,#会在前后加单引号[’],$则直接插入值

    注: 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取结果),在大数据量的情况下这样的分页基本上是没有用的

    struts拦截器 定义一个拦截器类 invoke sysout(“action方法被调用前执行的功能”) method.invoke sysout(“action方法被调用后执行的功能”)

    struts-sy.xml 将拦截器的类申明到interceptors 引用拦截器

    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以后的版本支持自动识别使用的数据库 --> <plugininterceptor="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[ <= ]]>
    Processed: 0.012, SQL: 8