项目笔记1(djy)

项目笔记1(djy)参考 https element eleme cn zh CN component tabs tab pane attributesv model activeName 默认选中值选中的值等于 name

大家好,欢迎来到IT知识分享网。

1.Tabs 标签页

参考:https://element.eleme.cn/#/zh-CN/component/tabs#tab-pane-attributes

<el-tabs v-model="activeName" type="card" @tab-click="tabsClick" :closable="true" @tab-remove="tabsRemove"> <el-tab-pane v-for="(item,index) in examList" :key="index" :examId="item.id" :name="item.groupName" class="yw-tab" :closable="false"> <el-tooltip slot="label" effect="dark" :content="item.groupName" placement="bottom-start"> <span class="tmp">{ 
  { item.groupName }}</span> </el-tooltip> </el-tab-pane> </el-tabs> 

:examId=“item.id” :点击切换事件(tabsClick)取值:tabsClick(tab, event){let examId=tab.$attrs.examId;}

el-tooltip:鼠标移入提示内容

//tab切换点击事件 tabsClick(tab, event) { 
    let value = tab.$attrs.tabValue; }, 

//删除部门
tabsRemove(tab){

this.KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: … this.message({

type: ‘success’,
message: ‘删除成功!’
});
this.yearChange();
})
}
})
}).catch(() => {

this.$message({

type: ‘info’,
message: ‘已取消删除’
});
});
},

2.日期控件

年:type=“year”,月:type=“month”,周:type=“week”;value-format日期格式化为string类型,默认是date类型

3.let 定义的变量可以实现同步

4.Java中把一个对象复制给另外一个对象

BeanUtils.copyProperties
org.springframework.beans.BeanUtils.copyProperties(Object source, Object target)
org.apache.commons.beanutils.BeanUtils.copyProperties(Object dest, Object orig)

5.vue splice删除

(1)删除普通数组
let arr = [1,2,3,4,5];
//方法一
let index = arr.indexOf(‘3’);
arr.splice(index, 1)
//打印结果 [1,2,4,5]

//方法二
let index = arr .findIndex(item => {

if (item == ‘3’) {

return true
}
})
arr.splice(index, 1)
//打印结果 [1,2,4,5]

(2)删除数组对象
let arr = [
{

id:1,
name:‘张三’
},
{

id:2,
name:‘李四’
},
{

id:3,
name:‘王二’
},
{

id:4,
name:‘麻子’
},
];
let id1 = arr.findIndex(item => {

if (item.id == ‘3’) {

return true
}
})
arr.splice(id1, 1)

6.动态添加及绑定数据

{
{scope.row[i.typeName]}}

return {

typeNames:[
{

typeLabel:“”,
typeName:“”,
},
{

typeLabel:“”,
typeName:“”,
}
],
peopleList:[{

“typeName1”: 0,
“typeName2”: 0,
“typeName3”: 0,
“children”: [{

“children”: [{

“children”: null,
“name”: “人家看”,
“pid”: “”,
“id”: “”
}], “name”: “他和他”, “pid”: “”, “id”: “”
}],
“typeName0”: 0,
“name”: “环境”,
“id”: “”
}, {

“typeName1”: 0,
“typeName2”: 0,
“typeName3”: 0,
“children”: [{

“children”: [{

“children”: null,
“name”: “江湖经验”,
“pid”: “”,
“id”: “”
}], “name”: “没有很好”, “pid”: “0”, “id”: “”
}],
“typeName0”: 0,
“name”: “不规范”,
“id”: “0”
}],
}

7.Vue 强制刷新(重新渲染)的方式

https://blog.csdn.net/LonewoIf/article/details/
a.强制刷新整个页面
b.使用v-if
c.使用组件内置的forceUpdate方法
this.$forceUpdate();
d.使用key-changing优化组件

8.vue 异步请求,dataChange()method 下

