项目自学记录3


项目自学记录3

instanceof 关键字

instanceof 运算符用于测试对象是否是指定类型(类或子类或接口)的实例。

Simple1 s=new Simple1();  
System.out.println(s instanceof Simple1);//true  

子类类型的对象也是父类的一种类型。例如,如果 Dog 扩展了 Animal,那么 Dog 的对象可以被 Dog 或 Animal 类引用。

Dog1 d=new Dog1();  
System.out.println(d instanceof Animal);//true  

对于Null值,如果我们对具有空值的变量应用 instanceof 运算符,它会返回 false。

Dog d=null;  
System.out.println(d instanceof Dog); 

使用 java instanceof 运算符进行向下转换

当子类类型引用父类的对象时,称为向下转型。

如直接执行,编译器会 Compilation error。如果通过类型转换执行,则会抛出 ClassCastException。但是我们使用 instanceof 运算符,向下转型是可能的。

public class Animal { }  

public  class Dog extends Animal {  
public  static void method(Animal a) {  
    if(a instanceof Dog){  
       Dog d=(Dog)a;//向下转型 
       System.out.println("向下转换执行成功");  
    }  
  }  

  public static void main (String [] args) {  
    Animal a=new Dog();  
    Dog.method(a);  
  }  
 }  
//这样是可行 的

前端生成按钮

找个位置写一个按钮

 <el-button @click="test">测试</el-button>

导入一些东西

import { post } from "@/utils/ajax"

在methods里写一个test()方法

  test(){
      var param={};
      
      post("/rc/rcModel/selectById",{id : 1}).then(response =>{
        console.log(response.data);
        this.dataList = response.data.list;

      })
    },

@Slf4j

在类前面加上这个注解,就能使用log.info了

  • 很简单的就是为了能够少写两行代码,不用每次都在类的最前边写上: private static final Logger logger = LoggerFactory.getLogger(this.XXX.class);

判断bool类型是否为null-BooleanUtil

要用BooleanUtil.isFalse()更加安全

BooleanUtil.isTrue()也行

数据库用In,不会用你给的数据

我想让你先返回5号用户,再返回1号用户,要用order by field

在JAVA种用mp写

 // 2.解析出其中的用户id
 List<Long> ids = top5.stream().map(Long::valueOf).collect(Collectors.toList());
String idStr = StrUtil.join(",", ids);
// 3.根据用户id查询用户 WHERE id IN ( 5 , 1 ) ORDER BY FIELD(id, 5, 1)
List<UserDTO> userDTOS = userService.query()
            .in("id", ids).last("ORDER BY FIELD(id," + idStr + ")").list()
            .stream()
            .map(user -> BeanUtil.copyProperties(user, UserDTO.class))
            .collect(Collectors.toList());

用last拼接一下

根据一个对象中的boolean去排序

rcRiskDefDomainList.sort((o1,o2)->{if (o1.isRefByModel() ^ o2.isRefByModel()) {
                    return o1.isRefByModel() ? -1 : 1;
                } else {
                    return 0;
                }});

Mysql中的自定义排序,order by field

select * from driver_log order by field(name,‘zhangsan’,‘lisi’,‘wangwu’);

SELECT
    userName,department,
    team,professionalClass,
    assesser,finalLevel
FROM ws_performanceassess_maintest
ORDER BY if(professionalClass='管理',0,1),
FIELD(department,'智能软件业务部','DVB产品业务部','研发设计部','综合测试部','预研产品业务部','IT部','自动化业务部'),
team,
FIELD(a.professionalClass,'高级工程师','中高级工程师','中级工程师','初级工程师A','初级工程师B','初级工程师C')

FIELD()函数是将参数1的字段对后续参数进行比较,并返回1、2、3等等,如果遇到null或者没有在结果集上存在的数据,则返回0,然后根据升序进行排序。

//5.根据id查询shop
String idStr = StrUtil.join(",",ids);//1,2,3,4...
// .... where id in #{ids} order by field(id,1,2,3,4...) 根据id排序
List<Shop> shops = query().in("id", ids).last("order by field(id," + idStr + ")").list();

函数中传入实体复杂类,是按引用传。传入普通的类型,是按值传.还有修改

    private static class User{
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    public static void main(String[] args) {
        User a1=new User();
        func(a1);
        System.out.println(a1.getName());
        System.out.println(a1.age);

        List<Integer> array1= Arrays.asList(1,2,3);
        func1(array1);  // 100,100,100 修改成功

        int[] a={1,2,3};
        func2(a);//100,100,100  修改成功
        func3(a); // 100,100,100  修改失败
        
    }
    public static void  func(User user){
        user.setAge(18);
    }
    public static void func1(List<Integer> array1){
        for(int i=0;i<array1.size();i++) array1.set(i,100);
    }
    public static void func2(int[] a){
        for(int i=0;i<a.length;i++) a[i]=100;
    }
    public static void func3(int[] a){
        for(int a1:a) a1=200;
    }

ERROR: operator does not exist: numeric = character varying

在sql里,where model_id = #{model_id} 这个一般是数字,而你传进来的是字符串是不行的

这样就成了 model_id=’111’,但是真实的应该是 model_id = 111

注意sql里的数字常量都是单引号’1’而不是”1”

使用JS脚本处理算术运算

import org.junit.Test;
import utils.JavaScriptEngine;

import java.math.BigDecimal;

public class JSTest {
    @Test
    public void test1() throws Exception {
        String expression="5*(3+6)";
        BigDecimal value = new BigDecimal(String.valueOf(JavaScriptEngine.engine.eval("function ss(){ return Number(" + expression + ");} ss();")) )
                .setScale(2,BigDecimal.ROUND_HALF_UP);
        System.out.println(value);

    }

}

setScale(1,BigDecimal.ROUND_HALF_UP)保留1位小数,四舍五入,2.35变成2.4

引入一个工具类

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JavaScriptEngine {
    public static ScriptEngine engine;

    static {
        if (engine == null) {
            ScriptEngineManager mgr = new ScriptEngineManager();
            engine = mgr.getEngineByName("JavaScript");
        }
    }
}

转换-JsonUtils.parseObject

 // dto.getRiskIds() 是类似于 {"1" : "1,2,3,5", "2" : "1,2,3"} 的json字符串,模型ID : 风险项ID1,风险项ID2
        final Map<Long,String> map;
        try {
            map = JsonUtils.parseObject(dto.getRiskIds(), Map.class);
        } catch (IOException e) {
            throw new BusinessException("转换风向模型风险项的json失败,json为: " + dto.getRiskIds());
        }
        // key: 模型id value: 风险项ID[]
        Map<Long,String[]> map2 = new HashMap<>();
        for(Map.Entry<Long,String> entry : map.entrySet()){
            String[] riskIds = entry.getValue().split(",");
            map2.put(entry.getKey(),riskIds);
        }

关于添加的变量引用的问题

public class ModelTest {

    @Test
    public void test1(){
        Model model=new Model();
        List<RiskDef> riskdefList=new ArrayList<RiskDef>();
        model.setModelId(222);
        model.setModelName("www");
        model.setRiskDefs(riskdefList);
        riskdefList.add(new RiskDef("qqq"));
        System.out.println(model);
        //Model(modelName=www, modelId=222, riskDefs=[RiskDef(riskDefName=qqq)])
    }
}

可以发现即使添加进去了,也可以修改。因为添加的是地址信息。


文章作者: 爱敲代码の鱼儿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 爱敲代码の鱼儿 !
  目录