Mybatis的动态sql和分页

本文介绍了Mybatis的动态SQL,如trim标签的使用,包括prefix、suffix、suffixOverride和prefixOverrides属性。同时讲解了foreach标签的示例,并提到了concat在MySQL中的应用。在查询返回结果集部分,讨论了resultMap与resultType的区别和适用场景。接着详细阐述了Mybatis的分页查询,包括PageHelper插件的配置和PageBean、PageInfo的使用。最后,提到了SQL中的特殊字符处理问题。

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

示例一:mybatis之if标签

 

添加lombok主键(在实体类定义@Builder)

 

  在这可以使用builder

  trim   mybatis中trim是动态拼接;java中表示去除前后空格

     prefix:前缀
     suffix:后缀
     suffixOverride:去除后缀指定的字符
     prefixOverrides:去除前缀指定的字符

 示例二:mybatis之foreach标签 

 

where:当bid有值时自动拼接一个where
choose:按顺序判断内部when标签中test条件是否成立,成立则choose结束,不成立则执行otherwise中的set:在修改语句中动态配置set关键字,并剔除追加到条件末尾的任何不相关逗号模糊查询(3种方式)

1)#{}:相当于占位符,参数传递时需要手动拼接%%,列如:"zs" -> #{} -> 'zs'

2)${}:使用$传递参数时,只会传递参数本身,列如:"zs"  ->  ${}  ->  zs
 

3)concat:mysql的函数

 

 1,使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)

        关键:#{...}与${...}区别?

                参数类型为字符串,#会在前后加单引号['],$则直接插入值

注:1) mybatis中使用OGNL表达式传递参数

       2) 优先使用#{...}

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

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.分页查询

步骤:

1, 导入分页插件

2,将pagehelper插件配置到mybatis.cfg.xml中

3,导入PageBean工具类

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.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、付费专栏及课程。

余额充值