async dataChange(){

await this.dataJsHx(this.dataForm.peopleList);
await this.dataJsCx(this.dataForm.peopleList,2);
await this.dataJsCx(this.dataForm.peopleList,1);
await this.$forceUpdate();
},

9.elementUI table组件 合计方法

<el-table
show-summary
:summary-method=“getSummaries”

getSummaries(param) {

const { columns, data } = param;
console.log(columns, data, “columns,data”);
const sums = [];
columns.forEach((column, index) => {

if (index === 0) {

sums[index] = “总价”;
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {

// sums[index] = values.reduce((prev, curr) => {

sums[2] = values.reduce((prev, curr) => {

const value = Number(curr);
if (!isNaN(value)) {

return prev + curr;
} else {

return prev;
}
}, 0);
// sums[index] += ” 元”;
sums[2] += ” 元”;
} else {

sums[index] = “N/A”;
}
});
return sums;
}

10.setTimeout用法,等待指定秒数再执行

setTimeout(() => {

this.$router.push({path: “/Map_MainPage”}); // 强制切换当前路由 path
loading.close();
}, 8000);

11.Vue判断字符串(或数组)中是否包含某个元素的多种方法

参考: https://www.jb51.net/article/261891.htm
方法一:includes方法(数组,字符串都可以)
var str = “Hello World!”;
if(str.includes(“World”)){

}

let animals = [“cat”, “dog”, “pig”, “deer”]
animals.includes(“deer”) // true
animals.includes(“horse”) // false

方法二:indexOf方法(数组,字符串都可以)
var str = “Hello World!”;
//注意:!=-1即为为真,可以找到得情况
if(str.indexOf(“World”) != -1){

}

let grades = [“A”, “B”, “C”, “D”]
grades.indexOf(“A”) // 0
grades.indexOf(“F”) // -1

12.element ui 嵌套表头固定列处理,嵌套最外层加上 fixed ,最外层的宽度等于内层的宽度之和

13.mybatis级联查询,子级/下级查询

@TableId @ApiModelProperty(value="主键") private Long id; @ApiModelProperty(value="创建人") private String name; @TableField(exist = false) private Teacher teacher; 

}

select * from class SELECT id, name FROM teacher WHERE id=#{tid}

(2)一对多查询,column=”{tid=teacher_id,cname=name}”多个参数
@TableField(exist = false)
private List teachers;

SELECT id, name FROM teacher WHERE id=#{tid}

14.MyBatis之ResultMap的association和collection标签详解

https://baijiahao.baidu.com/s?id=&wfr=spider&for=pc

15.MyBatis之ResultMap的extends用法

select u.id, u.name, u.role_id, r.name as role_name from user u left join role r on u.role_id = r.id # 16.vue 异步执行 执行顺序问题 执行完一个方法后再执行另一个方法

function fun1(){

return new Promise((resolve, reject) => {

/* 你的逻辑代码 /
console.log(“1”);
});
},
function fun2(){

return new Promise((resolve, reject) => {

/
你的逻辑代码 /
console.log(“2”);
});
},
function fun3(){

return new Promise((resolve, reject) => {

/
你的逻辑代码 /
console.log(“3”);
});
},
/
调用 /
function run(){

Promise.all([
this.fun1(),
this.fun2(),
this.fun3()
]).then(res => {

/
你的逻辑代码 */
console.log(“run”);
})
}
原文链接:https://blog.csdn.net/dylansun/article/details/

17.vue页面引入另一个页面

import infoReport from ‘…/informationbuildreport/index.vue’;
components: {

infoReport
},

18.Vue: 字符串、数组之间的相互转换

(1)数组转字符串 join()
var authority= [‘1’,‘2’];
let permission = authority.join(“,”);
console.log(permission )//1,2
(2)字符串转数组 split()
var a=‘1,2’
a.split(‘,’)
console.log(a)// [“1”, “2”]

19.样式

