一、MyBatisPlus介绍

MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MP区别于JPA,但是又达到了一部分JPA的使用姿势,只需要定义一个接口,就可以实现单表的增删改查。比MyBatis官方提供的代码生成工具效率更提升了很多倍,然后针对多表关联支持不够强大,对于动态条件的拼装,其实也只是把写SQL的工作转到了Java代码而已。
其实还有一种写法,可以做到多表关联,并且也不用根据传入条件,来一个个的构造Wrapper查询条件。

二、炫技代码分享

以下使用方式可能MP作者都没想到,MP还可以这么玩。

  • 多表关联
    MP虽然只支持单表关联,但是表名可以自定义,谁说表名就是一张表的名字了,表名可以是一张视图的名字,甚至是视图的定义。而夺标关联基本上的使用场景也在于关联查询,表与表之间的关系一般情况下是固定的(1对1,1对多,多对多),所以把这层关系抽象成一个视图或者视图的定义,那么查询完全就可以当成对一张表的操作了。
@Data
@TableName(value = "v_my_view")
public class MyView {private String field1OfTable1;private String field2OfTable2;
}
@Data
@TableName(value = "my_table1 t1 left join my_table2 t2 on t1.xx_id = t2.id ")
public class MyView {private String field1OfTable1;private String field2OfTable2;
}
  • 动态查询条件
    LambdaQueryWrapper对象的生成方法中,是可以传入一个Entity对象的,代表实体类中有设定值的字段会被当成Where条件拼到SQL里面。
