项目自学记录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)])
}
}
可以发现即使添加进去了,也可以修改。因为添加的是地址信息。