data(){

return{

CS: {

‘text-align’: ‘center’, //文本居中
‘min-width’: ‘250px’, //最小宽度
‘word-break’: ‘break-all’ //过长时自动换行
},
LS: {

‘color’: ‘#000’,
‘text-align’: ‘center’,
‘font-weight’: ‘600’,
‘height’: ‘40px’,
‘background-color’: ‘rgba(255, 97, 2, 0.1)’,
‘min-width’: ‘110px’,
‘word-break’: ‘keep-all’
}

CS: { 'width': '15%', 'text-align':'center' }, LS: { 'width': '10%', 'text-align':'center' }, 

20.:show-overflow-tooltip=“true” 样式,scoped无效

.el-tooltip__popper {

max-width: 600px;
}

21.element表单验证如何清除校验提示语

(1). 对字段进行单独校验
this. r e f s . d a t a F o r m . v a l i d a t e F i e l d ( ′ p r o t o c o l I d ′ , ( v a l i d ) = > / / v a l i d 返回的是规则集中写的错误提示信息,如果满足条件,返回的就是空 i f ( ! v a l i d ) r e t u r n ) 上面这段代码可以放在确认数据选择的函数中执行,这样就对这一项特殊的内容再次进行了校验,如果符合检验规则,错误提示就是消失了。 ( 2 ) . 直接清除表单域下该字段的提示信息 t h i s . refs.dataForm.validateField(‘protocolId’, (valid) => { //valid返回的是规则集中写的错误提示信息,如果满足条件,返回的就是空 if(!valid){ return } }) 上面这段代码可以放在确认数据选择的函数中执行,这样就对这一项特殊的内容再次进行了校验,如果符合检验规则,错误提示就是消失了。 (2). 直接清除表单域下该字段的提示信息 this. refs.dataForm.validateField(protocolId,(valid)=>//valid返回的是规则集中写的错误提示信息,如果满足条件,返回的就是空if(!valid)return)上面这段代码可以放在确认数据选择的函数中执行,这样就对这一项特殊的内容再次进行了校验,如果符合检验规则,错误提示就是消失了。(2).直接清除表单域下该字段的提示信息this.refs.dataForm.clearValidate();
this.KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …() => { this.refs.dataForm.clearValidate();
})
这个方法就是直接清除错误信息,不做任何判断,个人不是太推荐使用

22.elementui的表格在使用v-if之后列的顺序错乱问题

1、el-table-column的template中使用 slot-scope=“scope”

2、el-table-column中使用 v-if=“…”

23.vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值。

一、父组件给子组件传值
props 实现父组件向子组件传值。
1父组件里:

msg是绑定的自定义属性,类似我们原生html 给标签自定义属性一样,Widget是传输变量

<script > import childpack from './childPack.vue' //引用子组件 export default{ 
      name: 'FatherPack', components: { 
      childpack }, data(){ 
      return(){ 
      myMsg:‘我是父组件参数’ } }, mothods:{ 
      showMessageFromChild(val){ 
      } } } </script> 

2子组件里:

<div> <span>{ 
  {msg}}</span> </div> <script> export default { 
      name: 'ChildPack', props:["msg"] //也可以指定默认类型和默认值 props: { 
      msg: { 
      type: Number, default: 0 } }, isPublic: { 
      type: Boolean, default: undefined //注意!对于布尔类型,默认值不要写成false,否则isPublic永远为false。 } arr: { 
      type: [], default: undefined //数组 } } data(){ 
      }, created() { 
      console.log('child_msg',this.msg) }, mothods:{ 
      }, } </script> 

1在子组件里:
export default{

methods: {

changeFather(){

this.KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 50: …数”); }̲, //可以传…emit(“listenTochildEvent”,pms);
// },
} }

2在父组件:定义事件listenTochildEvent,并实现showMessageFromChild方法,接收父组件传递来的参数。

