1.int和String的相互转换
1.1 int to String
String str = String.valueOf(i)
String str = Integer.toString(i)
String str = "" + i
1.2 String to int
int i = Integer.parseInt(str)
int i = Integer.valueOf(str).intValue()
2.关于oracle数据库无法使用表别名的情况:检查是否是建表时将字段加上了双引号导致。
3.后台自动生成uuid:
PrimaryKeyTool.generalUUIDPrimaryKey()
前端生存UUID:
guidSingle(){
return (((1+Math.random())*0x10000)|0).toString(16).substring(1)
},
guid(){
return (this.guidSingle()+this.guidSingle()+this.guidSingle()+this.guidSingle()
+this.guidSingle()+this.guidSingle()+this.guidSingle()+this.guidSingle())
},
StringUtils.repeat(repeatString,count) 重复字符串count次
-
Map集合去空值:
public static Map mapRemoveNull(Map map) { Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, Object> entry = it.next(); String key = entry.getKey(); if (Objects.isNull(map.get(key)) || map.get(key).equals("null") || map.get(key).equals("")) { it.remove(); } } return map; }
5.前端页面对数组进行多种排序:
sortFiles(data){
vm.resourceFiles = vm.rTempFiles.sort(d_count);
function d_count(a, b) {
if (vm.flag == 0){
vm.flag = 1
return a.browseCount - b.browseCount
}else {
vm.flag = 0
return b.browseCount - a.browseCount
}
}
}
通过flag值的变化正序、反序排列
if (vm.flag == 0){
vm.flag = 1
vm.tableQuery.order = {browse_count:'desc'}
}else {
vm.flag = 0
vm.tableQuery.order = {browse_count:'asc'}
}
6.js时间戳转日期格式:
//第一种
function getLocalTime(nS) {
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');
}
//结果是2010年12月23日 10:53
//第二种
function getLocalTime(nS) {
return new Date(parseInt(nS) * 1000).toLocaleString().substr(0,17)
}
//第三种 格式为:2010-10-20 10:00:00
function getLocalTime(nS) {
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
}
//第四种
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long time = new Long(str);
str = format.format(time);
Date date= format.parse(str);
//第五种
直接使用filters进行过滤处理
7.后台获取filter的order加入排序:
String orderStr = ParameterUtil.StringToOrder(pagerQuery.getOrder());
if (!Strings.isNullOrEmpty(orderStr)) {
OrderByHelper.orderBy(orderStr);
}
8.多选框查询
调用自身的“change”事件,当绑定值发生变化时触发
9.配置文件上传系统
10.radio单选框取值问题:
v-model绑定变量,选中意味着变量的值为相应 Radio label属性的值,
<el-radio v-for="g in postModel.graduationOptions" :label="g.id">{{g.name}}</el-radio>
11.动态绑定验证
12.树形控件绑定
13.Date转换_实体类上定义
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
14.forEach前端循环判定boolean
_.each(infos,function (v) {
v.orgStatus = v.orgAuditStatus != null
})
若要判定 !=null 或者 != 2,转换思路,让 v.orgStatus = v.orgAuditStatus == 1 即可!!!!!!
{{r.creatorName ? r.creatorName : ‘无名氏’}}
15.如果数据有空格,SQL用trim去空
<if test="gradationId != null and gradationId != ''">
AND trim(rb.gradation_id) = #{gradationId}
</if>
18.处理由于http请求异步导致的返回数据未按顺序的情况;
18.1:先定义一个初始空数组———— vm.gradeTemp = Array.apply(null,{length:xhr.data.data.aaData.length})
该数组为空,长度为获取的返回结果的长度
18.2:定义一个obj对象,获取异步请求的结果:
let obj = new Object()
obj.id = id
obj.name=name;
obj.list = xhr.data.data;
18.3:运用slice将对应下标的内容替换;
vm.gradeTemp.splice(i,1,obj)——————————————————————在i处,删除1个,替换为obj
18.4:该问题主要是请求返回时间不同导致数据加载不一致
19.BigDecimal
19.1 在使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象转换成float,double,int等类型。
19.2 基本算法:
1 public BigDecimal add(BigDecimal value); //加法
2 public BigDecimal subtract(BigDecimal value); //减法
3 public BigDecimal multiply(BigDecimal value); //乘法
4 public BigDecimal divide(BigDecimal value); //除法
19.3 处理结果:
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
add: return b1.add(b2).doubleValue();
sub: return b1.subtract(b2).doubleValue();
mul: return b1.multiply(b2).doubleValue();
divide: return b1.divide(b2, scale).doubleValue();
19.4 比较大小:
a.compareTo(b) 返回值为int -1表示小于,0是等于,1是大于。
20.处理转换属性值:
let course = _.each(xhr.data.data,function (v) {
v.id = v.code;
})
vm.searchItem[2].options = course
21.当页面数据出现初始返回undefined时,用v-if="xxx != undefined"处理渲染,
当需要的数据为undefined时,不渲染;后续数据同步到位,自动渲染。
22.SQL判断一条记录的多个字段是否相同:
23. lambda表达式:
stream().mapToDouble(s->s.getScore()).sum()/resCommentListment.size();
entityList.stream().mapToInt(s->s.getFileSize().intValue()).sum()
listTea.stream().filter(s->!Strings.isNullOrEmpty(s.getGradeId())).map(s->s.getGradeId()).distinct().collect(Collectors.toList())
24.多个文件同时下载:
25.实体类处理信息拼接:
public String getTitle() {
if(this.typeId.equals("0")){
return this.title + "(共" + (this.subFiles == null ? "0" : this.subFiles) +"个文件)";
}
return title;
}
-
beforeRouteEnter(to, from, next){
http.get/post()
.then(function(xhr){
next(function(vm){主要用于进行路由跳转控制,减少mounted作用写法 )} })
}
27.postConfirm(message, type, postUrl, data){ let vm=this; MessageBox.confirm(message, type, {type: 'warning'}) .then(function () { http.post(postUrl, data) .then(function (xhr) { if(xhr.data.code){ return; } vm.apiNameList(vm.aId) }) }) .catch(function () { }) }, postHttp(data, url){ var vm = this http.post(url, data) .then(function (xhr) { if(xhr.data.code){ return } vm.$router.push('/developer/plat_list') }) },
-
map取值为String[]类型,转为String方法:
List roles = new ArrayList<>();
if(map.get(“roleStr”) instanceof String){
roles.add((String)map.get(“roleStr”));
}
if(map.get(“roleStr”) instanceof String[]){
String[] roleList = (String[]) map.get(“roleStr”);
roles.addAll(Arrays.asList(roleList));
} -
list拼接成String:
String.join(",",list)
初始赋值list:
List list = new ArrayList(){
{
add(“nihao”);
add(“wohao”);
add(“dajihao”);
}
};
-
rpc的配置:
-
循环赋值注意引用对象的问题
在循环体里new对象赋值 -
检查rpc
1.在serviceImpl加@Service注解,并装配于controller
2.controller调用方法测试 -
Mybatis调用存储过程时获取返回值的问题:
A:
call p_score_consume(
#{userId,mode=IN,jdbcType=VARCHAR},
#{funcCode,mode=IN,jdbcType=VARCHAR},
#{businessId,mode=IN,jdbcType=VARCHAR},
#{state,mode=OUT,jdbcType=INTEGER},
#{msg,mode=OUT,jdbcType=VARCHAR}
)
void consumeScore(TransactionBean transactionBean); @Override public TransactionBean consumeIntegral(@Valid TransactionBean transactionBean) { TransactionBean validBean= valid(transactionBean); if (validBean!=null){ return validBean; } scoreOpertionDao.consumeScore(transactionBean); return transactionBean; } B: <select id="consumeScore" parameterType="java.util.Map" statementType="CALLABLE"> {call p_score_consume( #{userId,mode=IN,jdbcType=VARCHAR}, #{funcCode,mode=IN,jdbcType=VARCHAR}, #{businessId,mode=IN,jdbcType=VARCHAR}, #{state,mode=OUT,jdbcType=INTEGER}, #{msg,mode=OUT,jdbcType=VARCHAR} ) </select> void consumeScore(Map map); @Override public TransactionBean consumeIntegral(@Valid TransactionBean transactionBean) { TransactionBean validBean= valid(transactionBean); if (validBean!=null){ return validBean; } Map map = new HashMap(); map.put("userId",transactionBean.getUserId()); map.put("funcCode",transactionBean.getFuncCode()); map.put("businessId",transactionBean.getBusinessId()); scoreOpertionDao.consumeScore(transactionBean); return transactionBean; }
-
java判定字符串、对象等的空值问题,尽量使用工具:
如:Strings String 等 -
<el-button slot=“buttons” type=“text” size=“small” icon=“arrow-left” @click=“goBack()”>返回
//退回
goBack(){
this.$router.push(’/resIndex/res_index’)
}, -
swagger测试时,各种数据类型的格式:
39.1 Object39.2 Map
39.3 filter
-
List中加入List对象
和List<> list = new ArrayList<>()的泛型有关系
若List,则 list.add(E e),是放入对象
若List,则 list.add(List l),是可以放入list -
Jquery中进行数组的增删改
push
splice -
引用组件时无法加载数据:
先不让组件加载(设置显示false),当数据绑定后再改为true显示 -
取整,取余:
/:
%:
46.循环数组分配数据
主要注意被分配的下标j和商、余数挂钩
46.1 平均分配
if (vm.r == 0){
for (let i = 0; i < vm.pn.length; i++){ //循环人员
let list = new Array;
vm.pn[i].file = vm.q
for (let j = (i * vm.q); j < vm.q * (i + 1); j++){ //循环作品
list.push(vm.fn[j])
}
vm.pn[i].works = _.cloneDeep(list)
}
}
46.2 不均分配
if (vm.r != 0){
for (let i = 0; i < vm.pn.length; i++){
if (i < vm.r){ //前几位多一件作品
vm.pn[i].file = vm.q + 1
let list = new Array;
for (let j = (i * (vm.q + 1)); j < (vm.q + 1) * (i + 1); j++){ //循环作品
list.push(vm.fn[j])
}
vm.pn[i].works = _.cloneDeep(list)
}
if (i >= vm.r){ //正常分配数量
vm.pn[i].file = vm.q
let list = new Array;
for (let j = i * vm.q + vm.r; j < vm.q + (i * vm.q + vm.r); j++){ //循环作品
list.push(vm.fn[j])
}
vm.pn[i].works = _.cloneDeep(list)
}
}
}
- Json和List相互转换:
47.1 List转Json
JSONArray jsonArray = JSONArray.fromObject( list );
47.2 Map转Json
JSONObject json = JSONObject.fromObject(map);
47.3 Bean转Json
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
-
Json数据取值
根据Key取值: JsonObject.fromObject(str).getString(key);
-
Vue中数据的赋值问题:
Vue只对data中的初始化数据进行变化监听,如果需要赋值,要直接对其本身进行;
或者利用_.cloneDeep创建临时数据操作,再反赋值回目标数据 -
前端页面方法路径自动加入了时间戳的问题:
-
时间范围表单验证问题
获取的数据是数组: [date1, date2] -
跳转页面数据未及时刷新: this.$router.push()
解决方案:- 查看是否网络请求导致的错位运行:前端页面均为异步请求,可能是调整方法先执行,再执行其他请求
-
Vue页面数据类型初始化问题:
String:’’
Array:[]
Number:-1==========>初始化没有值的都适合
Object:{} -
某个功能的运行必须经由其他功能触发的bug(主要发生在编辑页面)
确认是否初始化所有树形,是否被影响属性被覆盖或删除导致
获取数据时,所有需求值都处理好再一次性赋值给目标对象,否则会因某个值不存在导致功能无法实现!!!
58.List<String> ids = originalRecords.stream().filter(s->!Strings.isNullOrEmpty(s.getPersonID())).map(s- >s.getPersonID()).distinct().collect(Collectors.toList()); originalRecords.forEach(s->{ RpcUserInfo info = infos.stream().filter(f->!Strings.isNullOrEmpty(s.getPersonID()) && s.getPersonID().equals(f.getUserId())).findFirst().orElse(null); if (info!= null){ s.setPersonName(info.getUserName()); } });
-
配置RPC调用方法,motan-client的(dev, local, product, test)xml都需要配置
-
配置oracle的jdbc.url格式====>base.jdbc.urls=jdbc:oracle:thin:@110.186.73.233:31521:base
-
8188环境部署:
- 先将后台代码推到dev
- 前端合并发布到dev/test均可
- 拉取已推送合并代码部署
65.Model类:
65.1 采用驼峰命名规则,和数据库字段进行对应匹配;
65.2 注意在写SQL语句时,如果Model类字段有变化,需要select出单个字段名,否则无法接收到对应数据
因此推荐SQL语句减少使用 SELECT *,尽量写全数据库对应字段
65.3 领域对象和领域模型
65.4
66.Dao层:
66.1 参数注解:
66.1.1 参数
@Param(“id”) String id 此写法Mapper的select必须写parameterType
@Param(value = “id”) String id 此写法Mapper的select不用写parameterType
对象,数组等 不加
66.2 Dao层的方法名对应Mapper里的id
67.Mapper:
67.1 select语句最好写完整,以防字段不匹配导致的数据获取不完整
67.2 INSERT INTO SELET FROM —Insert into Table2(field1,field2,…) select value1,value2,… from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
SELECT INTO FROM ------SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
67.3 FULL JOIN/ INNER JOIN/ LEFT JOIN/ RIGHT JOIN
67.4 获取GUID:
<selectKey keyProperty="id" resultType="String" order="BEFORE">
SELECT SYS_GUID() FROM DUAL
</selectKey>
68.Service层:
4.1 关于分页查询在service层全部处理以及分开service层和controller层分别处理的写法
4.2
69.Controller层:
5.1 RequestMapping:
5.1.1 @Controller
@RequestMapping(value = “developer”)
将这个class申明为一个bean,当web请求为developer时,跳转到这个class进行处理。
5.1.2 @RequestMapping(value = “user”,method = RequestMethod.GET)
使用@RequestMapping()注解,将Controller中的具体方法和请求方法名绑定起来。
5.1.3
@RequestMapping可以被标注类型申明和方法申明这两种方式上。
申明在类型定义上,那么@RequestMapping()括号里面的东西通常为请求的地址
申明在方法定义上,那么它用来表明当前方法定义是一个Web请求处理方法。
5.1.4 在spring——mvc中,通过url路径来访问控制器中的方法,可以在用@RequestMapping注解的路径中使用URI模板。
使用@PathVariable注解来指明方法中的参数应该对应URI模板中的变量
@RequestBody:用于接收对象
@PathVariable:用于接收单个参数,必须保证参数名和URI模板变量名一致才能自动赋值,想自定义参数变量需要在@PathVariable注解中加入参数