public class MyDto {private String code;private String name;
}
// 执行SQL: select code, name from my_dto where code = '100';
MyDtoMapper.selectList(Wrappers.<MyDto>lambdaQuery(new MyDto().setCode("100"));

默认的比较条件是 “=”, 如果是其他条件,可以通过@TableFieldcondition 属性指定,MP提供的条件有:

package com.baomidou.mybatisplus.annotation;/**
* SQL 比较条件常量定义类
*
* @author hubin
* @since 2018-01-05
*/
public class SqlCondition {/*** 等于*/public static final String EQUAL = "%s=#{%s}";/*** 不等于*/public static final String NOT_EQUAL = "%s&lt;&gt;#{%s}";/*** % 两边 %*/public static final String LIKE = "%s LIKE CONCAT('%%',#{%s},'%%')";/*** % 两边 % [oracle使用]*/public static final String ORACLE_LIKE = "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')";/*** % 左*/public static final String LIKE_LEFT = "%s LIKE CONCAT('%%',#{%s})";/*** 右 %*/public static final String LIKE_RIGHT = "%s LIKE CONCAT(#{%s},'%%')";
}

而我们可以自定义更多:

public interface SqlConditionX {/*** IN查询*/String IN = "true <foreach open=\"AND %s in (\" separator=\",\" close=\")\" collection=\"%s\" item=\"item\">#{item}</foreach>";/*** 小于*/String LT = "%s <![CDATA[<]]> #{%s}";/*** 小于等于*/String LE = "%s <![CDATA[<=]]> #{%s}";/*** 大于*/String GT = "%s <![CDATA[>]]> #{%s}";/*** 大于等于*/String GE = "%s <![CDATA[>=]]> #{%s}";
}

假设需要再传入一个按照code模糊查询的条件, 可以这么定义:

public class MyDto {private String code;private String name;@TableField(value = "code", select = false, condition = SqlCondition.LIKE)private String codeLike;@TableField(value = "code", select = false, condition = SqlConditionX.IN)private String[] codes;
}
// 执行SQL: select code, name from my_dto where code like '100';
MyDtoMapper.selectList(Wrappers.<MyDto>lambdaQuery(new MyDto().setCodeLike("100"));// 执行SQL: select code, name from my_dto where code in ('100', '200');
MyDtoMapper.selectList(Wrappers.<MyDto>lambdaQuery(new MyDto().setCodes({"100","200"}));

三、如何学习高级技术

学习一门新的技术,要把它的核心思想吃透,最终做到灵活运用。

MyBatisPlus炫技分享相关推荐

  1. 黑客少年手机编 10 万行代码,恶意篡改 App 只为了 “炫技”?

    作者 | 伍杏玲 出品 | 极客宝宝(geek_baby) 正所谓"善与恶是同一块钱币的正反两面",对于技术来说,如何使用技术的这把"双刃刀"便是技术人的&qu ...

  2. 分享Java代码中一些常见的炫技代码写法,请各位点赞、收藏

    以下是一些常见的例子.请记住,这些写法通常是为了展示技术的巧妙和灵活性,但并不一定适用于所有情况.在实际项目中,可读性和可维护性应始终是首要考虑因素. 流式操作(Stream API): List&l ...

  3. Python炫技操作:条件语句的七种写法

    作者 | 写代码的明哥 来源 | Python编程时光 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来越多)的高级特性,是 Python ...

  4. 云风:不加班、不炫技,把复杂的问题简单化

    小学时跟随母亲去成人大学学习编程,初中开始参加信息学奥赛,高中写出人生中第一个成熟软件--Cview,大学发布开源软件风魂系列,后用于网易开发的<大话西游><梦幻西游>等热门游 ...

  5. Python 炫技操作:条件语句的七种写法

    作者 | 写代码的明哥 责编 | 屠敏 来源 | Python编程时光 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来越多)的高级特性,是 ...

  6. 黑客为“炫技”随机攻击,结果被“顺着网线”抓了

    [福利:\[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享 !\]](https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw) &quo ...

  7. Python炫技操作:花式导包的八种方法

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 五岳寻仙不辞远,一身好入名山游. ...

  8. 探索编程的极限:挑战炫技代码

    程序员常常被视为具有超强技术能力的人才,而他们手中的代码也往往充满了令普通人惊叹的炫技操作.作为程序员的我,将和大家分享一些炫技的代码写法 一.编程语言介绍 本人主攻Java.下面我将介绍一下Java ...

  9. 《惢客创业日记》2021.05.09-10(周日)真正的高手不炫技

    今天上午,在家里继续写<惢客>书,今天的主要任务是整理惢客的市场定位资料,在这一章节中写了5000多字的内容,不是按顺序写的,有较多的碎片,需要把各个碎片内容条理化的整理起来.可是整理到1 ...

最新文章

  1. 解析时代需要什么样的根目录,中国科技需要什么样的根技术
  2. linux下的arm仿真,使用QEMU仿真ARM Linux系统
  3. 抓包mysql协议_Mysql 通信协议抓包分析
  4. C语言二维数组元素的多种表示方法小结
  5. 使用Amazon s3托管您的Maven工件
  6. [转载]Bluetooth协议栈学习之SDP
  7. 使用sql2005的新特性分页的储存过程:Top,Row_Number
  8. HTML5锚点请用id代替name
  9. linux 环境下安装 docker 精简步骤
  10. 编译NVIDIA之Video_Codec_SDK_9.1.23之Sample
  11. asp.net接受表单验证格式后再提交数据_药物临床试验数据管理与统计分析的计划和报告指导原则...
  12. 加息 75 个基点落地,市场短暂宣泄后前路依旧黯淡?
  13. 软件工程师考试(高级)大纲
  14. 瘦身长腿、日新小清新治愈系、lomo效果
  15. 光盘驱动器托盘被卡住属于计算机硬故障中的,光驱托盘不会打开?打开卡住CD DVD驱动器托盘的提示 | MOS86...
  16. Beta周王者荣耀交流协会第一次Scrum会议
  17. DDD的模式与实践案例
  18. [笔记]快乐的Linux命令行《二》文件系统中跳转
  19. 爬虫神级解析工具之XPath:用法详解及实战
  20. 物理服务器与云服务器备份相同吗?

热门文章

  1. JAVA 微信 rfc3339标准格式的时间转换
  2. 汽车参数配置介绍及购车指导
  3. MongoDB客户端工具NoSQL Manager for MongoDB介绍
  4. java 中FreeMaker的使用(excel、word),涉及解压缩
  5. 肾缺血再灌注动物模型 大小鼠肾缺血再灌注IR模型
  6. MC20模块有源天线电路图
  7. Java开发 - MybatisPlus框架初体验
  8. 【深度学习复习】重要知识点二
  9. [自用]Mount Blade II Bannerlord(骑砍2) dll简易修改代码位置
  10. 码流分析工具ffprobe.exe介绍