4月
layui

页面层是在里面写html代码
iframe层是另外一个html页面
js
1.拼接数组和对象
首先一个最好用的方法,就是扩展运算符...,对象和数组都可以用的
[...arr1 , ...arr2 , ...arr3];
{..obj1 , ...obj2 , ...obj3}
这是ES6的方法,下面介绍ES5的方法,这个就不是共用的了
首先是数组的拼接方法concat
arr1.concat(arr2,arr3)
再就是对象的拼接方法:
Object.assign(obj1,obj2,obj3)
————————————————
版权声明:本文为CSDN博主「Zhou_xiaoqian」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Zhou_xiaoqian/article/details/79867577
2.对象操作
var a={"id":1,"name":"danlis"};
//添加属性
a.age=18;
console.log(a);
//结果:Object { id: 1, name: "danlis", age: 18 }
//修改属性
a.age="我怎么知道";
//结果:Object { id: 1, name: "danlis", age: "我怎么知道" }
delete a.age;
//结果:Object { id: 1, name: "danlis" }
3.页面传值
localStorage方式
视频https://www.bilibili.com/video/BV1Ni4y1A7ow?from=search&seid=17301510451121977814
前端的数据库,存储在浏览器中,大概有5M的空间



AAAAAA页面
<body>
<h1>aaa</h1>
</body>
</html>
<script>
let x = [123,344534,24323]
let duixiang = {name:"zhangsan"}
localStorage.setItem('xxx',x)
localStorage.setItem("duixiang",duixiang)
</script>
BBBBBB页面
<body>
<h1>BBB</h1>
</body>
</html>
<script>
// localStorage.removeItem('xxx')
console.log(localStorage.getItem('xxx'))
console.log( localStorage.getItem('duixiang'))
console.log(localStorage.length)
localStorage.clear()
console.log(localStorage.length)
</script>
4.JS 中判断空值 undefined 和 null
var exp = undefined;
if (typeof(exp) == "undefined")
{
alert("undefined");
}
var exp = null;
if (!exp && typeof(exp)!=”undefined” && exp!=0)
{
alert(“is null”);
}
5.setTimeout和setInterval

settimeout 里面全部写成函数的形式,其他会出现乱七八糟的不知道什么原因的问题
setTimeout(()=>console.log(1),1000);
6.添加标签
function load(src, resolve) {
let script = document.createElement("script");
script.src = src;
script.onload = resolve;
document.body.appendChild(script);
}
load("js/hd.js", () => {
load("js/houdunren.js", () => {
houdunren();
load("js/a.js", () => {
houdunren();
});
});
});
7.任务优先级
宏任务,微任务,主线程
宏任务:任务队列里面的,异步的
微任务:promise里面的
主线程:同步的任务
主线程>微任务>宏任务
promise里面的代码也是主任务里面的,then回调函数才是微任务列表
setTimeout(() => {
console.log("setTimeout");
}, 0);//异步,宏任务
new Promise(resolve => {
resolve();//同步
console.log("promise");//同步
}).then(value => console.log("成功"));//异步,微任务
console.log("后盾人");//同步

