mirror of
https://github.com/cool-team-official/cool-admin-java-docs.git
synced 2026-10-07 12:58:39 +08:00
144 lines
83 KiB
HTML
144 lines
83 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>控制器 | Cool Admin</title>
|
||
<meta name="description" content="一个很酷的后台管理系统开发框架">
|
||
<meta name="generator" content="VitePress v1.6.3">
|
||
<link rel="preload stylesheet" href="/assets/style.BaGxxT1-.css" as="style">
|
||
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.DesQjko7.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.BAM3wGj3.js">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.BjhQB2K5.js">
|
||
<link rel="modulepreload" href="/assets/src_guide_controller.md.ChJ_NED0.lean.js">
|
||
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-96d1ba1f data-v-fbfa64bf><!--[--><!--]--><!--[--><span tabindex="-1" data-v-5d3e946a></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-5d3e946a>Skip to content</a><!--]--><!----><header class="VPNav" data-v-fbfa64bf data-v-1f7b0f5c><div class="VPNavBar has-sidebar top" data-v-1f7b0f5c data-v-511c2cc9><div class="wrapper" data-v-511c2cc9><div class="container" data-v-511c2cc9><div class="title" data-v-511c2cc9><div class="VPNavBarTitle has-sidebar" data-v-511c2cc9 data-v-211643ab><a class="title" href="/" data-v-211643ab><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-4d0b3a1f><!--]--><span data-v-211643ab>Cool Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-511c2cc9><div class="content-body" data-v-511c2cc9><!--[--><!--]--><div class="VPNavBarSearch search" data-v-511c2cc9><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-511c2cc9 data-v-d53bf4df><span id="main-nav-aria-label" class="visually-hidden" data-v-d53bf4df> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/introduce/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>介绍</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/guide/quick.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>教程</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://cool-js.com/plugin" target="_blank" rel="noreferrer" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>🔥插件市场</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/about/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>交流合作</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>v7.1.0</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/update.html" data-v-acee1e57><!--[--><span data-v-acee1e57>更新日志</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/plan.html" data-v-acee1e57><!--[--><span data-v-acee1e57>版本计划</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>更多</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool 官网</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-admin.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin(Nodejs版)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin Vue(前端)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://uni-docs.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Uni(基于uni-app跨端移动端开发)</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-511c2cc9 data-v-764c0058><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-764c0058 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-511c2cc9 data-v-d6e28fe5 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-511c2cc9 data-v-cc85dc96 data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-95325d79><span class="vpi-more-horizontal icon" data-v-95325d79></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><!----><!--[--><!--[--><!----><div class="group" data-v-cc85dc96><div class="item appearance" data-v-cc85dc96><p class="label" data-v-cc85dc96>主题</p><div class="appearance-action" data-v-cc85dc96><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-cc85dc96 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div></div></div><div class="group" data-v-cc85dc96><div class="item social-links" data-v-cc85dc96><div class="VPSocialLinks social-links-list" data-v-cc85dc96 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-511c2cc9 data-v-e08ccaba><span class="container" data-v-e08ccaba><span class="top" data-v-e08ccaba></span><span class="middle" data-v-e08ccaba></span><span class="bottom" data-v-e08ccaba></span></span></button></div></div></div></div><div class="divider" data-v-511c2cc9><div class="divider-line" data-v-511c2cc9></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-fbfa64bf data-v-3eeb2970><div class="container" data-v-3eeb2970><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-3eeb2970><span class="vpi-align-left menu-icon" data-v-3eeb2970></span><span class="menu-text" data-v-3eeb2970>菜单</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-3eeb2970 data-v-bd1fb31f><button data-v-bd1fb31f>回到顶部</button><!----></div></div></div><aside class="VPSidebar" data-v-fbfa64bf data-v-130e406e><div class="curtain" data-v-130e406e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-130e406e><span class="visually-hidden" id="sidebar-aria-label" data-v-130e406e> Sidebar Navigation </span><!--[--><!--[--><div class="ad" data-v-96d1ba1f><!--[--><!--]--></div><!--]--><!--]--><!--[--><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>介绍</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/show.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>演示</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/src.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>源码</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0 has-active" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>教程</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/quick.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dir.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>目录结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/ai.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai编码</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/flow.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai流程编排</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/plugin.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>扩展插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dev.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>开发方式</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 has-active" data-v-6092ddf2 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h3 class="text" data-v-6092ddf2>核心</h3><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/controller.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>控制器(controller)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/service.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>服务(service)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/db.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据库(db)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/cache.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>缓存(cache)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/upload.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>文件上传(file)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/exception.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>统一异常(exception)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/security.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>权限校验(security)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/initData.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据初始化(init)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/uniqueIDGen.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>分布式ID(id)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/lock.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>锁(lock)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/noRepeatSubmit.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>防重提交(submit)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/recordLog.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>请求日志(log)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/swagger.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>接口文档(swagger)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/tenant.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>多租户(tenant)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/i18n.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>国际化多语言(i18n)</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/deploy.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>部署项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>计划&更新</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/update.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>更新</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/plan.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>计划</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><!----><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/question/common.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/about/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>交流合作</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-fbfa64bf data-v-8d143afd><div class="VPDoc has-sidebar has-aside" data-v-8d143afd data-v-4d316cbc><!--[--><!--]--><div class="container" data-v-4d316cbc><div class="aside" data-v-4d316cbc><div class="aside-curtain" data-v-4d316cbc></div><div class="aside-container" data-v-4d316cbc><div class="aside-content" data-v-4d316cbc><div class="VPDocAside" data-v-4d316cbc data-v-c4200bf2><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-c4200bf2 data-v-beb6bc9f><div class="content" data-v-beb6bc9f><div class="outline-marker" data-v-beb6bc9f></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-beb6bc9f>页面导航</div><ul class="VPDocOutlineItem root" data-v-beb6bc9f data-v-c8fd7940><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-c4200bf2></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-4d316cbc><div class="content-container" data-v-4d316cbc><!--[--><!--]--><main class="main" data-v-4d316cbc><div style="position:relative;" class="vp-doc _src_guide_controller" data-v-4d316cbc><div><h1 id="控制器" tabindex="-1">控制器 <a class="header-anchor" href="#控制器" aria-label="Permalink to "控制器""></a></h1><p>所有的 controller 都继承自 BaseController,该父类已经实现了以下六个基础方法:add、delete、update、page、list、info,可以大大简化代码,使得 controller 更加简洁。</p><h2 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to "示例""></a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "/cool"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"add"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"delete"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"update"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"list"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"info"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>这样就默认实现了以下六个接口:</p><ul><li>POST 新增</li><li>POST 删除</li><li>POST 修改</li><li>POST 分页查询</li><li>POST 查询列表</li><li>GET 根据列表查询单个信息 等 6 个接口</li></ul><h2 id="查询配置" tabindex="-1">查询配置 <a class="header-anchor" href="#查询配置" aria-label="Permalink to "查询配置""></a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "/cool"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"add"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"delete"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"update"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"list"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"info"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setPageOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 分页查询配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">fieldEq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 字段全匹配,对应请求参数中同名参数</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">keyWordLikeFields</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"phone"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 需要模糊查询的字段,对应请求参数中的 keyWord</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"phone"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"age"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 返回字段</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(QueryWrapper.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">create</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 其他查询方式 具体看 https://mybatis-flex.com/zh/base/querywrapper.html文档</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setListOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 列表查询 跟分页查询一样</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>以上是针对Entity单表查询方式,如果我们有需要连表查询,查询另一张表的字段,这样就需要在Entity加上另一张表的的字段,针对这种场景,我们可以使用 自定义的查询方式</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AppMarketCouponUserController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">MarketCouponUserService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">MarketCouponUserEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setPageOption</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createOp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_INFO_ENTITY.ALL_COLUMNS,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MARKET_COUPON_USER_ENTITY.STATUS.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"useStatus"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 查询连表字段</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> QueryWrapper.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">create</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">leftJoin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_INFO_ENTITY) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// leftJoin 连表查询</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY.USER_ID.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">eq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CoolSecurityUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getCurrentUserId</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">and</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MARKET_COUPON_USER_ENTITY.COUPON_ID.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">eq</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MARKET_COUPON_INFO_ENTITY.ID))))</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">queryModeEnum</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(QueryModeEnum.CUSTOM) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 自定义查询模式,默认为ENTITY 实体,自定义场景主要使用在关联表查询插件,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 需要返回的字段分布在各个表里,需要组装数据,通过这种方式,就不需要在entity 中加非存储数据库的字段;默认转成map,注意如果该表有json字段,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 需要通过下面的 transform 手动进行转换</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">asType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(Map.class) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 默认为Map,也可以自己定义VO</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">transform</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(o </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Map map </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (Map) o; </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 没有设置asType ,自定义类型默认为 map</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (ObjUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">isNotEmpty</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"condition"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">put</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"condition"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> JSONUtil.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">toBean</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(map.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">get</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"condition"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">toString</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), Map.class));</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> })); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 其他查询方式 具体看 https://mybatis-flex.com/zh/base/querywrapper.html文档</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>查询模式queryModeEnum 还有 ENTITY_WITH_RELATIONS, 实体中 使用了关联查询 @RelationOneToMany 如下面这个订单查询,订单产品列表也一并查出</p><p>关联查询用法参考:<a href="https://mybatis-flex.com/zh/base/relations-query.html" target="_blank" rel="noreferrer">https://mybatis-flex.com/zh/base/relations-query.html</a></p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Getter</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Setter</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Table</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "order_info"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">comment</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "订单信息"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> OrderInfoEntity</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">OrderInfoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Index</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">ColumnDefine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">comment</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "用户ID"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">notNull</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> private</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Long userId;</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ......</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 订单商品列表</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Ignore</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Column</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">ignore</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">RelationOneToMany</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">selfField</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">targetField</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "orderId"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> private</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> List<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">OrderGoodsEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> goodsList;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="请求参数" tabindex="-1">请求参数 <a class="header-anchor" href="#请求参数" aria-label="Permalink to "请求参数""></a></h2><p>为了方便获取参数,框架封装了一个请求属性,将 URL、表单、body</p><p>等参数封装在了一个 JSONObject requestParams,开发者可以从中方便的获取各种参数;</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "/cool"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"add"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"delete"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"update"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"list"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"info"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">PostMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/test"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">test</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">RequestAttribute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestparams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, String </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestparams.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getStr</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">));</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ok</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="重写实现" tabindex="-1">重写实现 <a class="header-anchor" href="#重写实现" aria-label="Permalink to "重写实现""></a></h2><p>默认实现了通用的六个接口方法,如果不满足需求,可以在对应的 service 中重写方法。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">description</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "测试CURD"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">value</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "/cool"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"add"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"delete"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"update"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"list"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"info"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AdminDemoInfoController</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> init</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(HttpServletRequest </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 可以在这边实现一下列表数据排序规则,查询条件过滤,返回哪些字段等</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">PostMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"/page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> R </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, CrudOption<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">option</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 重写逻辑</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestParams, option);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>同样也可以对 service 进行重写</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Service</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DemoServiceImpl</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> BaseServiceImpl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoMapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">implements</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DemoService</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Object </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(JSONObject </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">requestParams</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, Page<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, QueryWrapper<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">DemoEntity</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">queryWrapper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 重写逻辑</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">page</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(requestParams, page, queryWrapper);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>和传统的 controller 对比一下是简化了不少,接下来我们看看实现的原理</p><h1 id="原理" tabindex="-1">原理 <a class="header-anchor" href="#原理" aria-label="Permalink to "原理""></a></h1><h2 id="接口路由规则" tabindex="-1">接口路由规则 <a class="header-anchor" href="#接口路由规则" aria-label="Permalink to "接口路由规则""></a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>// 模块目录</span></span>
|
||
<span class="line"><span>├── modules</span></span>
|
||
<span class="line"><span>│ └── demo(模块名)</span></span>
|
||
<span class="line"><span>│ │ └── controller(接口)</span></span>
|
||
<span class="line"><span>│ │ │ └── admin(后端接口)</span></span>
|
||
<span class="line"><span>│ │ │ │ └── AdminDemoInfoController.java</span></span>
|
||
<span class="line"><span>│ │ │ └── app(前端接口)</span></span>
|
||
<span class="line"><span>│ │ │ │ └── AppDemoInfoController.java</span></span></code></pre></div><ul><li>生成的路由前缀为: /admin/demo/info/xxx 与/app/demo/info/xxx</li><li>规则为: admin(app)/模块名/AdminDemoInfoController 转成小写替换掉 admin(app)、模块名和 controller 如果在 AdminDemoInfoController.java 同级下有个 AdminDemoUserInfoController.java文件</li></ul><p>该接口解析的前缀则是 /admin/demo/user/info/xxx</p><div class="warning custom-block"><p class="custom-block-title">注意</p><p>这个解析规则在 v7.1.3(2024-08-25) 版本才有,在历史版本中需在 admin 包下加一级 user 包,否则这个controller eps识别不了</p></div><h2 id="自定义路由注解" tabindex="-1">自定义路由注解 <a class="header-anchor" href="#自定义路由注解" aria-label="Permalink to "自定义路由注解""></a></h2><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">interface</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">AliasFor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">annotation</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMapping.class)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> String </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ""</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">AliasFor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">annotation</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMapping.class)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {};</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">api</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {};</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="重写-getmappingformethod" tabindex="-1">重写 getMappingForMethod <a class="header-anchor" href="#重写-getmappingformethod" aria-label="Permalink to "重写 getMappingForMethod""></a></h2><p>我们不直接使用 spring 自带的注解,而是对它做一层封装,controller 上加了这个注解后</p><p>将由以下这个类实现自动配置模块路由,该类继承了 spring 的 RequestMappingHandlerMapping,并重写了 getMappingForMethod 方法</p><p>根据一定规则生成 path,返回给 spring 做解析。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AutoPrefixUrlMapping</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> extends</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> RequestMappingHandlerMapping</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> @</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">Override</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> protected</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMappingInfo </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getMappingForMethod</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(Method </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">method</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, Class<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">handlerType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> CoolRestController</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[] annotations </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> handlerType.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getAnnotationsByType</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(CoolRestController.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> RequestMappingInfo info </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> super</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getMappingForMethod</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(method, handlerType);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ... 按规则组装 path</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mutate</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">paths</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(path).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">build</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">combine</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(info);</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-4d316cbc data-v-35768638><!--[--><!--]--><div class="edit-info" data-v-35768638><div class="edit-link" data-v-35768638><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/cool-team-official/cool-admin-java-docs/blob/main/src/guide/controller.md" target="_blank" rel="noreferrer" data-v-35768638><!--[--><span class="vpi-square-pen edit-link-icon" data-v-35768638></span> 在GitHub上编辑<!--]--></a></div><div class="last-updated" data-v-35768638><p class="VPLastUpdated" data-v-35768638 data-v-32a58613>最后更新于: <time datetime="2024-09-08T13:41:34.000Z" data-v-32a58613></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-35768638><span class="visually-hidden" id="doc-footer-aria-label" data-v-35768638>Pager</span><div class="pager" data-v-35768638><a class="VPLink link pager-link prev" href="/src/guide/dev.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>上一页</span><span class="title" data-v-35768638>开发方式</span><!--]--></a></div><div class="pager" data-v-35768638><a class="VPLink link pager-link next" href="/src/guide/service.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>下一页</span><span class="title" data-v-35768638>服务(service)</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-fbfa64bf data-v-45624e61><div class="container" data-v-45624e61><p class="message" data-v-45624e61>COOL为开发者而生</p><p class="copyright" data-v-45624e61><a href="https://beian.miit.gov.cn">Copyright © COOL | 闽ICP备2024042701号</a></p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"index.md\":\"Dsd7aigo\",\"readme.md\":\"Rd2D_BZq\",\"src_about_index.md\":\"-unb0L2u\",\"src_guide_ai.md\":\"aIl2n3N7\",\"src_guide_cache.md\":\"DYexoE7d\",\"src_guide_controller.md\":\"ChJ_NED0\",\"src_guide_db.md\":\"CH-r16iF\",\"src_guide_deploy.md\":\"CVc1dXEU\",\"src_guide_dev.md\":\"DM1UjwvK\",\"src_guide_dir.md\":\"Bywk12Mo\",\"src_guide_exception.md\":\"1HCd76m1\",\"src_guide_flow.md\":\"DMDsOCkF\",\"src_guide_i18n.md\":\"D4ikqxxm\",\"src_guide_initdata.md\":\"BhdPvNop\",\"src_guide_lock.md\":\"C8JTDlsP\",\"src_guide_norepeatsubmit.md\":\"CvFjLc1r\",\"src_guide_plugin.md\":\"DSQp6REO\",\"src_guide_quick.md\":\"g_DIbvkh\",\"src_guide_recordlog.md\":\"B0w4IZH7\",\"src_guide_security.md\":\"BFmZQZP9\",\"src_guide_service.md\":\"CokY9neI\",\"src_guide_swagger.md\":\"CCfA6TBH\",\"src_guide_tenant.md\":\"CP_z92JB\",\"src_guide_uniqueidgen.md\":\"BNiKKfQz\",\"src_guide_upload.md\":\"D-dQqFKU\",\"src_introduce_index.md\":\"BaUz4Xtw\",\"src_introduce_show.md\":\"Ck0DuCIX\",\"src_introduce_src.md\":\"UlNmfnNt\",\"src_question_common.md\":\"Caojqqth\",\"src_todo_plan.md\":\"pGnBM6_r\",\"src_todo_update.md\":\"DUbMUQW8\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Cool Admin\",\"description\":\"一个很酷的后台管理系统开发框架\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"COOL为开发者而生\",\"copyright\":\"<a href=\\\"https://beian.miit.gov.cn\\\">Copyright © COOL | 闽ICP备2024042701号</a>\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"outline\":{\"label\":\"页面导航\",\"level\":[2,3]},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}},\"langMenuLabel\":\"多语言\",\"returnToTopLabel\":\"回到顶部\",\"sidebarMenuLabel\":\"菜单\",\"darkModeSwitchLabel\":\"主题\",\"lightModeSwitchTitle\":\"切换到浅色模式\",\"darkModeSwitchTitle\":\"切换到深色模式\",\"editLink\":{\"text\":\"在GitHub上编辑\",\"pattern\":\"https://github.com/cool-team-official/cool-admin-java-docs/blob/main/:path\"},\"nav\":[{\"text\":\"介绍\",\"link\":\"/src/introduce/index.md\",\"noIcon\":false},{\"text\":\"教程\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"🔥插件市场\",\"link\":\"https://cool-js.com/plugin\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"},{\"text\":\"v7.1.0\",\"items\":[{\"text\":\"更新日志\",\"link\":\"/src/todo/update.md\"},{\"text\":\"版本计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"更多\",\"items\":[{\"text\":\"Cool 官网\",\"link\":\"https://cool-js.com\"},{\"text\":\"Cool Admin(Nodejs版)\",\"link\":\"https://node.cool-admin.com\"},{\"text\":\"Cool Admin Vue(前端)\",\"link\":\"https://node.cool-js.com\"},{\"text\":\"Uni(基于uni-app跨端移动端开发)\",\"link\":\"https://uni-docs.cool-js.com\"}]}],\"sidebar\":[{\"text\":\"介绍\",\"items\":[{\"text\":\"简介\",\"link\":\"/src/introduce/index.md\"},{\"text\":\"演示\",\"link\":\"/src/introduce/show.md\"},{\"text\":\"源码\",\"link\":\"/src/introduce/src.md\"}]},{\"text\":\"教程\",\"items\":[{\"text\":\"快速开始\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"目录结构\",\"link\":\"/src/guide/dir.md\"},{\"text\":\"Ai编码\",\"link\":\"/src/guide/ai.md\"},{\"text\":\"Ai流程编排\",\"link\":\"/src/guide/flow.md\"},{\"text\":\"扩展插件\",\"link\":\"/src/guide/plugin.md\"},{\"text\":\"开发方式\",\"link\":\"/src/guide/dev.md\"},{\"text\":\"核心\",\"items\":[{\"text\":\"控制器(controller)\",\"link\":\"/src/guide/controller.md\"},{\"text\":\"服务(service)\",\"link\":\"/src/guide/service.md\"},{\"text\":\"数据库(db)\",\"link\":\"/src/guide/db.md\"},{\"text\":\"缓存(cache)\",\"link\":\"/src/guide/cache.md\"},{\"text\":\"文件上传(file)\",\"link\":\"/src/guide/upload.md\"},{\"text\":\"统一异常(exception)\",\"link\":\"/src/guide/exception.md\"},{\"text\":\"权限校验(security)\",\"link\":\"/src/guide/security.md\"},{\"text\":\"数据初始化(init)\",\"link\":\"/src/guide/initData.md\"},{\"text\":\"分布式ID(id)\",\"link\":\"/src/guide/uniqueIDGen.md\"},{\"text\":\"锁(lock)\",\"link\":\"/src/guide/lock.md\"},{\"text\":\"防重提交(submit)\",\"link\":\"/src/guide/noRepeatSubmit.md\"},{\"text\":\"请求日志(log)\",\"link\":\"/src/guide/recordLog.md\"},{\"text\":\"接口文档(swagger)\",\"link\":\"/src/guide/swagger.md\"},{\"text\":\"多租户(tenant)\",\"link\":\"/src/guide/tenant.md\"},{\"text\":\"国际化多语言(i18n)\",\"link\":\"/src/guide/i18n.md\"}]},{\"text\":\"部署项目\",\"link\":\"/src/guide/deploy.md\"}]},{\"text\":\"计划&更新\",\"items\":[{\"text\":\"更新\",\"link\":\"/src/todo/update.md\"},{\"text\":\"计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"常见问题\",\"link\":\"/src/question/common.md\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/cool-team-official/cool-admin-java\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||
|
||
</body>
|
||
</html> |