<child-pack :msg ="myMsg" v-on:listenTochildEvent="showMessageFromChild"></child-pack> <script > import childpack from './childPack.vue' //引用子组件 export default{ 
    name: 'FatherPack', components: { 
    childpack }, data(){ 
    return(){ 
    myMsg:‘我是父组件参数’ } }, mothods:{ 
    showMessageFromChild(data){ 
    console.log(data); } } </script> 

三、将一、二 一起使用就是可以实现父子组件互相传值。

24.and、or的用法 or查询

// WHERE xxxx!=id And ( xxxx=ANo or xxxx=BNo)
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ne(Project::getId,project.getId());
queryWrapper.and((wrapper)->{

wrapper.eq(Project::getANo,project.getBillNo())
.or().eq(Project::getBNo,project.getBillNo());
});

25.只能输入正整数

https://www.jb51.net/article/267545.htm

正整数:min=“0” onKeypress=“return (/[\d]/.test(String.fromCharCode(event.keyCode || event.which))) || event.which === 8”
正数:οnkeypress=“return (/[\d.]/.test(String.fromCharCode(event.keyCode || event.which))) || event.which === 8;”

26.el-input__inner样式不生效问题,解决scoped样式不生效问题
https://blog.csdn.net/github_/article/details/
方法1
父组件的 scoped 样式不能穿透到子组件上。
使用 /deep/ 或者 >>> 解决

/deep/.el-input__inner {

color: black;
}
1
2
3
方法2
在vue中,把style的scoped去掉就可以了。跟作用域有关

但这种方法不可取,把scoped去掉,其他页面的有这个类的话,也会跟着改。

.inputColorBlack{

.el-input__inner {

color: black;
}
}

26.使用Feign调用服务接口

https://blog.csdn.net/_/article/details/

27.mapper.xml多个实体写法