8.promise基本语法
//状态改变执行then方法
// 最开始的样子,一个promise,后面跟两个then,成功的回调和失败的回调
// 这里没有成功还是失败,会一直等
new Promise((resolve, reject) => {
})
.then(value => {
console.log(value)
})
.then(reason => {
console.log(reason);
});
//成功失败,只能写一个,如果都写执行上面的状态,并且不再执行下面的状态以及他的回调
new Promise((resolve, reject) => {
// resolve("一瓶可乐");
reject("涨价了,买不起了");
})
.then(value => {
console.log(value)
})
.then(reason => {
console.log(reason);
});
//如果只关注成功或者失败,可以只写一个then,但是两个状态都要接收,可以填写null,第个参数成功,第二个参数失败
new Promise((resolve, reject) => {
// resolve("一瓶可乐");
reject("涨价了,买不起了");
})
.then(null, a => {
console.log(`处理了失败的状态,${a}`);
})
// .then(null, reason => {
// console.log(reason);
// });
//捕获错误
.catch(error => {})
//不论成功还是失败,最后都会执行的
.finally(() => {
loading.style.display = "none";
});
//给promise 加上return 返回的也是一个promise对象,就可以在最后接着写then成功的回调了,这个then是上一个promise的回调,就不是reject失败的时候的回调了,需要用catch接收错误信息
9.函数给默认值
function interval(delay=1000){
return new Promise((resolve,reject)=>{
let id = setInterval(()=>{
console.log(1)
},delay)
})
}
interval()//这里不给值,他会使用默认的1000,每隔1000mm输出1
interval(100)//这里给值,他会用这里给的,不用默认值,每隔100mm输出1
10.多多练习
<!DOCTYPE html><html lang="en"><head> <title>Document</title> <style> #div { width: 200px; height: 200px; background-color: #bfa; position: absolute; } </style></head><body> <div id="div"></div> <script> function interval(delay = 1000, callback) { return new Promise((resolve, reject) => { let id = setInterval(() => { callback(id, resolve) }, delay) }) } interval(100, (id, resolve) => { const div = document.getElementById("div"); let left = parseInt(window.getComputedStyle(div).left); div.style.left = left + 10 + "px"; if (left > 200) { clearInterval(id); resolve(div); } }).then(div => { return interval(100, (id, resolve) => { let width = parseInt(window.getComputedStyle(div).width); div.style.width = width - 10 + "px"; if(width<=40){ clearInterval(id); resolve(div); } }) }).then(div=>{ div.style.backgroundColor = 'red' }) </script></body></html>

