博客
关于我
小书MybatisPlus第3篇-自定义SQL
阅读量:480 次
发布时间:2019-03-06

本文共 2141 字,大约阅读时间需要 7 分钟。

本文档为一个系列,前面章节:

书接上回,虽然Mybatis Plus帮我们提供了大量的默认方法,但我们为了实现多表关联查询,或者根据不同的查询条件传参,实现不同的动态SQL。在这种情况下我们还是需要自定义SQL,不管怎样我们需要首先通过配置指定Mapper.xml文件的存储位置。

mybatis-plus:  mapper-locations: classpath*:/mapper/*Mapper.xml

1、原始的自定义SQL方法

笔者认为:将多表关联查询或动态SQL写在XML文件里面进行维护,大多数场景下仍然是Mybatis最佳实践。单表的增删改查使用Mybatis Plus或者mybatis generator生成代码,是最佳实践。

  • UserMapper 接口放在@MapperScan配置的扫描路径下面。这种方法是Mybatis 为我们提供的,在Mybatis Plus里面仍然可以继续使用,丝毫不耽误!
  • 使用最原始的Mybatis SQL定义方式,在集成BaseMapper的基础上(mybatis plus),新定义一个接口方法findUser。
public interface UserMapper extends BaseMapper
{ List
findUser(@Param("name") String name, @Param("email") String email);}

新定义一个UserMapper.xml,放在mybatis-plus.mapper-locations配置路径下面。下面的动态SQL表示:

  • 当参数name不为null或空串的时候,AND name = #{name}条件生效
  • 当参数email不为null或空串的时候,AND email = #{email}条件生效

使用测试

@Testpublic void testCustomSQL1() {  String name = "字母";  //name不为空  String email = "";   //email为空串  List
list = userMapper.findUser(name,email); list.forEach(System.out::println);}

最终执行的SQL为(因为email为空串,所以对应的查询条件在动态SQL中未被构建):

SELECT id,name,age,email FROM user WHERE name = ?

2、自定义接口方法使用Wrapper条件构造器

如果我们想在自定义的方法中,使用Wrapper条件构造器。可以参考下面的方式实现。这种方式虽然简单,但仍然只适用于单表(可以是多表关联查询,但查询条件也是基于单表的)。

  • 使用注解方式 + Wrapper , ${ew.customSqlSegment}是一个查询条件占位符,代表Wapper查询条件。
@Select("select * from `user` ${ew.customSqlSegment}")List
selectAll(@Param(Constants.WRAPPER) Wrapper wrapper);
  • 使用xml 配置方式 + Wrapper
List
selectAll(@Param(Constants.WRAPPER) Wrapper wrapper);

通过Wapper传递查询参数

上面两种方式任意选择一种,参数都是Wrapper

@Testpublic void testCustomSQL2() {  LambdaQueryWrapper
query = new LambdaQueryWrapper<>(); query.eq(User::getName, "字母"); List
list = userMapper.selectAll(query); list.forEach(System.out::println);}

最终执行的SQL为(和上文原始的XML动态SQL实现效果一致,但是查询条件的构造是针对单表的):

SELECT id,name,age,email FROM user WHERE name = ?

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字):。

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

你可能感兴趣的文章
Network Sniffer and Connection Analyzer
查看>>
Network 灰鸽宝典【目录】
查看>>
Networkx写入Shape文件
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
network小学习
查看>>
Netwox网络工具使用详解
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
查看>>
neuroph轻量级神经网络框架
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>
NEW DATE()之参数传递
查看>>
New Relic——手机应用app开发达人的福利立即就到啦!
查看>>
new 一个button 然后dispose,最后这个button是null吗???
查看>>
next项目部署到服务器pm2进程守护
查看>>
nexus上传jar
查看>>
Nexus指南中的更新强调集成和透明度的重要性
查看>>