public interface SecrecyTargetMapper extends GheronBaseMapper {

Page<SecrecyTarget> getSecrecyTargetPage(Page<SecrecyTarget> iPage,@Param("secrecyTarget") SecrecyTarget secrecyTarget); 

SELECT FROM bgs_secrecy_target a a.del_flag != ‘1’ and a.title like concat(‘%’,#{secrecyTarget.title},’%’) order by a.sort ASC

</select> 

28.el-tree 默认选中

<el-tree ref=“tree” node-key=“id”
//默认选中
this.KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …() => { this.refs.tree.setCurrentKey(item.id);
})
参考:https://element.eleme.io/#/zh-CN/component/tree#scoped-slot

29.Mybatis in 条件传参三种实现方法(直接$,List,[])

第一种方法:in 条件为拼接好的字符串

如果直接传入拼接好的where in 条件, 比如(‘111’,‘222’,‘333’),则需要使用${idlist}传参,即绝对引用,而不能使用#
, 如果使用#传参会被mybatis当成字符串再添加一层’’引号,导致错误.
优点:简单方便,高效,缺点:不能防止SQL注入

原文链接:https://blog.csdn.net/wh/article/details/

(1)int deleteMenuByIdList(@Param(“idlist”)String idlist)

delete from s_menu where menu_id in ${idlist};
update s_menu set sort=sort-#{delcount} where sort >= #{lastsort} and menu_id not in ${idlist};

(2)int deleteMenuByIdList2(@Param(“idlist”)List idlist)

delete from s_menu where menu_id in

#{menu_id}

;update s_menu set sort=sort-#{delcount} where sort >= #{lastsort} and menu_id not in

#{menu_id}
;

(3)int deleteMenuByIdList3(@Param(“idlist”)String[] idlist)

delete from s_menu where menu_id in

#{menu_id}

;update s_menu set sort=sort-#{delcount} where sort >= #{lastsort} and menu_id not in

#{menu_id}
;

30.lt、le、eq、ne、ge、gt符号的含义

lt: less than 小于
le: less than or equal to 小于等于
eq: equal to 等于
ne: not equal to 不等于
ge: greater than or equal to 大于等于
gt: greater than 大于

31.在Vue中为什么v-for一定要加key

https://blog.csdn.net/cmdfas/article/details/
Vue可以通过key这种方式来观察数组或者对象中的数据哪些正发生变化。v-for默认是通过index索引来追踪变化,
所以上面我通过将index作为索引的做法是多余的,尽管它解决了ESLint的错误。通过追踪index索引,Vue观测列表中的项目的顺序变化,
并在顺序发生变化时,就地修改每个项目。Vue文档中指出,“这个默认的模式是高效的”,但也指出并不适合所有的情况。

32.element-ui中的input的事件中传递参数,val是输入时的值

@input=“((val)=>{scope.row.ownGrade=scoreChange(val,scope.row.weightGrade)})”
scoreChange(val,weightGrade){

if (val>weightGrade){

return weightGrade;
}
return val;
}

33.Collectors详解

34.java9的of方法

jdk9的新特性

List接口,Set接口,Map接口:里面增加了一个静态的方法of,可以给集合一次性添加多个元素

注意:
1.of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常

示例:
void test25() {

List strlist = List.of(“12”,“34”,“5”,“678”,“9”);
String str = strlist.stream().collect(Collectors.joining());
System.out.println(str);
String str1 = strlist.stream().collect(Collectors.joining(“,”));
System.out.println(str1);
}

35.Arrays.asList数组转集合

注:数组通过Arrays.asList转成集合后,是不能调用集合的add,remove方法的.不然会抛异常UnsupportedOperationException
解决办法:
Integer[] array = {1, 2};
// 通过Arrays转换成的List,保留了原本的类型
List list = Arrays.asList(array);
//list.add(1); 会报异常
System.out.println(list);
List objects = new ArrayList(list);
objects.add(3);
System.out.println(objects);

36.vue中关于切换选项卡渲染表格,导致表格内容错乱或者表格渲染不出来的问题

实例:

<el-table key="0"></el-table> <el-table key="1"></el-table> 

参考:https://www.codenong.com/cs/

37.单独设置样式

<el-date-picker v-model=“dataForm.year” type=“year” @change=“yearChange” value-format=“yyyy” class=“yearClass”/>

.yearClass input.el-input__inner{

text-align: center;
}

参考:https://www.cnblogs.com/ygunoil/p/12364881.html

38.Long.valueof和Parselong的区别

Long.valueof(“12”):的返回类型是Long
Long.parseLong(“12”):的返回类型是long
但是选择Long.parseLong()也可以,因为java实现了自动装箱和拆箱功能,但是从性能上来说,还是比Long.valueof()直接返回Long类型来的慢一些.

39.result中的property可以去掉,对应class类不用写对应属性

<resultMap id="pdm" type="com.ghidri.gheron.zhtb.bgs.utils.PlanningDetailVo"> <result property="deptId" column="dept_id"/> <result property="deptName" column="dept_name"/> <result column="planning_work_id" /> <collection property="releaseList" column="{workId=planning_work_id,deptId=dept_id}" select="getByDeptId"/> </resultMap> 

40.MyBatis编写xml获取参数值的方式

MyBatis获取参数值的两种方式:${}和#{}
${}的本质就是字符串拼接,#{}的本质就是占位符赋值
${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

41.Element 表格固定列横向滚动条无法拖动的问题解决

/deep/ .el-table__body-wrapper{

z-index: 2
}

z-index:控制显示层级

参考:https://blog.csdn.net/lwzhang1101/article/details/

<el-table :key="Math.random()" 

42.vue element-ui el-table-column配合v-if 数据位置错乱问题 el-table-column 和 fixed搭配使用出现的错乱

问题:当我们对el-table的某一列进行判断显示隐藏时,就会出现列位置和表头样式错乱的问题
情况一:
我们通常的写法(会错乱的写法)

修正后的写法(不会错乱的写法)

虽然仍然会有一瞬间错乱样式,但是已经不影响数据的展示了

情况二:
el-table-column 和 fixed搭配使用出现的错乱的解决办法,在数据渲染完后使用官方提供的doLayout方法
// 在表格上加ref=‘table’
this.KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …(() => { this.refs.table.doLayout()
})

情况三:
el-tabs 切换导致 el-table-column 和 fixed搭配使用导致高度错乱

el-table-column 列加了fixed=”right”操作后,从源码上来看,加入fixed之后这个列的高度是动态计算的,页面加了缓存,再次切换回来就会导致高度没有计算padding值所有会出现高度错乱的问题。

// 覆盖el-table__fixed-right 和 el-table__fixed的css 样式 (我这里是左右两边都固定了,根据实际情况处理即可)
.custom_table ::v-deep .el-table__fixed-right,
.custom_table::v-deep .el-table__fixed {

height: 100% !important;
}

原文链接:https://blog.csdn.net/_/article/details/

43.jdk去重

方式一、

List<User> intList = new ArrayList<>(); List<User> collect = intList .stream() .distinct().collect(Collectors.toList()); 

方法二、

List<User> intList = new ArrayList<>(); List<User> collect = userList.stream().collect( Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getUserId))), ArrayList::new)); 