11.async await
async 相当于 new promise
await 相当于 then
await 也是一个微任务
await 只能在 async函数里面才能写
12.await同时请求
function p1() { return new Promise(resolve => { setTimeout(() => { resolve("houdunren"); }, 2000); }); } function p2() { return new Promise(resolve => { setTimeout(() => { resolve("hdcms"); }, 2000); }); } async function hd() { let res = await Promise.all([p1(), p2()]); console.log(res); // let h1 = p1(); // console.log(h1); // let h2 = p2(); // let h1value = await h1; //then // let h2value = await h2; // console.log(h1value, h2value); // console.log(h2); // setTimeout(() => { // console.log(h1, h2); // }, 2000); } hd();
13.很好的执行顺序的问题,宏任务微任务,promise async await
async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end');}async function async2() { console.log('async2');}console.log('script start');setTimeout(() => { console.log('setTimeOut');}, 0);async1();new Promise(function (reslove) { console.log('promise1'); reslove();}).then(function () { console.log('promise2');})console.log('script end');


promise、async/await
首先,new Promise是同步的任务,会被放到主进程中去立即执行。而.then()函数是异步任务会放到异步队列中去,那什么时候放到异步队列中去呢?当你的promise状态结束的时候,就会立即放进异步队列中去了。
带async关键字的函数会返回一个promise对象,如果里面没有await,执行起来等同于普通函数;如果没有await,async函数并没有很厉害是不是
await 关键字要在 async 关键字函数的内部,await 写在外面会报错;await如同他的语意,就是在等待,等待右侧的表达式完成。此时的await会让出线程,阻塞async内后续的代码,先去执行async外的代码。等外面的同步代码执行完毕,才会执行里面的后续代码。就算await的不是promise对象,是一个同步函数,也会等这样操作
14.async await promise 定时器效果,每隔一秒输出数组中的数字
let arr = [1,2,3,4] async function sleep() { return new Promise(resolve => { setTimeout(() => { resolve() }, 1000) }) } (async () => { for(let i in arr){ await sleep (); console.log(arr[i]); } })()
15.promise return
promise 前面最好都要加return
需要用到promise的回调的时候要加return
加了return 不用就是了,
16.filter 数组中过滤对象
filter 过滤返回新的数组
find找到一个符合的就返回它
some有符合的就返回true,不会继续执行
every有不符合的就返回false,不继续执行,否则遍历完返回true
1、filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
原数组不变
不会对空数组进行检测
let arr1 = [1,2,3,4]let arr2 = arr1.filter(item=>item===1)console.log(arr1, 'arr1') // [1,2,3,4] arr1console.log(arr2, 'arr2') // [1] arr2 let arr3 = [{ id:1, name:'aa', desc: 'aaaa' },{ id:2, name:'bb' },{ id:3, name: 'aa' }]let arr4 = arr3.filter(item=>item.name === 'aa')console.log(arr4, 'arr4') // [{id:1,name:'aa', desc:'aaaa'},{id:3,name:'aa'}] arr4
2、find() 对于空数组,函数是不会执行的。
不会改变原数组
返回符合测试条件的第一个数组元素值找到就返回不会继续执行
let arr5 = [1,2,1,3,4,5]let arr6 = arr5.find(item=>item===1)console.log(arr6, 'arr6') // 1 arr6let arr7 = arr3.find(item=>item.name === 'aa')console.log(arr7, 'arr7') // {id:1,name:'aa',desc:'aaaa'} arr7
3、some 用于检测数组中的元素是否满足指定条件
会依次执行数组的每个元素-如果有一个元素满足条件(即只要有条件满足即可相当于或),则表达式返回true , 剩余的元素不会再执行检测,如果没有满足条件的元素,则返回false
let someArr1 = [1,2,3,4] let someArr2 = someArr1.some(item=>item === 1) console.log(someArr2, 'someArr1') // true someArr1 let someArr4 = [{ id:1, name:'bb' },{ id:4, name:'cc' },{ id:1, name:'dd' }] let someArr3 = someArr4.find(info=>{ return arr3.some(item=>item.id === info.id) }) console.log(someArr3) // {id:1,name:'bb'}
4、every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)
every() 方法使用指定函数检测数组中的所有元素-如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测,如果所有元素都满足条件,则返回 true
let everyArr = [1,2,3,4]let everyArr2 = everyArr.every(item=>item===1)console.log(everyArr2, 'everyArr2') //false "everyArr2"
filter经常和indexof一起用截取字符串
比如我这里想要通过layers字符串判断是包含line还是包含point
let arr = [ { pid: 900, name: "管线", type: "3dtiles", }, { pid: 900, name: "管线", type: "3dtiles", }, { pid: 600, name: "管道线", type: "wms", layers: "dixiaguandao:gd_line" } , { pid: 600, name: "管道点", type: "wms", visible: true} , { pid: 600, name: "路灯线", type: "wms", visible: true ,layers: "dixiaguandao:ld_line" } , { pid: 600, name: "路灯点", type: "wms",visible: true, layers: "dixiaguandao:ld_point" } , { pid: 600, name: "建设线", type: "wms", visible: true, layers: "dixiaguandao:js_line" } , { pid: 600, name: "建设点", type: "wms", visible: true, layers: "dixiaguandao:js_point" } , { pid: 600, name: "新型线", type: "wms", visible: false, layers: "dixiaguandao:xx_line" } , { pid: 600, name: "新型点", type: "wms", visible: true, layers: "dixiaguandao:xx_point" } ]function getLayers() { let arr = viewer.gisdata.config.operationallayers; let arr1 = arr.filter(item=>{ return item.pid == 600 && item.visible ==true });//通过pid和visible过滤数组 let arr2 = []; for (let i = 0 ;i<arr1.length;i++){ arr2.push(arr1[i].layers.split(':')[1]); }//取到layers通过:截取:后面的组成数组 if (pointOrLine == '管点'){ layerNameArr = arr2.filter(item=>{ return item.indexOf('point')!==-1 }) }else{ layerNameArr = arr2.filter(item=>{ return item.indexOf('line')!==-1 }) }//如果是‘管点’,带有point的组成数组layerNameArr;否则带line的组成数组layerNameArr console.log("layernamearr=========="+layerNameArr); return layerNameArr;}

17.不要用for in 遍历数组会出问题
注意:for..in循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误
不要用for in 遍历数组
我们在学习js中遍历数组的有两种方式
代码:
var array=['a']
//标准的for循环
for(var i=1;i<array.length;i++){
alert(array[i])
}
//foreach循环
for(var i in array){
alert(array[i])
}
正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一个区别
标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。自己试试 alert(typeof i);这个区别是小问题。现在我加上如下代码,上面的执行结果就不一样了。
代码
//扩展了js原生的Array
Array.prototype.test=function()
}
我们发现标准的for循环任然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。这就是for与foreach遍历数组的最大区别,如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。
建议
1.不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array)
2.如果要对js的原生类扩展的时候,不要采用prototype了
转载于:https://www.cnblogs.com/Ma-lulu/p/5724376.html
相关资源:javascript数组**遍历for与for in区别详解
18.js 中filter 什么时候加return
结论:写了{}里面的要return,没写{}不加return
大概是写在{}里面的就算是函数了么?
let arr = [ { id: 1, name: 'aa', desc: 'aaaa' }, { id: 2, name: 'bb' }, { id: 3, name: 'aa' } ] let arr1 = arr.filter(item => item.name == 'aa')//正确 // let arr2 = arr.filter(item => return item.name == 'aa' ) //报错 let arr3 = arr.filter(item => {item.name == 'aa'})//为空 let arr4 = arr.filter(item => { return item.name == 'aa' })//正确 console.log(arr1, 'arr1') // console.log(arr2, 'arr2'); console.log(arr3, 'arr3'); console.log(arr4, 'arr4');

