[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"cat-mybatis-plus":85,"catposts-mybatis-plus":97,"post-detail-post-mybaitsplus-join-query-0b894da6":484},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":89,"status":94,"postCount":96},{"name":87,"creationTimestamp":88},"mybatis-plus","2026-09-12T08:22:53.466780Z",{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},"MyBatis Plus 教程","\u002Fupload\u002Ftutorial-cover-mybatis-plus.png","MyBatis-Plus 从入门到实战：条件构造器、通用 CRUD、分页插件、代码生成与多租户。",false,{"permalink":95,"postCount":96,"visiblePostCount":96},"\u002Fcategories\u002Fmybatis-plus",18,[98,122,144,166,187,208,230,251,273,294,315,336,356,377,398,419,441,463],{"metadata":99,"spec":102,"status":113,"categories":117},{"name":100,"creationTimestamp":101},"post-mybatisplus-wrapper-condition-0f52be04","2026-09-12T08:30:08.659081Z",{"title":103,"slug":104,"cover":105,"excerpt":106,"publishTime":108,"categories":109,"tags":110,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus Condition 详解（结合代码示例）","mybatisplus-wrapper-condition","\u002Fupload\u002F167344247547271-zSIv.jpg",{"raw":107,"autoGenerate":93},"前面小节中，我们已经学习了 Mybatis Plus 中使用频率超高的条件构造器，应该有会注意到很多方法中，都有一个 boolean 类型的 condition 字段，如下面的截图，这玩意到底是干嘛用的呢...","2026-09-12T08:30:08.716991Z",[87],[],"PUBLIC",true,{"permalink":114,"excerpt":107,"lastModifyTime":115,"phase":116},"\u002Farchives\u002Fmybatisplus-wrapper-condition","2026-09-13T05:25:08.061777Z","PUBLISHED",[118],{"metadata":119,"spec":120,"status":121,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":123,"spec":126,"status":135,"categories":139},{"name":124,"creationTimestamp":125},"post-mybatisplus-quick-start-7438e7a7","2026-09-12T08:30:08.027221Z",{"title":127,"slug":128,"cover":129,"excerpt":130,"publishTime":132,"categories":133,"tags":134,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 快速开始","mybatisplus-quick-start","\u002Fupload\u002F164870371940555-tWiM.png",{"raw":131,"autoGenerate":93},"大家好，前面小节中，我们已经了解到什么是 Mybatis Plus， 以及和 Mybatis 的区别。本章节中，我们将上手学习如何使用它操作数据库...","2026-09-12T08:30:08.104840Z",[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":116},"\u002Farchives\u002Fmybatisplus-quick-start","前面小节中，我们已经了解到什么是 Mybatis Plus， 以及和 Mybatis 的区别。本章节中，我们将上手学习如何使用它操作数据库...","2026-09-13T05:25:08.633120Z",[140],{"metadata":141,"spec":142,"status":143,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":145,"spec":148,"status":157,"categories":161},{"name":146,"creationTimestamp":147},"post-mybatisplus-print-sql-6fd9382a","2026-09-12T08:30:07.357056Z",{"title":149,"slug":150,"cover":151,"excerpt":152,"publishTime":154,"categories":155,"tags":156,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 打印 SQL 语句（包含执行耗时）","mybatisplus-print-sql","\u002Fupload\u002F167091605638716-eGlp.jpg",{"raw":153,"autoGenerate":93},"大家好，项目中使用 Mybatis Plus 框架操作数据库时，如果是在本地开发（生产环境不推荐打印执行 SQL，会有数据泄漏风险），很希望完整的打印一下执行的 SQL，以及执行耗时，一方面可以方便调试，另一方面通过执行耗时，可以提醒我们改进一些慢 SQL...","2026-09-12T08:30:07.418896Z",[87],[],{"permalink":158,"excerpt":159,"lastModifyTime":160,"phase":116},"\u002Farchives\u002Fmybatisplus-print-sql","项目中使用 Mybatis Plus 框架操作数据库时，如果是在本地开发（生产环境不推荐打印执行 SQL，会有数据泄漏风险），很希望完整的打印一下执行的 SQL，以及执行耗时，一方面可以方便调试，另一方面通过执行耗时，可以提醒我们改进一些慢 SQL...","2026-09-13T05:25:11.894390Z",[162],{"metadata":163,"spec":164,"status":165,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":167,"spec":170,"status":179,"categories":182},{"name":168,"creationTimestamp":169},"post-mybatisplus-page-query-cf6b396c","2026-09-12T08:30:06.634372Z",{"title":171,"slug":172,"cover":173,"excerpt":174,"publishTime":176,"categories":177,"tags":178,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 分页查询数据（图解）","mybatisplus-page-query","\u002Fupload\u002F167246380737773-bixm.jpg",{"raw":175,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据。下图是我从京东上查询关键词「手机」 ，展示的手机数据就是分页查询，共有 91 页...","2026-09-12T08:30:06.704298Z",[87],[],{"permalink":180,"excerpt":175,"lastModifyTime":181,"phase":116},"\u002Farchives\u002Fmybatisplus-page-query","2026-09-13T05:25:14.891109Z",[183],{"metadata":184,"spec":185,"status":186,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":188,"spec":191,"status":200,"categories":203},{"name":189,"creationTimestamp":190},"post-mybatisplus-optimistic-lock-ad7ba0dc","2026-09-12T08:30:05.848176Z",{"title":192,"slug":193,"cover":194,"excerpt":195,"publishTime":197,"categories":198,"tags":199,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 乐观锁插件（手把手教学）","mybatisplus-optimistic-lock","\u002Fupload\u002F167333816060936-YNck.jpg",{"raw":196,"autoGenerate":93},"程序设计中，若遇到高并发场景，需要多线程修改共享资源的时候，为了保证数据的原子性，就需要频繁使用到锁。锁的类型也有很多，如互斥锁、自旋锁、读写锁、悲观锁、乐观锁等，因为本文主要内容是 Mybatis Plus 实现乐观锁功能，就不展开讲了...","2026-09-12T08:30:05.904951Z",[87],[],{"permalink":201,"excerpt":196,"lastModifyTime":202,"phase":116},"\u002Farchives\u002Fmybatisplus-optimistic-lock","2026-09-13T05:25:15.535552Z",[204],{"metadata":205,"spec":206,"status":207,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":209,"spec":212,"status":221,"categories":225},{"name":210,"creationTimestamp":211},"post-mybatisplus-insert-508e1eef","2026-09-12T08:30:05.087286Z",{"title":213,"slug":214,"cover":215,"excerpt":216,"publishTime":218,"categories":219,"tags":220,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 新增数据并返回主键 ID（图文讲解）","mybatisplus-insert","\u002Fupload\u002F167204808139593-dWMf.jpg",{"raw":217,"autoGenerate":93},"大家好，本小节中，我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据。","2026-09-12T08:30:05.152745Z",[87],[],{"permalink":222,"excerpt":223,"lastModifyTime":224,"phase":116},"\u002Farchives\u002Fmybatisplus-insert","本小节中，我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据。","2026-09-13T05:25:18.910864Z",[226],{"metadata":227,"spec":228,"status":229,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":231,"spec":234,"status":243,"categories":246},{"name":232,"creationTimestamp":233},"post-mybatisplus-dynamic-table-name-2454e803","2026-09-12T08:30:04.221155Z",{"title":235,"slug":236,"cover":237,"excerpt":238,"publishTime":240,"categories":241,"tags":242,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 动态表名（图文讲解）","mybatisplus-dynamic-table-name","\u002Fupload\u002F167420281572597-bWCR.jpg",{"raw":239,"autoGenerate":93},"本小节中，我们将学习如何在 Mybatis Plus 中实现动态表名。啥是动态表名呢？我们都知道，当数据库单表存储数据太多时（比如单表超过 1000 万条数据），会严重影响查询效率，这就需要进行水平切分操作，将数据分别存储到不同表中...","2026-09-12T08:30:04.292849Z",[87],[],{"permalink":244,"excerpt":239,"lastModifyTime":245,"phase":116},"\u002Farchives\u002Fmybatisplus-dynamic-table-name","2026-09-13T05:25:20.735247Z",[247],{"metadata":248,"spec":249,"status":250,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":252,"spec":255,"status":264,"categories":268},{"name":253,"creationTimestamp":254},"post-mybatisplus-delete-2134cc6a","2026-09-12T08:30:03.191339Z",{"title":256,"slug":257,"cover":258,"excerpt":259,"publishTime":261,"categories":262,"tags":263,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 删除数据（超详细）","mybatisplus-delete","\u002Fupload\u002F167214854711359-XVkX.jpg",{"raw":260,"autoGenerate":93},"大家好，本小节中，我们将学习如何通过 Mybatis Plus 删除数据库表中的数据。为了演示删除数据，在前面小节中，我们已经定义好了一个用于测试的用户表， 执行脚本如下...","2026-09-12T08:30:03.250941Z",[87],[],{"permalink":265,"excerpt":266,"lastModifyTime":267,"phase":116},"\u002Farchives\u002Fmybatisplus-delete","本小节中，我们将学习如何通过 Mybatis Plus 删除数据库表中的数据。为了演示删除数据，在前面小节中，我们已经定义好了一个用于测试的用户表， 执行脚本如下...","2026-09-13T05:25:21.767837Z",[269],{"metadata":270,"spec":271,"status":272,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":274,"spec":277,"status":286,"categories":289},{"name":275,"creationTimestamp":276},"post-mybatisplus-batch-insert-0dfcd5a6","2026-09-12T08:30:02.464761Z",{"title":278,"slug":279,"cover":280,"excerpt":281,"publishTime":283,"categories":284,"tags":285,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 批量 Insert_新增数据（图文讲解）","mybatisplus-batch-insert","\u002Fupload\u002F167211863047181-DEdJ.jpg",{"raw":282,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 实现 MySQL 批量插入数据。先抛出一个问题：假设老板给你下了个任务，向数据库中添加 100 万条数据，并且不能耗时太久...","2026-09-12T08:30:02.543036Z",[87],[],{"permalink":287,"excerpt":282,"lastModifyTime":288,"phase":116},"\u002Farchives\u002Fmybatisplus-batch-insert","2026-09-13T05:25:24.064210Z",[290],{"metadata":291,"spec":292,"status":293,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":295,"spec":298,"status":307,"categories":310},{"name":296,"creationTimestamp":297},"post-mybatis-plus-integrate-0c3e6619","2026-09-12T08:30:01.532093Z",{"title":299,"slug":300,"cover":301,"excerpt":302,"publishTime":304,"categories":305,"tags":306,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis-Plus 整合集成","mybatis-plus-integrate","\u002Fupload\u002F164870378749787-sJrg.png",{"raw":303,"autoGenerate":93},"上小节中，我们学习了如何快速入门 Mybatis-Plus，文中以 Spring Boot + Maven 来讲解的，本文将详细的介绍如何在市面主流框架中整合&amp;集成 Mybatis-Plus。","2026-09-12T08:30:01.743646Z",[87],[],{"permalink":308,"excerpt":303,"lastModifyTime":309,"phase":116},"\u002Farchives\u002Fmybatis-plus-integrate","2026-09-16T09:43:57.945654Z",[311],{"metadata":312,"spec":313,"status":314,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":316,"spec":319,"status":328,"categories":331},{"name":317,"creationTimestamp":318},"post-mybaitsplus-wrapper-51f1c68c","2026-09-12T08:30:00.818539Z",{"title":320,"slug":321,"cover":322,"excerpt":323,"publishTime":325,"categories":326,"tags":327,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus Wrapper 条件构造器（超详细）","mybaitsplus-wrapper","\u002Fupload\u002F167220794094570-TBuu.jpg",{"raw":324,"autoGenerate":93},"在 Mybatis 中，我们查询或者更新指定数据，可以直接在 xml 文件中写 SQL，然后通过占位符传入条件参数即可，比如你想根据用户 ID 去更新某个用户数据，那么 SQL 条件大致为 where id = #{id}...","2026-09-12T08:30:00.907062Z",[87],[],{"permalink":329,"excerpt":324,"lastModifyTime":330,"phase":116},"\u002Farchives\u002Fmybaitsplus-wrapper","2026-09-13T05:25:26.773490Z",[332],{"metadata":333,"spec":334,"status":335,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":337,"spec":340,"status":348,"categories":351},{"name":338,"creationTimestamp":339},"post-mybaitsplus-update-7910a075","2026-09-12T08:30:00.045046Z",{"title":341,"slug":342,"cover":215,"excerpt":343,"publishTime":345,"categories":346,"tags":347,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 更新数据（图文讲解）","mybaitsplus-update",{"raw":344,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 修改数据库表中的数据。在前面小节中，我们已经定义好了一个用于测试的用户表， 执行脚本如下...","2026-09-12T08:30:00.114111Z",[87],[],{"permalink":349,"excerpt":344,"lastModifyTime":350,"phase":116},"\u002Farchives\u002Fmybaitsplus-update","2026-09-13T05:25:27.532631Z",[352],{"metadata":353,"spec":354,"status":355,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":357,"spec":360,"status":369,"categories":372},{"name":358,"creationTimestamp":359},"post-mybaitsplus-select-data-bd965549","2026-09-12T08:29:59.301200Z",{"title":361,"slug":362,"cover":363,"excerpt":364,"publishTime":366,"categories":367,"tags":368,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 查询数据（图文讲解）","mybaitsplus-select-data","\u002Fupload\u002F167238066532413-dlWV.jpg",{"raw":365,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 查询数据库表中的数据。在前面小节中，我们已经定义好了一个用于测试的用户表， 执行脚本如下...","2026-09-12T08:29:59.380954Z",[87],[],{"permalink":370,"excerpt":365,"lastModifyTime":371,"phase":116},"\u002Farchives\u002Fmybaitsplus-select-data","2026-09-13T05:25:28.466672Z",[373],{"metadata":374,"spec":375,"status":376,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":378,"spec":381,"status":390,"categories":393},{"name":379,"creationTimestamp":380},"post-mybaitsplus-logic-delete-22e24533","2026-09-12T08:29:58.277662Z",{"title":382,"slug":383,"cover":384,"excerpt":385,"publishTime":387,"categories":388,"tags":389,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 逻辑删除（手把手教学）","mybaitsplus-logic-delete","\u002Fupload\u002F167342448565316-QpIC.jpg",{"raw":386,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 实现逻辑删除功能。讲逻辑删除之前，先说说物理删除。当我们想要删除数据库中的数据，都会执行一条 delete 语句，执行成功后...","2026-09-12T08:29:58.346883Z",[87],[],{"permalink":391,"excerpt":386,"lastModifyTime":392,"phase":116},"\u002Farchives\u002Fmybaitsplus-logic-delete","2026-09-13T05:25:29.585172Z",[394],{"metadata":395,"spec":396,"status":397,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":399,"spec":402,"status":411,"categories":414},{"name":400,"creationTimestamp":401},"post-mybaitsplus-join-query-0b894da6","2026-09-12T08:29:57.423004Z",{"title":403,"slug":404,"cover":405,"excerpt":406,"publishTime":408,"categories":409,"tags":410,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 多表联查（包含分页关联查询,图文讲解）","mybaitsplus-join-query","\u002Fupload\u002F167273442141335-DKZI.jpg",{"raw":407,"autoGenerate":93},"本小节中，我们将学习如何通过 Mybatis Plus 实现多表关联查询，以及分页关联查询。本文以查询用户所下订单，来演示 Mybatis Plus 的关联查询，数据库表除了前面小节中已经定义好的用户表...","2026-09-12T08:29:57.518395Z",[87],[],{"permalink":412,"excerpt":407,"lastModifyTime":413,"phase":116},"\u002Farchives\u002Fmybaitsplus-join-query","2026-09-13T05:25:32.424638Z",[415],{"metadata":416,"spec":417,"status":418,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":420,"spec":423,"status":432,"categories":436},{"name":421,"creationTimestamp":422},"post-mybaitsplus-enum-value-745dbc08","2026-09-12T08:29:56.730649Z",{"title":424,"slug":425,"cover":426,"excerpt":427,"publishTime":429,"categories":430,"tags":431,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 通用枚举（图文讲解）","mybaitsplus-enum-value","\u002Fupload\u002F167359425246371-MHdo.jpg",{"raw":428,"autoGenerate":93},"\r\n大家好，本小节中，我们将讲解 Mybatis Plus 通用枚举的用法。那么，什么是通用枚举呢？之前小节中，我们的用户表有个性别字段 gender，在插入数据时，我们的示例代码大致如下...","2026-09-12T08:29:56.787230Z",[87],[],{"permalink":433,"excerpt":434,"lastModifyTime":435,"phase":116},"\u002Farchives\u002Fmybaitsplus-enum-value","本小节中，我们将讲解 Mybatis Plus 通用枚举的用法。那么，什么是通用枚举呢？之前小节中，我们的用户表有个性别字段 gender，在插入数据时，我们的示例代码大致如下...","2026-09-13T05:25:33.487169Z",[437],{"metadata":438,"spec":439,"status":440,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":442,"spec":445,"status":454,"categories":458},{"name":443,"creationTimestamp":444},"post-mybaitsplus-common-annotation-80f197dc","2026-09-12T08:29:56.056296Z",{"title":446,"slug":447,"cover":448,"excerpt":449,"publishTime":451,"categories":452,"tags":453,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 常用注解（超详细）","mybaitsplus-common-annotation","\u002Fupload\u002F167334634342163-ZyfL.jpg",{"raw":450,"autoGenerate":93},"大家好，本文主要带大家来看下 Mybatis Plus 框架中，使用频率非常高的几个注解及其属性值，因为编写此本教程目的是为了大家快速入门并使用 Mybatis Plus，关于注解更高级的用法请参考官网...","2026-09-12T08:29:56.114067Z",[87],[],{"permalink":455,"excerpt":456,"lastModifyTime":457,"phase":116},"\u002Farchives\u002Fmybaitsplus-common-annotation","本文主要带大家来看下 Mybatis Plus 框架中，使用频率非常高的几个注解及其属性值，因为编写此本教程目的是为了大家快速入门并使用 Mybatis Plus，关于注解更高级的用法请参考官网...","2026-09-13T05:25:33.983128Z",[459],{"metadata":460,"spec":461,"status":462,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":464,"spec":467,"status":476,"categories":479},{"name":465,"creationTimestamp":466},"post-mybaitsplus-code-generator-c984d27c","2026-09-12T08:29:55.452199Z",{"title":468,"slug":469,"cover":470,"excerpt":471,"publishTime":473,"categories":474,"tags":475,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Mybatis Plus 代码生成器（图文讲解）","mybaitsplus-code-generator","\u002Fupload\u002F167387297654896-aKtE.jpg",{"raw":472,"autoGenerate":93},"本小节中，我们将学习如何使用 Mybatis Plus 的代码生成器。可能有效小伙伴会疑惑，这玩意是干嘛使的？通常在实际项目开发中，如果开发一个功能，我们会先进行表设计，技术方案的确定，技术经理评估 OK 以后，才会进行项目开发，而不是一上来就写代码，跟无头苍蝇一样...","2026-09-12T08:29:55.508709Z",[87],[],{"permalink":477,"excerpt":472,"lastModifyTime":478,"phase":116},"\u002Farchives\u002Fmybaitsplus-code-generator","2026-09-13T05:25:35.131214Z",[480],{"metadata":481,"spec":482,"status":483,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":485,"spec":486,"status":490,"categories":491,"content":496},{"name":400,"creationTimestamp":401},{"title":403,"slug":404,"cover":405,"excerpt":487,"publishTime":408,"categories":488,"tags":489,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},{"raw":407,"autoGenerate":93},[87],[],{"permalink":412,"excerpt":407,"lastModifyTime":413,"phase":116},[492],{"metadata":493,"spec":494,"status":495,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"content":497,"raw":498},"\u003Cp>\u003C\u002Fp>\n\u003Cp>本小节中，我们将学习如何通过 Mybatis Plus 实现\u003Cem>多表关联查询\u003C\u002Fem>，以及\u003Cem>分页关联查询\u003C\u002Fem>。\u003C\u002Fp>\n\u003Ch2>表结构\u003C\u002Fh2>\n\u003Cp>本文以\u003Cem>查询用户所下订单\u003C\u002Fem>，来演示 Mybatis Plus 的关联查询，数据库表除了前面小节中已经定义好的用户表外，再额外创建一张订单表，然后插入一些测试数据，执行脚本如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>DROP TABLE IF EXISTS user;\n\nCREATE TABLE `t_user` (\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',\n  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',\n  `gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别，0：女 1：男',\n  PRIMARY KEY (`id`)\n) COMMENT = '用户表';\n\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (1, '张三', 30, 1);\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (2, '关羽', 46, 1);\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (3, '诸葛亮', 26, 1);\n\n\nCREATE TABLE `t_order` (\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '订单ID',\n  `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '下单用户ID',\n  `goods_name` varchar(30) NOT NULL COMMENT '商品名称',\n  `goods_price` decimal(10,2) NOT NULL COMMENT '商品价格',\n  PRIMARY KEY (`id`),\n  INDEX idx_order_id(`order_id`)\n) COMMENT = '订单表';\n\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (1, 805646264648356, 1, 'Switch 游戏机', 1400.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (2, 551787441310504, 1, '小米手机', 2000.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (3, 938562101633493, 2, '《三国演义》', 66.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (4, 791129917310894, 3, '华为手机', 1200.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (5, 208722395587361, 3, '《西游记》', 56.00);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>需求分析\u003C\u002Fh2>\n\u003Cp>假设前端需要展示数据有如下几个字段：订单号、商品名称、商品价格、下单用户姓名、下单用户年龄、下单用户性别：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273442141335-DKZI.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>则对应的关联 SQL 语句如下:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>select o.order_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>项目结构\u003C\u002Fh2>\n\u003Cp>先贴一张项目结构，下面所创建的类与文件可参考这里：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167275265792255-vHKr.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Ch2>实体类\u003C\u002Fh2>\n\u003Cp>接下来，我们定义实体类。创建一个 \u003Ccode>OrderVO\u003C\u002Fcode> 视图类，用于传输给前端展示：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n * @author: 张三\n * @date: 2022-12-13 14:13\n * @version: v1.0.0\n * @description: TODO\n **\u002F\n@Data\npublic class OrderVO {\n\n    \u002F**\n     * 订单ID\n     *\u002F\n    private Long orderId;\n    \u002F**\n     * 下单用户ID\n     *\u002F\n    private Long userId;\n    \u002F**\n     * 商品名称\n     *\u002F\n    private String goodsName;\n\n    \u002F**\n     * 商品价格\n     *\u002F\n    private BigDecimal goodsPrice;\n\n    \u002F**\n     * 用户名\n     *\u002F\n    private String userName;\n    \u002F**\n     * 年龄\n     *\u002F\n    private Integer userAge;\n    \u002F**\n     * 性别\n     *\u002F\n    private Integer userGender;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>TIP： \u003Ccode>@Data\u003C\u002Fcode> 是 Lombok 注解，偷懒用的，加上它即可免写繁杂的 \u003Ccode>getXXX\u002FsetXXX\u003C\u002Fcode> 相关方法，不了解的小伙伴可自行搜索一下如何使用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>开始关联查询\u003C\u002Fh2>\n\u003Ch3>简单的关联查询\u003C\u002Fh3>\n\u003Cp>创建 \u003Ccode>UserMapper\u003C\u002Fcode> , 让其继承自 \u003Ccode>BaseMapper\u003C\u002Fcode> ， 并自定义一个查询订单列表的方法:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public interface UserMapper extends BaseMapper&lt;User&gt; {\n\t\u002F\u002F 查询订单列表\n\tList&lt;OrderVO&gt; selectOrders();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在项目的 \u003Ccode>resource\u003C\u002Fcode> 目录下新建 \u003Ccode>mapper\u003C\u002Fcode> 文件夹，并在 \u003Ccode>mapper\u003C\u002Fcode> 文件夹中创建 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273537700769-XTWq.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>\u003Ccode>UserMapper.xml\u003C\u002Fcode> 中编写关联语句，以及需要映射的对象，内容如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;\n&lt;!DOCTYPE mapper PUBLIC &quot;-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN&quot; &quot;http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd&quot; &gt;\n&lt;mapper namespace=&quot;com.mashangan.mybatisplusdemo.mapper.UserMapper&quot;&gt;\n\n    &lt;resultMap id=&quot;orderMap&quot; type=&quot;com.mashangan.mybatisplusdemo.model.OrderVO&quot;&gt;\n        &lt;result property=&quot;userName&quot; column=&quot;name&quot;\u002F&gt;\n        &lt;result property=&quot;userAge&quot; column=&quot;age&quot;\u002F&gt;\n        &lt;result property=&quot;userGender&quot; column=&quot;gender&quot;\u002F&gt;\n        &lt;result property=&quot;orderId&quot; column=&quot;order_id&quot;\u002F&gt;\n        &lt;result property=&quot;userId&quot; column=&quot;user_id&quot;\u002F&gt;\n        &lt;result property=&quot;goodsName&quot; column=&quot;goods_name&quot;\u002F&gt;\n        &lt;result property=&quot;goodsPrice&quot; column=&quot;goods_price&quot;\u002F&gt;\n    &lt;\u002FresultMap&gt;\n\n    &lt;select id=&quot;selectOrders&quot; resultMap=&quot;orderMap&quot;&gt;\n        select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n    &lt;\u002Fselect&gt;\n\n&lt;\u002Fmapper&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>创建完了 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件后，还需要在 \u003Ccode>applicatoin.yml\u003C\u002Fcode> 中添加如下配置，告诉 Mybatis Plus 框架去扫描这些 \u003Ccode>xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mybatis-plus:\n  mapper-locations: classpath:\u002Fmapper\u002F*Mapper.xml\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273578903225-rNor.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>然后，创建一个单元测试看看好不好使:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@Autowired\nprivate UserMapper userMapper;\n\n@Test\nvoid testSelectOrders() {\n    List&lt;OrderVO&gt; orderVOS = userMapper.selectOrders();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>执行上面的单元测试，实际执行 SQL 为：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender from t_order as o left join t_user as u on o.user_id = u.id\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>返回数据如下：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273708039640-XOsv.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>到这里，一个简单的关联查询就搞定了。\u003C\u002Fp>\n\u003Ch3>带分页的关联查询\u003C\u002Fh3>\n\u003Cp>实际开发场景中，很多关联查询都需要结合分页一起使用，假设上面展示的数据需要分页展示，且需要支持条件查询，要怎么做呢？\u003C\u002Fp>\n\u003Ch4>定义关联查询分页方法\u003C\u002Fh4>\n\u003Cp>在 \u003Ccode>UserMapper\u003C\u002Fcode> 接口中再定义支持分页的关联查询方法：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public interface UserMapper extends BaseMapper&lt;User&gt; {\n\n\t\u002F\u002F...\n    IPage&lt;OrderVO&gt; selectOrderPage(IPage&lt;OrderVO&gt; page, @Param(Constants.WRAPPER) QueryWrapper&lt;OrderVO&gt; wrapper);\n    \u002F\u002F...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>TIP :  可以看到我们定义的关联分页查询和 Myatis Plus 内部提供的分页方法相差不大，仔细看入参，我们复用了 Mybatis Plus 内部提供的分页类\u003Ccode>IPage\u003C\u002Fcode>，以及 \u003Ccode>QueryWrapper\u003C\u002Fcode> （用于组装 \u003Ccode>where\u003C\u002Fcode> 条件）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>然后在 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 中创建该方法对应的关联查询：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;\n&lt;!DOCTYPE mapper PUBLIC &quot;-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN&quot; &quot;http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd&quot; &gt;\n&lt;mapper namespace=&quot;com.mashangan.mybatisplusdemo.mapper.UserMapper&quot;&gt;\n\n    &lt;resultMap id=&quot;orderMap&quot; type=&quot;com.mashangan.mybatisplusdemo.model.OrderVO&quot;&gt;\n        &lt;result property=&quot;userName&quot; column=&quot;name&quot;\u002F&gt;\n        &lt;result property=&quot;userAge&quot; column=&quot;age&quot;\u002F&gt;\n        &lt;result property=&quot;userGender&quot; column=&quot;gender&quot;\u002F&gt;\n        &lt;result property=&quot;orderId&quot; column=&quot;order_id&quot;\u002F&gt;\n        &lt;result property=&quot;userId&quot; column=&quot;user_id&quot;\u002F&gt;\n        &lt;result property=&quot;goodsName&quot; column=&quot;goods_name&quot;\u002F&gt;\n        &lt;result property=&quot;goodsPrice&quot; column=&quot;goods_price&quot;\u002F&gt;\n    &lt;\u002FresultMap&gt;\n\n\t\u002F\u002F...\n\t\n    &lt;select id=&quot;selectOrderPage&quot; resultMap=&quot;orderMap&quot;&gt;\n        select u.name, u.age, u.gender, o.order_id, o.goods_name, o.goods_price\n        from t_user as u left join t_order as o on u.id = o.user_id\n        ${ew.customSqlSegment}\n    &lt;\u002Fselect&gt;\n\n\t\u002F\u002F...\n\n&lt;\u002Fmapper&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>再创建一个单元测试：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@Autowired\nprivate UserMapper userMapper;\n\n@Test\nvoid testSelectOrdersPage() {\n    \u002F\u002F 查询第一页，每页显示 10 条\n    Page&lt;OrderVO&gt; page = new Page&lt;&gt;(1, 10);\n    \u002F\u002F 注意：一定要手动关闭 SQL 优化，不然查询总数的时候只会查询主表\n    page.setOptimizeCountSql(false);\n    \u002F\u002F 组装查询条件 where age = 20\n    QueryWrapper&lt;OrderVO&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n    queryWrapper.ge(&quot;age&quot;, 20);\n\n    IPage&lt;OrderVO&gt; page1 = userMapper.selectOrderPage(page, queryWrapper);\n\n    System.out.println(&quot;总记录数：&quot; + page1.getTotal());\n    System.out.println(&quot;总共多少页：&quot; + page1.getPages());\n    System.out.println(&quot;当前页码：&quot; + page1.getCurrent());\n    System.out.println(&quot;查询数据：&quot; + page1.getRecords());\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>执行该单元测试，控制台打印实际执行 SQL 如下，可见分页功能也是 OK 的，先执行 \u003Ccode>select count(*)\u003C\u002Fcode> 查询记录总数，然后再执行关联分页查询：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167275192199796-CnDt.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n13:T1066e,\u003Cp>\u003C\u002Fp>\n\u003Cp>本小节中，我们将学习如何通过 Mybatis Plus 实现\u003Cem>多表关联查询\u003C\u002Fem>，以及\u003Cem>分页关联查询\u003C\u002Fem>。\u003C\u002Fp>\n\u003Ch2 id=\"toc-0\">表结构\u003C\u002Fh2>\n\u003Cp>本文以\u003Cem>查询用户所下订单\u003C\u002Fem>，来演示 Mybatis Plus 的关联查询，数据库表除了前面小节中已经定义好的用户表外，再额外创建一张订单表，然后插入一些测试数据，执行脚本如下：\u003C\u002Fp>\n\u003Cdiv class=\"language-javascript\" data-ext=\"javascript\" data-code=\"DROP%20TABLE%20IF%20EXISTS%20user%3B%0A%0ACREATE%20TABLE%20%60t_user%60%20(%0A%20%20%60id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20AUTO_INCREMENT%20COMMENT%20'%E4%B8%BB%E9%94%AEID'%2C%0A%20%20%60name%60%20varchar(30)%20NOT%20NULL%20DEFAULT%20''%20COMMENT%20'%E5%A7%93%E5%90%8D'%2C%0A%20%20%60age%60%20int(11)%20NULL%20DEFAULT%20NULL%20COMMENT%20'%E5%B9%B4%E9%BE%84'%2C%0A%20%20%60gender%60%20tinyint(2)%20NOT%20NULL%20DEFAULT%200%20COMMENT%20'%E6%80%A7%E5%88%AB%EF%BC%8C0%EF%BC%9A%E5%A5%B3%201%EF%BC%9A%E7%94%B7'%2C%0A%20%20PRIMARY%20KEY%20(%60id%60)%0A)%20COMMENT%20%3D%20'%E7%94%A8%E6%88%B7%E8%A1%A8'%3B%0A%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(1%2C%20'%E5%BC%A0%E4%B8%89'%2C%2030%2C%201)%3B%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(2%2C%20'%E5%85%B3%E7%BE%BD'%2C%2046%2C%201)%3B%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(3%2C%20'%E8%AF%B8%E8%91%9B%E4%BA%AE'%2C%2026%2C%201)%3B%0A%0A%0ACREATE%20TABLE%20%60t_order%60%20(%0A%20%20%60id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20AUTO_INCREMENT%20COMMENT%20'%E4%B8%BB%E9%94%AEID'%2C%0A%20%20%60order_id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20COMMENT%20'%E8%AE%A2%E5%8D%95ID'%2C%0A%20%20%60user_id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20COMMENT%20'%E4%B8%8B%E5%8D%95%E7%94%A8%E6%88%B7ID'%2C%0A%20%20%60goods_name%60%20varchar(30)%20NOT%20NULL%20COMMENT%20'%E5%95%86%E5%93%81%E5%90%8D%E7%A7%B0'%2C%0A%20%20%60goods_price%60%20decimal(10%2C2)%20NOT%20NULL%20COMMENT%20'%E5%95%86%E5%93%81%E4%BB%B7%E6%A0%BC'%2C%0A%20%20PRIMARY%20KEY%20(%60id%60)%2C%0A%20%20INDEX%20idx_order_id(%60order_id%60)%0A)%20COMMENT%20%3D%20'%E8%AE%A2%E5%8D%95%E8%A1%A8'%3B%0A%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(1%2C%20805646264648356%2C%201%2C%20'Switch%20%E6%B8%B8%E6%88%8F%E6%9C%BA'%2C%201400.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(2%2C%20551787441310504%2C%201%2C%20'%E5%B0%8F%E7%B1%B3%E6%89%8B%E6%9C%BA'%2C%202000.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(3%2C%20938562101633493%2C%202%2C%20'%E3%80%8A%E4%B8%89%E5%9B%BD%E6%BC%94%E4%B9%89%E3%80%8B'%2C%2066.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(4%2C%20791129917310894%2C%203%2C%20'%E5%8D%8E%E4%B8%BA%E6%89%8B%E6%9C%BA'%2C%201200.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(5%2C%20208722395587361%2C%203%2C%20'%E3%80%8A%E8%A5%BF%E6%B8%B8%E8%AE%B0%E3%80%8B'%2C%2056.00)%3B%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-javascript\">\u003Cspan class=\"token constant\">DROP\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token constant\">IF\u003C\u002Fspan> \u003Cspan class=\"token constant\">EXISTS\u003C\u002Fspan> user\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">CREATE\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">AUTO_INCREMENT\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'主键ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">varchar\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token string\">''\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'姓名'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">int\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">11\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'年龄'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">tinyint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token number\">0\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'性别，0：女 1：男'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">PRIMARY\u003C\u002Fspan> \u003Cspan class=\"token constant\">KEY\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token string\">'用户表'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'张三'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'关羽'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">46\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'诸葛亮'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">26\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\n\u003Cspan class=\"token constant\">CREATE\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">AUTO_INCREMENT\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'主键ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'订单ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'下单用户ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">varchar\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'商品名称'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">decimal\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">10\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'商品价格'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">PRIMARY\u003C\u002Fspan> \u003Cspan class=\"token constant\">KEY\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">INDEX\u003C\u002Fspan> \u003Cspan class=\"token function\">idx_order_id\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token string\">'订单表'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">805646264648356\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'Switch 游戏机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1400.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">551787441310504\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'小米手机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">2000.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">938562101633493\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'《三国演义》'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">66.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">4\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">791129917310894\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'华为手机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1200.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">5\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">208722395587361\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'《西游记》'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">56.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Ch2 id=\"toc-1\">需求分析\u003C\u002Fh2>\n\u003Cp>假设前端需要展示数据有如下几个字段：订单号、商品名称、商品价格、下单用户姓名、下单用户年龄、下单用户性别：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273442141335-DKZI.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>则对应的关联 SQL 语句如下:\u003C\u002Fp>\n\u003Cdiv class=\"language-sql\" data-ext=\"sql\" data-code=\"select%20o.order_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%0A%20%20%20%20%20%20%20%20from%20t_order%20as%20o%20left%20join%20%20t_user%20as%20u%20on%20%20o.user_id%20%3D%20u.id%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-sql\">\u003Cspan class=\"token keyword\">select\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>gender\n        \u003Cspan class=\"token keyword\">from\u003C\u002Fspan> t_order \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> o \u003Cspan class=\"token keyword\">left\u003C\u002Fspan> \u003Cspan class=\"token keyword\">join\u003C\u002Fspan>  t_user \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> u \u003Cspan class=\"token keyword\">on\u003C\u002Fspan>  o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id \u003Cspan class=\"token operator\">=\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>id\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Ch2 id=\"toc-2\">项目结构\u003C\u002Fh2>\n\u003Cp>先贴一张项目结构，下面所创建的类与文件可参考这里：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167275265792255-vHKr.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Ch2 id=\"toc-3\">实体类\u003C\u002Fh2>\n\u003Cp>接下来，我们定义实体类。创建一个 \u003Ccode>OrderVO\u003C\u002Fcode> 视图类，用于传输给前端展示：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%2F**%0A%20*%20%40author%3A%20%E5%BC%A0%E4%B8%89%0A%20*%20%40from%3A%20%E5%85%AC%E4%BC%97%E5%8F%B7%EF%BC%9A%E5%BC%A0%E4%B8%89%2C%20%E7%BD%91%E7%AB%99%EF%BC%9Awww.mashangan.com%0A%20*%20%40date%3A%202022-12-13%2014%3A13%0A%20*%20%40version%3A%20v1.0.0%0A%20*%20%40description%3A%20TODO%0A%20**%2F%0A%40Data%0Apublic%20class%20OrderVO%20%7B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%AE%A2%E5%8D%95ID%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Long%20orderId%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E4%B8%8B%E5%8D%95%E7%94%A8%E6%88%B7ID%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Long%20userId%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%95%86%E5%93%81%E5%90%8D%E7%A7%B0%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20String%20goodsName%3B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%95%86%E5%93%81%E4%BB%B7%E6%A0%BC%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20BigDecimal%20goodsPrice%3B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E7%94%A8%E6%88%B7%E5%90%8D%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20String%20userName%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%B9%B4%E9%BE%84%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Integer%20userAge%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E6%80%A7%E5%88%AB%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Integer%20userGender%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token comment\">\u002F**\n * @author: 张三\n * @date: 2022-12-13 14:13\n * @version: v1.0.0\n * @description: TODO\n **\u002F\u003C\u002Fspan>\n\u003Cspan class=\"token annotation punctuation\">@Data\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">class\u003C\u002Fspan> \u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 订单ID\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Long\u003C\u002Fspan> orderId\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 下单用户ID\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Long\u003C\u002Fspan> userId\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 商品名称\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">String\u003C\u002Fspan> goodsName\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 商品价格\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BigDecimal\u003C\u002Fspan> goodsPrice\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 用户名\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">String\u003C\u002Fspan> userName\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 年龄\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan> userAge\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 性别\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan> userGender\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cblockquote>\n\u003Cp>TIP： \u003Ccode>@Data\u003C\u002Fcode> 是 Lombok 注解，偷懒用的，加上它即可免写繁杂的 \u003Ccode>getXXX\u002FsetXXX\u003C\u002Fcode> 相关方法，不了解的小伙伴可自行搜索一下如何使用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"toc-4\">开始关联查询\u003C\u002Fh2>\n\u003Ch3 id=\"toc-5\">简单的关联查询\u003C\u002Fh3>\n\u003Cp>创建 \u003Ccode>UserMapper\u003C\u002Fcode> , 让其继承自 \u003Ccode>BaseMapper\u003C\u002Fcode> ， 并自定义一个查询订单列表的方法:\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"public%20interface%20UserMapper%20extends%20BaseMapper%3CUser%3E%20%7B%0A%09%2F%2F%20%E6%9F%A5%E8%AF%A2%E8%AE%A2%E5%8D%95%E5%88%97%E8%A1%A8%0A%09List%3COrderVO%3E%20selectOrders()%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">interface\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> \u003Cspan class=\"token keyword\">extends\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BaseMapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">User\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\t\u003Cspan class=\"token comment\">\u002F\u002F 查询订单列表\u003C\u002Fspan>\n\t\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">selectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在项目的 \u003Ccode>resource\u003C\u002Fcode> 目录下新建 \u003Ccode>mapper\u003C\u002Fcode> 文件夹，并在 \u003Ccode>mapper\u003C\u002Fcode> 文件夹中创建 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273537700769-XTWq.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>\u003Ccode>UserMapper.xml\u003C\u002Fcode> 中编写关联语句，以及需要映射的对象，内容如下：\u003C\u002Fp>\n\u003Cdiv class=\"language-xml\" data-ext=\"xml\" data-code=\"%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%3E%0A%3C!DOCTYPE%20mapper%20PUBLIC%20%22-%2F%2Fmybatis.org%2F%2FDTD%20Mapper%203.0%2F%2FEN%22%20%22http%3A%2F%2Fmybatis.org%2Fdtd%2Fmybatis-3-mapper.dtd%22%20%3E%0A%3Cmapper%20namespace%3D%22com.mashangan.mybatisplusdemo.mapper.UserMapper%22%3E%0A%0A%20%20%20%20%3CresultMap%20id%3D%22orderMap%22%20type%3D%22com.mashangan.mybatisplusdemo.model.OrderVO%22%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userName%22%20column%3D%22name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userAge%22%20column%3D%22age%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userGender%22%20column%3D%22gender%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22orderId%22%20column%3D%22order_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userId%22%20column%3D%22user_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsName%22%20column%3D%22goods_name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsPrice%22%20column%3D%22goods_price%22%2F%3E%0A%20%20%20%20%3C%2FresultMap%3E%0A%0A%20%20%20%20%3Cselect%20id%3D%22selectOrders%22%20resultMap%3D%22orderMap%22%3E%0A%20%20%20%20%20%20%20%20select%20o.order_id%2C%20o.user_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%0A%20%20%20%20%20%20%20%20from%20t_order%20as%20o%20left%20join%20%20t_user%20as%20u%20on%20%20o.user_id%20%3D%20u.id%0A%20%20%20%20%3C%2Fselect%3E%0A%0A%3C%2Fmapper%3E%0A%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-xml\">\u003Cspan class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?>\u003C\u002Fspan>\n\u003Cspan class=\"token doctype\">\u003Cspan class=\"token punctuation\">&lt;!\u003C\u002Fspan>\u003Cspan class=\"token doctype-tag\">DOCTYPE\u003C\u002Fspan> \u003Cspan class=\"token name\">mapper\u003C\u002Fspan> \u003Cspan class=\"token name\">PUBLIC\u003C\u002Fspan> \u003Cspan class=\"token string\">\"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\u003C\u002Fspan> \u003Cspan class=\"token string\">\"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\"\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>mapper\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">namespace\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.mapper.UserMapper\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>resultMap\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">type\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.model.OrderVO\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userAge\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userGender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>gender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsPrice\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>resultMap\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>select\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>selectOrders\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">resultMap\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>select\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>mapper\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>创建完了 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件后，还需要在 \u003Ccode>applicatoin.yml\u003C\u002Fcode> 中添加如下配置，告诉 Mybatis Plus 框架去扫描这些 \u003Ccode>xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cdiv class=\"language-yaml\" data-ext=\"yaml\" data-code=\"mybatis-plus%3A%0A%20%20mapper-locations%3A%20classpath%3A%2Fmapper%2F*Mapper.xml%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-yaml\">\u003Cspan class=\"token key atrule\">mybatis-plus\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan>\n  \u003Cspan class=\"token key atrule\">mapper-locations\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan> classpath\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan>\u002Fmapper\u002F\u003Cspan class=\"token important\">*Mapper.xml\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273578903225-rNor.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>然后，创建一个单元测试看看好不好使:\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%40Autowired%0Aprivate%20UserMapper%20userMapper%3B%0A%0A%40Test%0Avoid%20testSelectOrders()%20%7B%0A%20%20%20%20List%3COrderVO%3E%20orderVOS%20%3D%20userMapper.selectOrders()%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token annotation punctuation\">@Autowired\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token annotation punctuation\">@Test\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">void\u003C\u002Fspan> \u003Cspan class=\"token function\">testSelectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> orderVOS \u003Cspan class=\"token operator\">=\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">selectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>执行上面的单元测试，实际执行 SQL 为：\u003C\u002Fp>\n\u003Cdiv class=\"language-sql\" data-ext=\"sql\" data-code=\"select%20o.order_id%2C%20o.user_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%20from%20t_order%20as%20o%20left%20join%20t_user%20as%20u%20on%20o.user_id%20%3D%20u.id%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-sql\">\u003Cspan class=\"token keyword\">select\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>gender \u003Cspan class=\"token keyword\">from\u003C\u002Fspan> t_order \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> o \u003Cspan class=\"token keyword\">left\u003C\u002Fspan> \u003Cspan class=\"token keyword\">join\u003C\u002Fspan> t_user \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> u \u003Cspan class=\"token keyword\">on\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id \u003Cspan class=\"token operator\">=\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>id\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>返回数据如下：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273708039640-XOsv.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>到这里，一个简单的关联查询就搞定了。\u003C\u002Fp>\n\u003Ch3 id=\"toc-6\">带分页的关联查询\u003C\u002Fh3>\n\u003Cp>实际开发场景中，很多关联查询都需要结合分页一起使用，假设上面展示的数据需要分页展示，且需要支持条件查询，要怎么做呢？\u003C\u002Fp>\n\u003Ch4 id=\"toc-7\">定义关联查询分页方法\u003C\u002Fh4>\n\u003Cp>在 \u003Ccode>UserMapper\u003C\u002Fcode> 接口中再定义支持分页的关联查询方法：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"public%20interface%20UserMapper%20extends%20BaseMapper%3CUser%3E%20%7B%0A%0A%09%2F%2F...%0A%20%20%20%20IPage%3COrderVO%3E%20selectOrderPage(IPage%3COrderVO%3E%20page%2C%20%40Param(Constants.WRAPPER)%20QueryWrapper%3COrderVO%3E%20wrapper)%3B%0A%20%20%20%20%2F%2F...%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">interface\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> \u003Cspan class=\"token keyword\">extends\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BaseMapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">User\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\n\t\u003Cspan class=\"token comment\">\u002F\u002F...\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">selectOrderPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token annotation punctuation\">@Param\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Constants\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token constant\">WRAPPER\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> wrapper\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F...\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cblockquote>\n\u003Cp>TIP :  可以看到我们定义的关联分页查询和 Myatis Plus 内部提供的分页方法相差不大，仔细看入参，我们复用了 Mybatis Plus 内部提供的分页类\u003Ccode>IPage\u003C\u002Fcode>，以及 \u003Ccode>QueryWrapper\u003C\u002Fcode> （用于组装 \u003Ccode>where\u003C\u002Fcode> 条件）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>然后在 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 中创建该方法对应的关联查询：\u003C\u002Fp>\n\u003Cdiv class=\"language-xml\" data-ext=\"xml\" data-code=\"%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%3E%0A%3C!DOCTYPE%20mapper%20PUBLIC%20%22-%2F%2Fmybatis.org%2F%2FDTD%20Mapper%203.0%2F%2FEN%22%20%22http%3A%2F%2Fmybatis.org%2Fdtd%2Fmybatis-3-mapper.dtd%22%20%3E%0A%3Cmapper%20namespace%3D%22com.mashangan.mybatisplusdemo.mapper.UserMapper%22%3E%0A%0A%20%20%20%20%3CresultMap%20id%3D%22orderMap%22%20type%3D%22com.mashangan.mybatisplusdemo.model.OrderVO%22%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userName%22%20column%3D%22name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userAge%22%20column%3D%22age%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userGender%22%20column%3D%22gender%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22orderId%22%20column%3D%22order_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userId%22%20column%3D%22user_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsName%22%20column%3D%22goods_name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsPrice%22%20column%3D%22goods_price%22%2F%3E%0A%20%20%20%20%3C%2FresultMap%3E%0A%0A%09%2F%2F...%0A%09%0A%20%20%20%20%3Cselect%20id%3D%22selectOrderPage%22%20resultMap%3D%22orderMap%22%3E%0A%20%20%20%20%20%20%20%20select%20u.name%2C%20u.age%2C%20u.gender%2C%20o.order_id%2C%20o.goods_name%2C%20o.goods_price%0A%20%20%20%20%20%20%20%20from%20t_user%20as%20u%20left%20join%20t_order%20as%20o%20on%20u.id%20%3D%20o.user_id%0A%20%20%20%20%20%20%20%20%24%7Bew.customSqlSegment%7D%0A%20%20%20%20%3C%2Fselect%3E%0A%0A%09%2F%2F...%0A%0A%3C%2Fmapper%3E%0A%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-xml\">\u003Cspan class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?>\u003C\u002Fspan>\n\u003Cspan class=\"token doctype\">\u003Cspan class=\"token punctuation\">&lt;!\u003C\u002Fspan>\u003Cspan class=\"token doctype-tag\">DOCTYPE\u003C\u002Fspan> \u003Cspan class=\"token name\">mapper\u003C\u002Fspan> \u003Cspan class=\"token name\">PUBLIC\u003C\u002Fspan> \u003Cspan class=\"token string\">\"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\u003C\u002Fspan> \u003Cspan class=\"token string\">\"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\"\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>mapper\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">namespace\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.mapper.UserMapper\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>resultMap\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">type\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.model.OrderVO\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userAge\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userGender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>gender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsPrice\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>resultMap\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\t\u002F\u002F...\n\t\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>select\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>selectOrderPage\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">resultMap\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        select u.name, u.age, u.gender, o.order_id, o.goods_name, o.goods_price\n        from t_user as u left join t_order as o on u.id = o.user_id\n        ${ew.customSqlSegment}\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>select\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\t\u002F\u002F...\n\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>mapper\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>再创建一个单元测试：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%40Autowired%0Aprivate%20UserMapper%20userMapper%3B%0A%0A%40Test%0Avoid%20testSelectOrdersPage()%20%7B%0A%20%20%20%20%2F%2F%20%E6%9F%A5%E8%AF%A2%E7%AC%AC%E4%B8%80%E9%A1%B5%EF%BC%8C%E6%AF%8F%E9%A1%B5%E6%98%BE%E7%A4%BA%2010%20%E6%9D%A1%0A%20%20%20%20Page%3COrderVO%3E%20page%20%3D%20new%20Page%3C%3E(1%2C%2010)%3B%0A%20%20%20%20%2F%2F%20%E6%B3%A8%E6%84%8F%EF%BC%9A%E4%B8%80%E5%AE%9A%E8%A6%81%E6%89%8B%E5%8A%A8%E5%85%B3%E9%97%AD%20SQL%20%E4%BC%98%E5%8C%96%EF%BC%8C%E4%B8%8D%E7%84%B6%E6%9F%A5%E8%AF%A2%E6%80%BB%E6%95%B0%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AA%E4%BC%9A%E6%9F%A5%E8%AF%A2%E4%B8%BB%E8%A1%A8%0A%20%20%20%20page.setOptimizeCountSql(false)%3B%0A%20%20%20%20%2F%2F%20%E7%BB%84%E8%A3%85%E6%9F%A5%E8%AF%A2%E6%9D%A1%E4%BB%B6%20where%20age%20%3D%2020%0A%20%20%20%20QueryWrapper%3COrderVO%3E%20queryWrapper%20%3D%20new%20QueryWrapper%3C%3E()%3B%0A%20%20%20%20queryWrapper.ge(%22age%22%2C%2020)%3B%0A%0A%20%20%20%20IPage%3COrderVO%3E%20page1%20%3D%20userMapper.selectOrderPage(page%2C%20queryWrapper)%3B%0A%0A%20%20%20%20System.out.println(%22%E6%80%BB%E8%AE%B0%E5%BD%95%E6%95%B0%EF%BC%9A%22%20%2B%20page1.getTotal())%3B%0A%20%20%20%20System.out.println(%22%E6%80%BB%E5%85%B1%E5%A4%9A%E5%B0%91%E9%A1%B5%EF%BC%9A%22%20%2B%20page1.getPages())%3B%0A%20%20%20%20System.out.println(%22%E5%BD%93%E5%89%8D%E9%A1%B5%E7%A0%81%EF%BC%9A%22%20%2B%20page1.getCurrent())%3B%0A%20%20%20%20System.out.println(%22%E6%9F%A5%E8%AF%A2%E6%95%B0%E6%8D%AE%EF%BC%9A%22%20%2B%20page1.getRecords())%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token annotation punctuation\">@Autowired\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token annotation punctuation\">@Test\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">void\u003C\u002Fspan> \u003Cspan class=\"token function\">testSelectOrdersPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 查询第一页，每页显示 10 条\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">Page\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token keyword\">new\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Page\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">10\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 注意：一定要手动关闭 SQL 优化，不然查询总数的时候只会查询主表\u003C\u002Fspan>\n    page\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">setOptimizeCountSql\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token boolean\">false\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 组装查询条件 where age = 20\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> queryWrapper \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token keyword\">new\u003C\u002Fspan> \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    queryWrapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">ge\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"age\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page1 \u003Cspan class=\"token operator\">=\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">selectOrderPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>page\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> queryWrapper\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"总记录数：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getTotal\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"总共多少页：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getPages\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"当前页码：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getCurrent\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"查询数据：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getRecords\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>执行该单元测试，控制台打印实际执行 SQL 如下，可见分页功能也是 OK 的，先执行 \u003Ccode>select count(*)\u003C\u002Fcode> 查询记录总数，然后再执行关联分页查询：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167275192199796-CnDt.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>","\u003Cp>大家好。\u003C\u002Fp>\n\u003Cp>本小节中，我们将学习如何通过 Mybatis Plus 实现\u003Cem>多表关联查询\u003C\u002Fem>，以及\u003Cem>分页关联查询\u003C\u002Fem>。\u003C\u002Fp>\n\u003Ch2>表结构\u003C\u002Fh2>\n\u003Cp>本文以\u003Cem>查询用户所下订单\u003C\u002Fem>，来演示 Mybatis Plus 的关联查询，数据库表除了前面小节中已经定义好的用户表外，再额外创建一张订单表，然后插入一些测试数据，执行脚本如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>DROP TABLE IF EXISTS user;\n\nCREATE TABLE `t_user` (\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',\n  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',\n  `gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别，0：女 1：男',\n  PRIMARY KEY (`id`)\n) COMMENT = '用户表';\n\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (1, '张三', 30, 1);\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (2, '关羽', 46, 1);\nINSERT INTO `t_user` (`id`, `name`, `age`, `gender`) VALUES (3, '诸葛亮', 26, 1);\n\n\nCREATE TABLE `t_order` (\n  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '订单ID',\n  `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '下单用户ID',\n  `goods_name` varchar(30) NOT NULL COMMENT '商品名称',\n  `goods_price` decimal(10,2) NOT NULL COMMENT '商品价格',\n  PRIMARY KEY (`id`),\n  INDEX idx_order_id(`order_id`)\n) COMMENT = '订单表';\n\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (1, 805646264648356, 1, 'Switch 游戏机', 1400.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (2, 551787441310504, 1, '小米手机', 2000.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (3, 938562101633493, 2, '《三国演义》', 66.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (4, 791129917310894, 3, '华为手机', 1200.00);\nINSERT INTO `t_order` (`id`, `order_id`, `user_id`, `goods_name`, `goods_price`) VALUES (5, 208722395587361, 3, '《西游记》', 56.00);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>需求分析\u003C\u002Fh2>\n\u003Cp>假设前端需要展示数据有如下几个字段：订单号、商品名称、商品价格、下单用户姓名、下单用户年龄、下单用户性别：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273442141335-DKZI.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>则对应的关联 SQL 语句如下:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>select o.order_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>项目结构\u003C\u002Fh2>\n\u003Cp>先贴一张项目结构，下面所创建的类与文件可参考这里：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167275265792255-vHKr.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Ch2>实体类\u003C\u002Fh2>\n\u003Cp>接下来，我们定义实体类。创建一个 \u003Ccode>OrderVO\u003C\u002Fcode> 视图类，用于传输给前端展示：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F**\n * @author: 张三\n * @date: 2022-12-13 14:13\n * @version: v1.0.0\n * @description: TODO\n **\u002F\n@Data\npublic class OrderVO {\n\n    \u002F**\n     * 订单ID\n     *\u002F\n    private Long orderId;\n    \u002F**\n     * 下单用户ID\n     *\u002F\n    private Long userId;\n    \u002F**\n     * 商品名称\n     *\u002F\n    private String goodsName;\n\n    \u002F**\n     * 商品价格\n     *\u002F\n    private BigDecimal goodsPrice;\n\n    \u002F**\n     * 用户名\n     *\u002F\n    private String userName;\n    \u002F**\n     * 年龄\n     *\u002F\n    private Integer userAge;\n    \u002F**\n     * 性别\n     *\u002F\n    private Integer userGender;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>TIP： \u003Ccode>@Data\u003C\u002Fcode> 是 Lombok 注解，偷懒用的，加上它即可免写繁杂的 \u003Ccode>getXXX\u002FsetXXX\u003C\u002Fcode> 相关方法，不了解的小伙伴可自行搜索一下如何使用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>开始关联查询\u003C\u002Fh2>\n\u003Ch3>简单的关联查询\u003C\u002Fh3>\n\u003Cp>创建 \u003Ccode>UserMapper\u003C\u002Fcode> , 让其继承自 \u003Ccode>BaseMapper\u003C\u002Fcode> ， 并自定义一个查询订单列表的方法:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public interface UserMapper extends BaseMapper&lt;User&gt; {\n\t\u002F\u002F 查询订单列表\n\tList&lt;OrderVO&gt; selectOrders();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在项目的 \u003Ccode>resource\u003C\u002Fcode> 目录下新建 \u003Ccode>mapper\u003C\u002Fcode> 文件夹，并在 \u003Ccode>mapper\u003C\u002Fcode> 文件夹中创建 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273537700769-XTWq.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>\u003Ccode>UserMapper.xml\u003C\u002Fcode> 中编写关联语句，以及需要映射的对象，内容如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;\n&lt;!DOCTYPE mapper PUBLIC &quot;-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN&quot; &quot;http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd&quot; &gt;\n&lt;mapper namespace=&quot;com.mashangan.mybatisplusdemo.mapper.UserMapper&quot;&gt;\n\n    &lt;resultMap id=&quot;orderMap&quot; type=&quot;com.mashangan.mybatisplusdemo.model.OrderVO&quot;&gt;\n        &lt;result property=&quot;userName&quot; column=&quot;name&quot;\u002F&gt;\n        &lt;result property=&quot;userAge&quot; column=&quot;age&quot;\u002F&gt;\n        &lt;result property=&quot;userGender&quot; column=&quot;gender&quot;\u002F&gt;\n        &lt;result property=&quot;orderId&quot; column=&quot;order_id&quot;\u002F&gt;\n        &lt;result property=&quot;userId&quot; column=&quot;user_id&quot;\u002F&gt;\n        &lt;result property=&quot;goodsName&quot; column=&quot;goods_name&quot;\u002F&gt;\n        &lt;result property=&quot;goodsPrice&quot; column=&quot;goods_price&quot;\u002F&gt;\n    &lt;\u002FresultMap&gt;\n\n    &lt;select id=&quot;selectOrders&quot; resultMap=&quot;orderMap&quot;&gt;\n        select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n    &lt;\u002Fselect&gt;\n\n&lt;\u002Fmapper&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>创建完了 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件后，还需要在 \u003Ccode>applicatoin.yml\u003C\u002Fcode> 中添加如下配置，告诉 Mybatis Plus 框架去扫描这些 \u003Ccode>xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>mybatis-plus:\n  mapper-locations: classpath:\u002Fmapper\u002F*Mapper.xml\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273578903225-rNor.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>然后，创建一个单元测试看看好不好使:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@Autowired\nprivate UserMapper userMapper;\n\n@Test\nvoid testSelectOrders() {\n    List&lt;OrderVO&gt; orderVOS = userMapper.selectOrders();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>执行上面的单元测试，实际执行 SQL 为：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender from t_order as o left join t_user as u on o.user_id = u.id\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>返回数据如下：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167273708039640-XOsv.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n\u003Cp>到这里，一个简单的关联查询就搞定了。\u003C\u002Fp>\n\u003Ch3>带分页的关联查询\u003C\u002Fh3>\n\u003Cp>实际开发场景中，很多关联查询都需要结合分页一起使用，假设上面展示的数据需要分页展示，且需要支持条件查询，要怎么做呢？\u003C\u002Fp>\n\u003Ch4>定义关联查询分页方法\u003C\u002Fh4>\n\u003Cp>在 \u003Ccode>UserMapper\u003C\u002Fcode> 接口中再定义支持分页的关联查询方法：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public interface UserMapper extends BaseMapper&lt;User&gt; {\n\n\t\u002F\u002F...\n    IPage&lt;OrderVO&gt; selectOrderPage(IPage&lt;OrderVO&gt; page, @Param(Constants.WRAPPER) QueryWrapper&lt;OrderVO&gt; wrapper);\n    \u002F\u002F...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>TIP :  可以看到我们定义的关联分页查询和 Myatis Plus 内部提供的分页方法相差不大，仔细看入参，我们复用了 Mybatis Plus 内部提供的分页类\u003Ccode>IPage\u003C\u002Fcode>，以及 \u003Ccode>QueryWrapper\u003C\u002Fcode> （用于组装 \u003Ccode>where\u003C\u002Fcode> 条件）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>然后在 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 中创建该方法对应的关联查询：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;\n&lt;!DOCTYPE mapper PUBLIC &quot;-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN&quot; &quot;http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd&quot; &gt;\n&lt;mapper namespace=&quot;com.mashangan.mybatisplusdemo.mapper.UserMapper&quot;&gt;\n\n    &lt;resultMap id=&quot;orderMap&quot; type=&quot;com.mashangan.mybatisplusdemo.model.OrderVO&quot;&gt;\n        &lt;result property=&quot;userName&quot; column=&quot;name&quot;\u002F&gt;\n        &lt;result property=&quot;userAge&quot; column=&quot;age&quot;\u002F&gt;\n        &lt;result property=&quot;userGender&quot; column=&quot;gender&quot;\u002F&gt;\n        &lt;result property=&quot;orderId&quot; column=&quot;order_id&quot;\u002F&gt;\n        &lt;result property=&quot;userId&quot; column=&quot;user_id&quot;\u002F&gt;\n        &lt;result property=&quot;goodsName&quot; column=&quot;goods_name&quot;\u002F&gt;\n        &lt;result property=&quot;goodsPrice&quot; column=&quot;goods_price&quot;\u002F&gt;\n    &lt;\u002FresultMap&gt;\n\n\t\u002F\u002F...\n\t\n    &lt;select id=&quot;selectOrderPage&quot; resultMap=&quot;orderMap&quot;&gt;\n        select u.name, u.age, u.gender, o.order_id, o.goods_name, o.goods_price\n        from t_user as u left join t_order as o on u.id = o.user_id\n        ${ew.customSqlSegment}\n    &lt;\u002Fselect&gt;\n\n\t\u002F\u002F...\n\n&lt;\u002Fmapper&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>再创建一个单元测试：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@Autowired\nprivate UserMapper userMapper;\n\n@Test\nvoid testSelectOrdersPage() {\n    \u002F\u002F 查询第一页，每页显示 10 条\n    Page&lt;OrderVO&gt; page = new Page&lt;&gt;(1, 10);\n    \u002F\u002F 注意：一定要手动关闭 SQL 优化，不然查询总数的时候只会查询主表\n    page.setOptimizeCountSql(false);\n    \u002F\u002F 组装查询条件 where age = 20\n    QueryWrapper&lt;OrderVO&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n    queryWrapper.ge(&quot;age&quot;, 20);\n\n    IPage&lt;OrderVO&gt; page1 = userMapper.selectOrderPage(page, queryWrapper);\n\n    System.out.println(&quot;总记录数：&quot; + page1.getTotal());\n    System.out.println(&quot;总共多少页：&quot; + page1.getPages());\n    System.out.println(&quot;当前页码：&quot; + page1.getCurrent());\n    System.out.println(&quot;查询数据：&quot; + page1.getRecords());\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>执行该单元测试，控制台打印实际执行 SQL 如下，可见分页功能也是 OK 的，先执行 \u003Ccode>select count(*)\u003C\u002Fcode> 查询记录总数，然后再执行关联分页查询：\u003C\u002Fp>\n\u003Cp>\n\u003Cimg src=\"\u002Fupload\u002F167275192199796-CnDt.jpg\" loading=\"lazy\">\n\u003C\u002Fp>\n13:T1066e,\u003Cp>大家好。\u003C\u002Fp>\n\u003Cp>本小节中，我们将学习如何通过 Mybatis Plus 实现\u003Cem>多表关联查询\u003C\u002Fem>，以及\u003Cem>分页关联查询\u003C\u002Fem>。\u003C\u002Fp>\n\u003Ch2 id=\"toc-0\">表结构\u003C\u002Fh2>\n\u003Cp>本文以\u003Cem>查询用户所下订单\u003C\u002Fem>，来演示 Mybatis Plus 的关联查询，数据库表除了前面小节中已经定义好的用户表外，再额外创建一张订单表，然后插入一些测试数据，执行脚本如下：\u003C\u002Fp>\n\u003Cdiv class=\"language-javascript\" data-ext=\"javascript\" data-code=\"DROP%20TABLE%20IF%20EXISTS%20user%3B%0A%0ACREATE%20TABLE%20%60t_user%60%20(%0A%20%20%60id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20AUTO_INCREMENT%20COMMENT%20'%E4%B8%BB%E9%94%AEID'%2C%0A%20%20%60name%60%20varchar(30)%20NOT%20NULL%20DEFAULT%20''%20COMMENT%20'%E5%A7%93%E5%90%8D'%2C%0A%20%20%60age%60%20int(11)%20NULL%20DEFAULT%20NULL%20COMMENT%20'%E5%B9%B4%E9%BE%84'%2C%0A%20%20%60gender%60%20tinyint(2)%20NOT%20NULL%20DEFAULT%200%20COMMENT%20'%E6%80%A7%E5%88%AB%EF%BC%8C0%EF%BC%9A%E5%A5%B3%201%EF%BC%9A%E7%94%B7'%2C%0A%20%20PRIMARY%20KEY%20(%60id%60)%0A)%20COMMENT%20%3D%20'%E7%94%A8%E6%88%B7%E8%A1%A8'%3B%0A%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(1%2C%20'%E5%BC%A0%E4%B8%89'%2C%2030%2C%201)%3B%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(2%2C%20'%E5%85%B3%E7%BE%BD'%2C%2046%2C%201)%3B%0AINSERT%20INTO%20%60t_user%60%20(%60id%60%2C%20%60name%60%2C%20%60age%60%2C%20%60gender%60)%20VALUES%20(3%2C%20'%E8%AF%B8%E8%91%9B%E4%BA%AE'%2C%2026%2C%201)%3B%0A%0A%0ACREATE%20TABLE%20%60t_order%60%20(%0A%20%20%60id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20AUTO_INCREMENT%20COMMENT%20'%E4%B8%BB%E9%94%AEID'%2C%0A%20%20%60order_id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20COMMENT%20'%E8%AE%A2%E5%8D%95ID'%2C%0A%20%20%60user_id%60%20bigint(20)%20UNSIGNED%20NOT%20NULL%20COMMENT%20'%E4%B8%8B%E5%8D%95%E7%94%A8%E6%88%B7ID'%2C%0A%20%20%60goods_name%60%20varchar(30)%20NOT%20NULL%20COMMENT%20'%E5%95%86%E5%93%81%E5%90%8D%E7%A7%B0'%2C%0A%20%20%60goods_price%60%20decimal(10%2C2)%20NOT%20NULL%20COMMENT%20'%E5%95%86%E5%93%81%E4%BB%B7%E6%A0%BC'%2C%0A%20%20PRIMARY%20KEY%20(%60id%60)%2C%0A%20%20INDEX%20idx_order_id(%60order_id%60)%0A)%20COMMENT%20%3D%20'%E8%AE%A2%E5%8D%95%E8%A1%A8'%3B%0A%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(1%2C%20805646264648356%2C%201%2C%20'Switch%20%E6%B8%B8%E6%88%8F%E6%9C%BA'%2C%201400.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(2%2C%20551787441310504%2C%201%2C%20'%E5%B0%8F%E7%B1%B3%E6%89%8B%E6%9C%BA'%2C%202000.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(3%2C%20938562101633493%2C%202%2C%20'%E3%80%8A%E4%B8%89%E5%9B%BD%E6%BC%94%E4%B9%89%E3%80%8B'%2C%2066.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(4%2C%20791129917310894%2C%203%2C%20'%E5%8D%8E%E4%B8%BA%E6%89%8B%E6%9C%BA'%2C%201200.00)%3B%0AINSERT%20INTO%20%60t_order%60%20(%60id%60%2C%20%60order_id%60%2C%20%60user_id%60%2C%20%60goods_name%60%2C%20%60goods_price%60)%20VALUES%20(5%2C%20208722395587361%2C%203%2C%20'%E3%80%8A%E8%A5%BF%E6%B8%B8%E8%AE%B0%E3%80%8B'%2C%2056.00)%3B%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-javascript\">\u003Cspan class=\"token constant\">DROP\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token constant\">IF\u003C\u002Fspan> \u003Cspan class=\"token constant\">EXISTS\u003C\u002Fspan> user\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">CREATE\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">AUTO_INCREMENT\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'主键ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">varchar\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token string\">''\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'姓名'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">int\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">11\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'年龄'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">tinyint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">DEFAULT\u003C\u002Fspan> \u003Cspan class=\"token number\">0\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'性别，0：女 1：男'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">PRIMARY\u003C\u002Fspan> \u003Cspan class=\"token constant\">KEY\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token string\">'用户表'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'张三'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'关羽'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">46\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_user\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">age\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">gender\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'诸葛亮'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">26\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\n\u003Cspan class=\"token constant\">CREATE\u003C\u002Fspan> \u003Cspan class=\"token constant\">TABLE\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">AUTO_INCREMENT\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'主键ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'订单ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">bigint\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">UNSIGNED\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'下单用户ID'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">varchar\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">30\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'商品名称'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">decimal\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">10\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">NOT\u003C\u002Fspan> \u003Cspan class=\"token constant\">NULL\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token string\">'商品价格'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">PRIMARY\u003C\u002Fspan> \u003Cspan class=\"token constant\">KEY\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan>\n  \u003Cspan class=\"token constant\">INDEX\u003C\u002Fspan> \u003Cspan class=\"token function\">idx_order_id\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">COMMENT\u003C\u002Fspan> \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token string\">'订单表'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">805646264648356\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'Switch 游戏机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1400.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">551787441310504\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'小米手机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">2000.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">938562101633493\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">2\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'《三国演义》'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">66.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">4\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">791129917310894\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'华为手机'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">1200.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token constant\">INSERT\u003C\u002Fspan> \u003Cspan class=\"token constant\">INTO\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">t_order\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">order_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">user_id\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_name\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token template-string\">\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003Cspan class=\"token string\">goods_price\u003C\u002Fspan>\u003Cspan class=\"token template-punctuation string\">`\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token constant\">VALUES\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">5\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">208722395587361\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">3\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">'《西游记》'\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">56.00\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Ch2 id=\"toc-1\">需求分析\u003C\u002Fh2>\n\u003Cp>假设前端需要展示数据有如下几个字段：订单号、商品名称、商品价格、下单用户姓名、下单用户年龄、下单用户性别：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273442141335-DKZI.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>则对应的关联 SQL 语句如下:\u003C\u002Fp>\n\u003Cdiv class=\"language-sql\" data-ext=\"sql\" data-code=\"select%20o.order_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%0A%20%20%20%20%20%20%20%20from%20t_order%20as%20o%20left%20join%20%20t_user%20as%20u%20on%20%20o.user_id%20%3D%20u.id%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-sql\">\u003Cspan class=\"token keyword\">select\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>gender\n        \u003Cspan class=\"token keyword\">from\u003C\u002Fspan> t_order \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> o \u003Cspan class=\"token keyword\">left\u003C\u002Fspan> \u003Cspan class=\"token keyword\">join\u003C\u002Fspan>  t_user \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> u \u003Cspan class=\"token keyword\">on\u003C\u002Fspan>  o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id \u003Cspan class=\"token operator\">=\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>id\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Ch2 id=\"toc-2\">项目结构\u003C\u002Fh2>\n\u003Cp>先贴一张项目结构，下面所创建的类与文件可参考这里：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167275265792255-vHKr.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Ch2 id=\"toc-3\">实体类\u003C\u002Fh2>\n\u003Cp>接下来，我们定义实体类。创建一个 \u003Ccode>OrderVO\u003C\u002Fcode> 视图类，用于传输给前端展示：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%2F**%0A%20*%20%40author%3A%20%E5%BC%A0%E4%B8%89%0A%20*%20%40from%3A%20%E5%85%AC%E4%BC%97%E5%8F%B7%EF%BC%9A%E5%BC%A0%E4%B8%89%2C%20%E7%BD%91%E7%AB%99%EF%BC%9Awww.mashangan.com%0A%20*%20%40date%3A%202022-12-13%2014%3A13%0A%20*%20%40version%3A%20v1.0.0%0A%20*%20%40description%3A%20TODO%0A%20**%2F%0A%40Data%0Apublic%20class%20OrderVO%20%7B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%AE%A2%E5%8D%95ID%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Long%20orderId%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E4%B8%8B%E5%8D%95%E7%94%A8%E6%88%B7ID%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Long%20userId%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%95%86%E5%93%81%E5%90%8D%E7%A7%B0%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20String%20goodsName%3B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%95%86%E5%93%81%E4%BB%B7%E6%A0%BC%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20BigDecimal%20goodsPrice%3B%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E7%94%A8%E6%88%B7%E5%90%8D%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20String%20userName%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E5%B9%B4%E9%BE%84%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Integer%20userAge%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E6%80%A7%E5%88%AB%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20Integer%20userGender%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token comment\">\u002F**\n * @author: 张三\n * @date: 2022-12-13 14:13\n * @version: v1.0.0\n * @description: TODO\n **\u002F\u003C\u002Fspan>\n\u003Cspan class=\"token annotation punctuation\">@Data\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">class\u003C\u002Fspan> \u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 订单ID\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Long\u003C\u002Fspan> orderId\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 下单用户ID\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Long\u003C\u002Fspan> userId\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 商品名称\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">String\u003C\u002Fspan> goodsName\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 商品价格\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BigDecimal\u003C\u002Fspan> goodsPrice\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token comment\">\u002F**\n     * 用户名\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">String\u003C\u002Fspan> userName\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 年龄\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan> userAge\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F**\n     * 性别\n     *\u002F\u003C\u002Fspan>\n    \u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan> userGender\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cblockquote>\n\u003Cp>TIP： \u003Ccode>@Data\u003C\u002Fcode> 是 Lombok 注解，偷懒用的，加上它即可免写繁杂的 \u003Ccode>getXXX\u002FsetXXX\u003C\u002Fcode> 相关方法，不了解的小伙伴可自行搜索一下如何使用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"toc-4\">开始关联查询\u003C\u002Fh2>\n\u003Ch3 id=\"toc-5\">简单的关联查询\u003C\u002Fh3>\n\u003Cp>创建 \u003Ccode>UserMapper\u003C\u002Fcode> , 让其继承自 \u003Ccode>BaseMapper\u003C\u002Fcode> ， 并自定义一个查询订单列表的方法:\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"public%20interface%20UserMapper%20extends%20BaseMapper%3CUser%3E%20%7B%0A%09%2F%2F%20%E6%9F%A5%E8%AF%A2%E8%AE%A2%E5%8D%95%E5%88%97%E8%A1%A8%0A%09List%3COrderVO%3E%20selectOrders()%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">interface\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> \u003Cspan class=\"token keyword\">extends\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BaseMapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">User\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\t\u003Cspan class=\"token comment\">\u002F\u002F 查询订单列表\u003C\u002Fspan>\n\t\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">selectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在项目的 \u003Ccode>resource\u003C\u002Fcode> 目录下新建 \u003Ccode>mapper\u003C\u002Fcode> 文件夹，并在 \u003Ccode>mapper\u003C\u002Fcode> 文件夹中创建 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273537700769-XTWq.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>\u003Ccode>UserMapper.xml\u003C\u002Fcode> 中编写关联语句，以及需要映射的对象，内容如下：\u003C\u002Fp>\n\u003Cdiv class=\"language-xml\" data-ext=\"xml\" data-code=\"%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%3E%0A%3C!DOCTYPE%20mapper%20PUBLIC%20%22-%2F%2Fmybatis.org%2F%2FDTD%20Mapper%203.0%2F%2FEN%22%20%22http%3A%2F%2Fmybatis.org%2Fdtd%2Fmybatis-3-mapper.dtd%22%20%3E%0A%3Cmapper%20namespace%3D%22com.mashangan.mybatisplusdemo.mapper.UserMapper%22%3E%0A%0A%20%20%20%20%3CresultMap%20id%3D%22orderMap%22%20type%3D%22com.mashangan.mybatisplusdemo.model.OrderVO%22%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userName%22%20column%3D%22name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userAge%22%20column%3D%22age%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userGender%22%20column%3D%22gender%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22orderId%22%20column%3D%22order_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userId%22%20column%3D%22user_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsName%22%20column%3D%22goods_name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsPrice%22%20column%3D%22goods_price%22%2F%3E%0A%20%20%20%20%3C%2FresultMap%3E%0A%0A%20%20%20%20%3Cselect%20id%3D%22selectOrders%22%20resultMap%3D%22orderMap%22%3E%0A%20%20%20%20%20%20%20%20select%20o.order_id%2C%20o.user_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%0A%20%20%20%20%20%20%20%20from%20t_order%20as%20o%20left%20join%20%20t_user%20as%20u%20on%20%20o.user_id%20%3D%20u.id%0A%20%20%20%20%3C%2Fselect%3E%0A%0A%3C%2Fmapper%3E%0A%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-xml\">\u003Cspan class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?>\u003C\u002Fspan>\n\u003Cspan class=\"token doctype\">\u003Cspan class=\"token punctuation\">&lt;!\u003C\u002Fspan>\u003Cspan class=\"token doctype-tag\">DOCTYPE\u003C\u002Fspan> \u003Cspan class=\"token name\">mapper\u003C\u002Fspan> \u003Cspan class=\"token name\">PUBLIC\u003C\u002Fspan> \u003Cspan class=\"token string\">\"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\u003C\u002Fspan> \u003Cspan class=\"token string\">\"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\"\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>mapper\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">namespace\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.mapper.UserMapper\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>resultMap\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">type\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.model.OrderVO\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userAge\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userGender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>gender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsPrice\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>resultMap\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>select\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>selectOrders\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">resultMap\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age, u.gender\n        from t_order as o left join  t_user as u on  o.user_id = u.id\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>select\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>mapper\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>创建完了 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 文件后，还需要在 \u003Ccode>applicatoin.yml\u003C\u002Fcode> 中添加如下配置，告诉 Mybatis Plus 框架去扫描这些 \u003Ccode>xml\u003C\u002Fcode> 文件：\u003C\u002Fp>\n\u003Cdiv class=\"language-yaml\" data-ext=\"yaml\" data-code=\"mybatis-plus%3A%0A%20%20mapper-locations%3A%20classpath%3A%2Fmapper%2F*Mapper.xml%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-yaml\">\u003Cspan class=\"token key atrule\">mybatis-plus\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan>\n  \u003Cspan class=\"token key atrule\">mapper-locations\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan> classpath\u003Cspan class=\"token punctuation\">:\u003C\u002Fspan>\u002Fmapper\u002F\u003Cspan class=\"token important\">*Mapper.xml\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273578903225-rNor.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>然后，创建一个单元测试看看好不好使:\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%40Autowired%0Aprivate%20UserMapper%20userMapper%3B%0A%0A%40Test%0Avoid%20testSelectOrders()%20%7B%0A%20%20%20%20List%3COrderVO%3E%20orderVOS%20%3D%20userMapper.selectOrders()%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token annotation punctuation\">@Autowired\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token annotation punctuation\">@Test\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">void\u003C\u002Fspan> \u003Cspan class=\"token function\">testSelectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> orderVOS \u003Cspan class=\"token operator\">=\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">selectOrders\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>执行上面的单元测试，实际执行 SQL 为：\u003C\u002Fp>\n\u003Cdiv class=\"language-sql\" data-ext=\"sql\" data-code=\"select%20o.order_id%2C%20o.user_id%2C%20o.goods_name%2C%20o.goods_price%2C%20u.name%2C%20u.age%2C%20u.gender%20from%20t_order%20as%20o%20left%20join%20t_user%20as%20u%20on%20o.user_id%20%3D%20u.id%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-sql\">\u003Cspan class=\"token keyword\">select\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>gender \u003Cspan class=\"token keyword\">from\u003C\u002Fspan> t_order \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> o \u003Cspan class=\"token keyword\">left\u003C\u002Fspan> \u003Cspan class=\"token keyword\">join\u003C\u002Fspan> t_user \u003Cspan class=\"token keyword\">as\u003C\u002Fspan> u \u003Cspan class=\"token keyword\">on\u003C\u002Fspan> o\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>user_id \u003Cspan class=\"token operator\">=\u003C\u002Fspan> u\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>id\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>返回数据如下：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167273708039640-XOsv.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>\n\u003Cp>到这里，一个简单的关联查询就搞定了。\u003C\u002Fp>\n\u003Ch3 id=\"toc-6\">带分页的关联查询\u003C\u002Fh3>\n\u003Cp>实际开发场景中，很多关联查询都需要结合分页一起使用，假设上面展示的数据需要分页展示，且需要支持条件查询，要怎么做呢？\u003C\u002Fp>\n\u003Ch4 id=\"toc-7\">定义关联查询分页方法\u003C\u002Fh4>\n\u003Cp>在 \u003Ccode>UserMapper\u003C\u002Fcode> 接口中再定义支持分页的关联查询方法：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"public%20interface%20UserMapper%20extends%20BaseMapper%3CUser%3E%20%7B%0A%0A%09%2F%2F...%0A%20%20%20%20IPage%3COrderVO%3E%20selectOrderPage(IPage%3COrderVO%3E%20page%2C%20%40Param(Constants.WRAPPER)%20QueryWrapper%3COrderVO%3E%20wrapper)%3B%0A%20%20%20%20%2F%2F...%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token keyword\">public\u003C\u002Fspan> \u003Cspan class=\"token keyword\">interface\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> \u003Cspan class=\"token keyword\">extends\u003C\u002Fspan> \u003Cspan class=\"token class-name\">BaseMapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">User\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n\n\t\u003Cspan class=\"token comment\">\u002F\u002F...\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token function\">selectOrderPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token annotation punctuation\">@Param\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Constants\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token constant\">WRAPPER\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> wrapper\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F...\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cblockquote>\n\u003Cp>TIP :  可以看到我们定义的关联分页查询和 Myatis Plus 内部提供的分页方法相差不大，仔细看入参，我们复用了 Mybatis Plus 内部提供的分页类\u003Ccode>IPage\u003C\u002Fcode>，以及 \u003Ccode>QueryWrapper\u003C\u002Fcode> （用于组装 \u003Ccode>where\u003C\u002Fcode> 条件）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>然后在 \u003Ccode>UserMapper.xml\u003C\u002Fcode> 中创建该方法对应的关联查询：\u003C\u002Fp>\n\u003Cdiv class=\"language-xml\" data-ext=\"xml\" data-code=\"%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%3E%0A%3C!DOCTYPE%20mapper%20PUBLIC%20%22-%2F%2Fmybatis.org%2F%2FDTD%20Mapper%203.0%2F%2FEN%22%20%22http%3A%2F%2Fmybatis.org%2Fdtd%2Fmybatis-3-mapper.dtd%22%20%3E%0A%3Cmapper%20namespace%3D%22com.mashangan.mybatisplusdemo.mapper.UserMapper%22%3E%0A%0A%20%20%20%20%3CresultMap%20id%3D%22orderMap%22%20type%3D%22com.mashangan.mybatisplusdemo.model.OrderVO%22%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userName%22%20column%3D%22name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userAge%22%20column%3D%22age%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userGender%22%20column%3D%22gender%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22orderId%22%20column%3D%22order_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22userId%22%20column%3D%22user_id%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsName%22%20column%3D%22goods_name%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Cresult%20property%3D%22goodsPrice%22%20column%3D%22goods_price%22%2F%3E%0A%20%20%20%20%3C%2FresultMap%3E%0A%0A%09%2F%2F...%0A%09%0A%20%20%20%20%3Cselect%20id%3D%22selectOrderPage%22%20resultMap%3D%22orderMap%22%3E%0A%20%20%20%20%20%20%20%20select%20u.name%2C%20u.age%2C%20u.gender%2C%20o.order_id%2C%20o.goods_name%2C%20o.goods_price%0A%20%20%20%20%20%20%20%20from%20t_user%20as%20u%20left%20join%20t_order%20as%20o%20on%20u.id%20%3D%20o.user_id%0A%20%20%20%20%20%20%20%20%24%7Bew.customSqlSegment%7D%0A%20%20%20%20%3C%2Fselect%3E%0A%0A%09%2F%2F...%0A%0A%3C%2Fmapper%3E%0A%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-xml\">\u003Cspan class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?>\u003C\u002Fspan>\n\u003Cspan class=\"token doctype\">\u003Cspan class=\"token punctuation\">&lt;!\u003C\u002Fspan>\u003Cspan class=\"token doctype-tag\">DOCTYPE\u003C\u002Fspan> \u003Cspan class=\"token name\">mapper\u003C\u002Fspan> \u003Cspan class=\"token name\">PUBLIC\u003C\u002Fspan> \u003Cspan class=\"token string\">\"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\u003C\u002Fspan> \u003Cspan class=\"token string\">\"http:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\"\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>mapper\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">namespace\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.mapper.UserMapper\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>resultMap\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">type\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>com.mashangan.mybatisplusdemo.model.OrderVO\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userAge\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>age\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userGender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>gender\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>order_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>userId\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>user_id\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsName\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_name\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>result\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">property\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goodsPrice\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">column\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>goods_price\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\u002F>\u003C\u002Fspan>\u003C\u002Fspan>\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>resultMap\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\t\u002F\u002F...\n\t\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>select\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">id\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>selectOrderPage\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan> \u003Cspan class=\"token attr-name\">resultMap\u003C\u002Fspan>\u003Cspan class=\"token attr-value\">\u003Cspan class=\"token punctuation attr-equals\">=\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>orderMap\u003Cspan class=\"token punctuation\">\"\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n        select u.name, u.age, u.gender, o.order_id, o.goods_name, o.goods_price\n        from t_user as u left join t_order as o on u.id = o.user_id\n        ${ew.customSqlSegment}\n    \u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>select\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\t\u002F\u002F...\n\n\u003Cspan class=\"token tag\">\u003Cspan class=\"token tag\">\u003Cspan class=\"token punctuation\">&lt;\u002F\u003C\u002Fspan>mapper\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>再创建一个单元测试：\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"%40Autowired%0Aprivate%20UserMapper%20userMapper%3B%0A%0A%40Test%0Avoid%20testSelectOrdersPage()%20%7B%0A%20%20%20%20%2F%2F%20%E6%9F%A5%E8%AF%A2%E7%AC%AC%E4%B8%80%E9%A1%B5%EF%BC%8C%E6%AF%8F%E9%A1%B5%E6%98%BE%E7%A4%BA%2010%20%E6%9D%A1%0A%20%20%20%20Page%3COrderVO%3E%20page%20%3D%20new%20Page%3C%3E(1%2C%2010)%3B%0A%20%20%20%20%2F%2F%20%E6%B3%A8%E6%84%8F%EF%BC%9A%E4%B8%80%E5%AE%9A%E8%A6%81%E6%89%8B%E5%8A%A8%E5%85%B3%E9%97%AD%20SQL%20%E4%BC%98%E5%8C%96%EF%BC%8C%E4%B8%8D%E7%84%B6%E6%9F%A5%E8%AF%A2%E6%80%BB%E6%95%B0%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AA%E4%BC%9A%E6%9F%A5%E8%AF%A2%E4%B8%BB%E8%A1%A8%0A%20%20%20%20page.setOptimizeCountSql(false)%3B%0A%20%20%20%20%2F%2F%20%E7%BB%84%E8%A3%85%E6%9F%A5%E8%AF%A2%E6%9D%A1%E4%BB%B6%20where%20age%20%3D%2020%0A%20%20%20%20QueryWrapper%3COrderVO%3E%20queryWrapper%20%3D%20new%20QueryWrapper%3C%3E()%3B%0A%20%20%20%20queryWrapper.ge(%22age%22%2C%2020)%3B%0A%0A%20%20%20%20IPage%3COrderVO%3E%20page1%20%3D%20userMapper.selectOrderPage(page%2C%20queryWrapper)%3B%0A%0A%20%20%20%20System.out.println(%22%E6%80%BB%E8%AE%B0%E5%BD%95%E6%95%B0%EF%BC%9A%22%20%2B%20page1.getTotal())%3B%0A%20%20%20%20System.out.println(%22%E6%80%BB%E5%85%B1%E5%A4%9A%E5%B0%91%E9%A1%B5%EF%BC%9A%22%20%2B%20page1.getPages())%3B%0A%20%20%20%20System.out.println(%22%E5%BD%93%E5%89%8D%E9%A1%B5%E7%A0%81%EF%BC%9A%22%20%2B%20page1.getCurrent())%3B%0A%20%20%20%20System.out.println(%22%E6%9F%A5%E8%AF%A2%E6%95%B0%E6%8D%AE%EF%BC%9A%22%20%2B%20page1.getRecords())%3B%0A%7D%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token annotation punctuation\">@Autowired\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">private\u003C\u002Fspan> \u003Cspan class=\"token class-name\">UserMapper\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token annotation punctuation\">@Test\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">void\u003C\u002Fspan> \u003Cspan class=\"token function\">testSelectOrdersPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan> \u003Cspan class=\"token punctuation\">{\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 查询第一页，每页显示 10 条\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">Page\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token keyword\">new\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Page\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">1\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">10\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 注意：一定要手动关闭 SQL 优化，不然查询总数的时候只会查询主表\u003C\u002Fspan>\n    page\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">setOptimizeCountSql\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token boolean\">false\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token comment\">\u002F\u002F 组装查询条件 where age = 20\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> queryWrapper \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token keyword\">new\u003C\u002Fspan> \u003Cspan class=\"token class-name\">QueryWrapper\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    queryWrapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">ge\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"age\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">20\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token class-name\">IPage\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">OrderVO\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> page1 \u003Cspan class=\"token operator\">=\u003C\u002Fspan> userMapper\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">selectOrderPage\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>page\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> queryWrapper\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"总记录数：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getTotal\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"总共多少页：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getPages\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"当前页码：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getCurrent\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n    \u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"查询数据：\"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> page1\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">getRecords\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\u003Cspan class=\"token punctuation\">}\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>执行该单元测试，控制台打印实际执行 SQL 如下，可见分页功能也是 OK 的，先执行 \u003Ccode>select count(*)\u003C\u002Fcode> 查询记录总数，然后再执行关联分页查询：\u003C\u002Fp>\n\u003Cp>\n\u003Cdiv class=\"img-loading\">\u003Cimg src=\"\u002Fupload\u002F167275192199796-CnDt.jpg\" loading=\"lazy\">\u003C\u002Fdiv>\n\u003C\u002Fp>"]