44.泛型传参写法

参考:
Java反射设置/获取对象属性值三种方式
Java反射如何获取字段属性值

(1)接口写法

//请求 List<FinanceDept> list = financeDeptService.selectDeptList(financeId); List<FinanceDept> deptList =distributeUserService.getDeptList(list, ",,,"); //接口 <T> List<T> getDeptList( List<T> list, String authDept); //接口实现类 @Override public <T> List<T> getDeptList( List<T> list, String authDept){ 
    String deptId = getDeptInfo().getDeptId(); if(authDept.contains(deptId)){ 
    return list; } List<T> newList = new ArrayList<>(); try { 
    List<OrgGroupLeader> groupLeaderList =adapterBusAchiClient.getLeaderByUid(SecurityUtils.getUserId()).getData(); for (OrgGroupLeader leader : groupLeaderList) { 
    for (T t : list) { 
    //参考:https://m.jb51.net/article/254768.htm Field field = t.getClass().getDeclaredField("deptId");//获取指定字段 field.setAccessible(true);//设置字段可访问,否则无法访问private修饰的变量值 Object obj = field.get(t);//获取字段值 if (obj.equals(leader.getOrgId())){ 
    newList.add(t); } } } } catch (Exception e) { 
    e.printStackTrace(); } return newList.stream().distinct().collect(Collectors.toList());//去重 } 

(2)方法写法