arr1,arr4能正确输出,arr3没有取到正确的值是空的,arr2报错
19.js中四种for循环
先说结论:遍历对象用for in 遍历数组用for of
不要用for in 遍历数组会出问题,实际中已经遇到了
function getAreaQueryGrid(res) { let features = new ol.format.GeoJSON().readFeatures(res); for (let i in features) { if (typeof (features[i].values_) == "undefined") { } else { data.push(features[i].values_) } }}
这里就是for in 最后会莫名其妙多几个,这里加了个判断,其实不用for in 用传统的for 或者用for of 就能解决了。
1.传统的for
其实他挺好的,不会出错,效率也不错,
2.for in
for-in 遍历原型链上的属性。所以遍历数组会出问题
3.forEach
不能break 和 return,默认是并行的
4.for of
for of不能遍历普通对象
不仅支持数组,还支持大多数类数组对象,也支持字符串遍历
let arr = [1,3,5,7,9]; console.log(arr); for (let i = 0 ; i <arr.length;i++){ console.log("for=========="+arr[i]); } for (let i in arr){ console.log("for...in==========="+arr[i]); } arr.forEach(element => { console.log("foreach============ "+element);//foreach也是,不是key }); for ( i of arr){ console.log("for...of==========="+i); }//注意,for of中的i就是本身,不是对应的key,不要写成arr[i]这种格式了
forEach默认是并行的
function sleep(num){ return new Promise ((resolve,reject)=>{ setInterval(()=>{ resolve(num*num) },1000) }) }; function test (){ arr.forEach(async x =>{ let res = await sleep(x); console.log("foreach========="+res); }) } test() async function testforof(){ for (x of arr) { let res = await sleep(x) console.log("testforof========"+res); } } testforof()
这里foreach 会直接输出1,9,25,49,81
换成for of 就会每隔一秒输出一个
20.数组去重
let x = ["gd_point", "js_point", "ld_point", "ld_point", "xx_point", "gd_point", "ld_point", "js_point", "xx_point"] console.log(x); x = Array.from(new Set(x)) console.log(x);
idea
自定义模板
https://majing.io/posts/10000009872000
WebStorm提供了Live Template的功能,可以在JavaScript模块下新建console.log()的快捷方式。
File -> Settings -> Editor -> Live Templates
在JavaScript下新建模板,如设定缩写为.log,模板如下:
console.log($END$);

效果

QGIS
查看wkid

mars3d
1.配置wfs图层
在config.json里面
{ "id": 600, "name": "沧州模型数据二维", "type": "group" }, { "pid": 600, "name": "管道线", "type": "wms", "url": "http://120.27.60.10:8765/geoserver/dixiaguandao/wms", "layers": "dixiaguandao:gd_line", "crs": "EPSG:4326", "offset": { "x":116.960, "y":38.291, "z":4000 }, "parameters": { "transparent": "true", "format": "image/png" }, "showClickFeature": true, "visible": false, "flyTo": false },//其中offset用于图层双击跳转
图层的双击跳转在mannageLayers/widget.js里面
centerAt: function(e) {console.log(e); if(!e.originalCenter) viewer.mars.centerAt({ "y": e.config.offset.y, "x": e.config.offset.x, "z": e.config.offset.z}); else e.centerAt(); }, //正常是只有e.centerAt();的 //他是根据e里面的originalCenter这个属性飞的,wfs对象里没有这个,所以做个判度自己飞了。
论文
2,3维结合显示
模型不能随着比例尺的放大缩小而放大缩小
在小比例尺地图上很难看到小的模型,如地下管线等等,
需要通过2,3维结合的方式,在小比例尺的时候通过二维显示,放大到一定程度的时候可以隐藏掉2维,显示三维,三维的一直显示,
控制二维的可见比例尺,geoserver>>sld
<se:MinScaleDenominator>25</se:MinScaleDenominator> <se:MaxScaleDenominator>50000</se:MaxScaleDenominator>
如:这里设置的1:25就不再显示二维地图
2维查询,3维呈现
GEOSERVER
Web Map Server(WMS) , Web Feature Server(WFS) ,Web Coverage Server(WCS) 区别
WMS(Web 地图服务)能够根据用户的请求返回相应的地图(包括PNG,GIF,JPEG等栅格形式或者是SVG和WEB CGM等矢量形式)。WMS支持网络协议HTTP,所支持的操作是由URL定义的。
WFS(Web 要素服务)支持对地理要素的插入,更新,删除,检索和发现服务。该服务根据HTTP客户请求返回GML数据。
WFS对应于常见桌面程序中的条件查询功能,WFS通过OGC Filter构造查询条件,支持基于空间几何关系的查询,基于属性域的查询,当然还包括基于空间关系和属性域的共同查询。
WCS(Web地理覆盖服务)提供的是包含了地理位置信息或属性的空间栅格图层,而不是静态地图的访问。
(1) WMS服务与WFS服务的区别
wms是web地图服务,wfs 是web要素服务。
wms 能够根据用户的请求返回相应的地图(包括PNG,GIF,JPEG等栅格形式或者是SVG和WEB CGM等矢量形式)。
wfs支持对地理要素的插入,更新,删除,检索和发现服务。
二者的区别,简单的说,wms是基础,是显示地图的,wfs是高级一点的,在前者基础之上可以实现对地图数据的增删改查等操作。
json
1.JSONPlaceholder使用
https://blog.csdn.net/weixin_33962923/article/details/93301633
在目录下修改db.json
在目录下cmd>>> npm run json:server


Arcgis
1.如何给字段重命名
结论:再arcmap中不能直接给字段重命名,不论是否开启编辑。必须新建一个字段,复制这个字段的值,再把原来的字段删掉
https://jingyan.baidu.com/article/656db91891a862e381249cce.html
java
java和postgresql数据类型对照
网上搜了很多都不理想,这里总结的一部分是官网的文档,一部分是网上的,大体没问题
PostgreSQL™ Java SE 8
date LocalDate
time LocalTime
timestamp without timezone LocalDateTime
timestamp with timezone OffsetDateTime
varchar String
text String
int2 Integer
int4 Integer
int8 Long
float4 Float
float8 Double
numeric BigDecimal
bool Boolean
2.后台
0.所有文件的目录截图


1.entity 实体类,根据数据库的字段写的
https://blog.csdn.net/qq_39032310/article/details/94433867
这是引入@data的方法,需要在maven引入依赖
//注意这里引入了@data,不然要写构造函数,getset,tostring方法package com.xy.swbdc.entity.vo;import lombok.Data;import java.math.BigDecimal;@Datapublic class GuanXianVO { /** *起点点qdd * 终点点zdd * 起点埋qdm * 终点埋zdm * 起点高qdg * 终点高zdg * 材质cz * 埋设方msf * 线型xx * 管径gj * 建设日jsr * 权属单qsd * 工程编gcb * 套管材tgc * 要素代ysd * 条数ts * 压力值ylz * 总孔数zks * 已用孔yyk * 勘测单kcd * 使用状syz * 流向lx * 入库时rks * 更新时gxs * 备注bz * 专业注zyz * 专业注_zyz_ * 专业注1zyz1 * 专业_1zy_1 * 辅助类fzl * 删除标scb */ private Integer gid; private Integer id; private String qdd; private String zdd; private BigDecimal qdm; private BigDecimal zdm; private BigDecimal qdg; private BigDecimal zdg; private String cz; private String msf; private String xx; private String gj; private String jsr; private String qsd; private String gcb; private String tgc; private String ysd; private String ts; private String ylz; private Integer zks; private Integer yyk; private String kcd; private String syz; private Integer lx; private String rks; private String gxs; private String bz; private String zyz; private BigDecimal zyz_; private BigDecimal zyz1; private Integer zy_1; private String fzl; private String scb; private BigDecimal shape_leng; private BigDecimal length; private String geom; private String type;}
2.java目录下的mapper

package com.xy.swbdc.mapper;import com.xy.swbdc.entity.vo.GuanXianVO;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface GuanXianMapper { List<GuanXianVO> findAll(); List<GuanXianVO> findGJ();}//注意这里的方法名,要和后面的ID对应 findAll,findGJ
3.resources目录下的mapper.xml,写SQL语句
sql语句最好在navicat中测试好了,再写到mapper中

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.xy.swbdc.mapper.GuanXianMapper"> <!--findAll--> <select id="findAll" resultType="map"> select * from gd_line --125 union select * from js_line --252 union select * from xx_line --132 union select * from ld_line --2206 </select> <!--管线管径--> <select id="findGJ" resultType="map"> select gid,gj,type from gd_line --125 union select gid,gj,type from js_line --252 union select gid,gj,type from xx_line --132 union select gid,gj,type from ld_line --2206 </select></mapper>//id要对应
4&5.service 和serviceImpl
//service的package com.xy.swbdc.service;import com.xy.swbdc.entity.vo.GuanXianVO;import java.util.List;public interface GuanXianService { //查询所有管线的方法 List<GuanXianVO> findAll(); //查询管线管径方法 List<GuanXianVO> findGJ();}
package com.xy.swbdc.service.impl;import com.xy.swbdc.entity.vo.GuanXianVO;import com.xy.swbdc.mapper.GuanXianMapper;import com.xy.swbdc.service.GuanXianService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service //代表这是一个业务层组件 作用:用来在spring工厂中创建一个GuanXianServiceImpl对象@Transactional//代表给类中所有的方法加入事务控制public class GuanXianServiceImpl implements GuanXianService { @Autowired private GuanXianMapper guanXianMapper; @Override @Transactional (propagation = Propagation.SUPPORTS)//方法上声明事务注解 public List<GuanXianVO> findAll() { return guanXianMapper.findAll(); } @Override @Transactional (propagation = Propagation.SUPPORTS)//方法上声明事务注解 public List<GuanXianVO> findGJ() { return guanXianMapper.findGJ(); }}
6.controller,这个是和前端交互的
import com.xy.swbdc.service.GuanXianService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@RequestMapping("guanxian/")//写了这个就可以写二级接口了,见下面截图public class GuanXianController { @Autowired private GuanXianService guanXianService; //查询所有管线的一个接口 @GetMapping("findAll")//前端访问的接口名字 public List<GuanXianVO> guanXianVOSfindAll() { return guanXianService.findAll(); } //查询所有管线的一个接口 @GetMapping("findGJ") public List<GuanXianVO> guanXianVOSfindGJ() { return guanXianService.findGJ(); }}

7.前台获取
axios.get('/dxgd/guanxian/findAll') .then(res=> { console.log(res.data); }) .catch(error=> { console.log(error); });

浙公网安备 33010602011771号