package com.aibe.util.jce; import com.aibe.util.StringUtil; import com.aibe.vo.Dvd; import com.aibe.vo.NurseryTjVo; import org.apache.poi.ss.formula.functions.T; import org.apache.xml.security.utils.Base64; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.lang.reflect.Field; import java.math.BigInteger; import java.security.SecureRandom; import java.security.spec.AlgorithmParameterSpec; import java.util.ArrayList; import java.util.List; / * * @author zw */ public class JceUtil { 
    public static void main(String[] args) { 
    List<Dvd> list=new ArrayList<>(); Dvd vo1=new Dvd(); vo1.setXzname("李四"); vo1.setContent("ffdd"); vo1.setContentDf("是的"); list.add(vo1); Dvd vo2=new Dvd(); vo2.setXzname("的身份"); vo2.setContent("2233"); vo2.setContentDf("的食物"); list.add(vo2); setJm(1,list,"xzname,content,contentDf"); System.out.println(22); } / * 集合加密解密 * @param type (1.加密,2.解密) * @param list * @param filedArr 一个或多个字段,逗号分隔 * @return */ public static List<?> setJm(int type, List<?> list, String filedArr){ 
    try { 
    for (Object t : list) { 
    String[] arr = filedArr.split(",|,"); for (String fd : arr) { 
    Field field = t.getClass().getDeclaredField(fd);//获取指定字段 field.setAccessible(true);//设置字段可访问,否则无法访问private修饰的变量值 String content = field.get(t).toString();//获取字段值 field.set(t,"的服务"); } } } catch (Exception e) { 
    e.printStackTrace(); } return list; } } 

45.mysql查询类型转换问题

mysql存在两个转型的函数

 CAST(字段名 as 需要转换的类型 ) CONVERT(字段名,需要转换的类型)。 支持转型的类型: 

复制
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED

select * from main_enclosure where typeNumber = 13 and relation = CONVERT(,char) <select id="enclosureChild" resultType="com.ghidri.gheron.zhtb.enclosure.entity.Enclosure"> select * from main_enclosure where typeNumber=13 and relation=CONVERT(#{id},char) </select> 

46.校验数据集合是否填写完整

 //数据校验--调用 let valid=true; let taskNode=that.taskNode; if (taskNode<=4) { 
    let msg=that.$refs.assignmentRef.dataListValidate(taskNode); if (msg){ 
    valid=false; errorMsg='<strong>信息化系统名称:</strong><br/>'+msg+'<br/>'; let hzMsg=''; if (taskNode==0 || taskNode==1){ 
    hzMsg="保全信息不完整,请继续填写完整"; }else if (taskNode==2){ 
    hzMsg="请填写校核意见"; }else if (taskNode==3){ 
    hzMsg="请填写审查意见"; }else{ 
    hzMsg="请填写审批意见"; } errorMsg+='<span style="color: red">'+hzMsg+'</span>'; } } if (!valid) { 
    that.$alert(errorMsg, '提示', { 
    dangerouslyUseHTMLString: true }); } //数据校验 dataListValidate(taskNode){ 
    let msg=""; function fz(item) { 
    if (msg) msg += '<br/>'; msg += item.systemName; } this.dataList.forEach(item=>{ 
    if (taskNode==0 ||taskNode==1){ 
   //任务书拟稿 if (!item.releaseTime ||!item.construction ||!item.manageTask ||!item.progressRequire ||!item.buildMode ||!item.buildContent ||!item.gisCenter ||!item.technicalManager ||!item.approvalResult) { 
    fz(item); } }else if (taskNode==2){ 
   //校核 if (!item.jhOpinion){ 
    fz(item); } }else if (taskNode==3){ 
   //审查 if (!item.scOpinion){ 
    fz(item); } }else { 
   //批准 if (!item.spOpinion){ 
    fz(item); } } }) return msg; }, 

47.千分位方法工具类

/ * 千分位方法 */ public class MicrometerUtil { 
    / * 千分位方法 * @param obj * @return */ public static Object fmtMicrometer(Object obj) { 
    if (obj==null || obj.equals("")){ 
    return ""; } String text=obj.toString(); DecimalFormat df = null; if (text.indexOf(".") > 0) { 
    int i = text.length() - text.indexOf(".") - 1; if (i == 0) { 
    df = new DecimalFormat(",0."); } else if (i == 1) { 
    df = new DecimalFormat(",0.0"); } else { 
    df = new DecimalFormat(",0.00"); } } else { 
    df = new DecimalFormat(",0"); } double number = 0.0; try { 
    number = Double.parseDouble(text); } catch (Exception e) { 
    number = 0.0; } return df.format(number); } } 

48.java field 赋值及取值

public void setLabels(List<T> list,String setVal,String getVal,String dictType){ 
    List<SysDictItem> dictList = remoteDictService.getDictByType(dictType).getData(); try { 
    for (T t : list) { 
    Field field=t.getClass().getDeclaredField(getVal);//获取字典filed Field field1=t.getClass().getDeclaredField(setVal); field.setAccessible(true);//设置私有属性可以访问 field1.setAccessible(true); Object val = field.get(t);//获取值 for (SysDictItem item : dictList) { 
    if (item.getValue().equals(val)){ 
    //set值,赋值 set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值. field1.set(t,item.getLabel()); break; } } } } catch (Exception e) { 
    e.printStackTrace(); } } 

注解赋值

@ExcelProperty("编码") private String code; @ExcelProperty("名称") private String name; //赋值 public void setVal(ManRecordExportVo2 t, String itemName, BigDecimal price){ 
    try { 
    Field[] fields=t.getClass().getDeclaredFields();//获取字典filed for (Field field : fields) { 
    field.setAccessible(true);//设置私有属性可以访问 Annotation[] declaredAnnotations = field.getDeclaredAnnotations(); for (Annotation annotation : declaredAnnotations) { 
    if(annotation instanceof ExcelProperty){ 
    ExcelProperty myAnnotation = (ExcelProperty) annotation; String vl = myAnnotation.value()[0]; if (itemName.contains(vl)){ 
   //与注解对应的值相等 Object val = field.get(t);//获取值 var je = new BigDecimal(val.toString()).add(price); field.set(t,je); } } } } } catch (Exception e) { 
    e.printStackTrace(); } } 

49.@RequiredArgsConstructor注解

二、使用步骤
1.引入依赖

org.projectlombok
lombok

2.使用方式

@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/bsccheckassess") @Api(value = "bsccheckassess", tags = "BSC年度考核-年底考核管理") public class BscCheckAssessController { 
    private final BscCheckAssessService bscCheckAssessService; private final BscCheckDeptService bscCheckDeptService; } 

总结

类上加上@RequiredArgsConstructor,需要注入的类要用final声明,或者使用@NonNull。

原文链接:https://blog.csdn.net/m0_/article/details/

48.前端传一个数组或者集合后台怎么接受

get请求:

对于get方式,前端传数组,后端就只能用数组接收(对象中有这个数组也可以用对象接收),不能直接用list接收(对象中有和前端传递的数组名相同的List,可以用该对象接收)

49.vue数组排序

字符串数组比较时:

const arr = [1,3,9,2,5] arr.sort((a,b) => { 
    return b-a // 按降序排 // return a-b // 按升序排 }) 

常用的是根据对象数组的某个属性比较排序

const arr = [ { 
   id:1,name: ‘张三’,age: 20}, { 
   id:2, name: ’肖二‘, age:27}, { 
   id:3, name: ‘李四’, age:19} ] arr.sort((p1,p2)=>{ 
    return p2.age-p1.age // 按年龄降序排 // return p1.age-p2.age // 按年龄升序排 }) 

50.多个字符串替换

public static void main(String[] args) { 
    String input = "神探狄仁&*%$杰\\之四/大[天王@bdfbdbd]fdgds23532"; System.out.println(input); String reg = "/|\\?|\\*|:|\\\\|\\[|\\]"; System.out.println(input.replaceAll(reg, "")); // 神探狄仁杰之四大天王 } 

51.@Accessors(chain=true)链式编程

package com.pollyduan; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain=true) public class User { 
    private Integer userId; private String name; private Integer age; public static void main(String[] args) { 
    //开起chain=true后可以使用链式的set User user=new User().setAge(27).setName("kevin");//返回对象 System.out.println(user); } } 

52.vue报错: Avoid mutating a prop directly since the value will be overwritten whenever the paren

解决方法:
子组件再定义一个变量接收值,
监听一下新定义的变量
使用this.$emit(‘zz’,data)
页面上监听一下<my-menu @zz=“nickname = $event”>

53.mapper.xml中判断list/数组长度

list使用 size list.size > 0
数组使用length array.length > 0
例子:

<if test="chktyp!=null and chktyp.size>0"> and chktyp in (#{chktyp}) </if> <if test="arr!=null and arr.length>0"> and ct_fd in (#{arr}) </if> 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/154414.html

(0)
上一篇 2025-02-25 22:00
下一篇 2025-02-25 22:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信