项目自学记录2


项目自学记录2

MyBatis中,字符串常量要用单引号

在MyBatis中,如果你在SQL语句中使用字符串常量,你需要使用单引号将它们括起来。所以,你的SQL语句应该改成这样:

<select id="selectBusinessTypeByDicName">
    select DISTINCT dic_value
    from kb_data_dic
    where dic_type = 'business_type' and dic_name = #{BusinessType}
</select>

关于给数组初始化大小并不能让其size为初始值

List<Integer> aaa=new ArrayList<Integer>(100);
System.out.println(aaa.size());  //输出0

List和Set的转换

Array 转 list
List list = Arrays.asList(arr);

list转array:
String[] arr = list.toArray(new String[0]);//我们一定要在里面指定类型 并且类型必须是引用类型

list和set的互相转化:(用addAll或者构造器)
因为两者都实现了collection接口,collection接口下面有addAll()方法,他可以将list 和set相互转化。
另外 我们也可以通过两者的构造函数的形式完成互相转化

//List转Set
Set set = new HashSet<>(list);
List list_1 = new ArrayList<>(set);
1
2
3
Array和set的相互转化
array转化为set: set = new HashSet<>(Arrays.asList(arr)); //要先将arr转化成list然后再用构造器
set转化为array:跟list转array的方式一样 用set.toArray(new String[0])即可。

总结一下 常用的就是:
首先要明白list和set都是collection里面的 所以两者对外和对内转化都有相似性。
Arrays.asList() //将array转化成list或者set,当然 set需要多加一层构造器
Collection.toArray() //将list或者set转化成array
至于list和set之间的转化 因为他们都是collection下面的 因此可以直接使用Collection.addAll()进行转化 或者直接利用构造器互相转化

尤其注意:
如果arr 是int[] 或者是其他原始类型的数组 那么不能直接用Arrays.asList()进行转化
但是如果arr 是Integer[]类型的数组 就可以使用 但是因为大多数情况下不是 所以还是别用了

MyBatis中返回为List时,resuleType也应该为List中单个元素的类型

<select id="getTaxFieldsList" parameterType="string" resultType="string">
    SELECT dic_name
    FROM kb_data_dic
    WHERE p_id = (SELECT id FROM kb_data_dic WHERE dic_type = 'business_type' AND dic_value = #{sourceType})
       OR dic_type = 'business_type' AND dic_value = #{sourceType}

</select>

比如上面回返回多个dic_name,要用List接。但是resultType是”string”.

一个对象的所有属性为null,这个对象也 不为null

比如下面的==判断是不成立的

应该写一个工具类:

 // 判断对象中的属性值是否都为null
 // f.get(object) 获取属性值
import org.apache.commons.lang.StringUtils;
import java.lang.reflect.Field;
public class CheckObjNull {
    public static boolean checkObjAllFieldsIsNull(Object object) {
        if (null == object) {
            return true;
        }
        try {
            for (Field f : object.getClass().getDeclaredFields()) {
                f.setAccessible(true);
                if (f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
                    return false;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}

修改自增主键为正常值(取当前表自增主键的最大值,非1)

alter table kb_kl_law_ext auto_increment = 1

kb_kl_law_ext 为表名

关于两个BeanUtils工具类中的copyProperties方法的分析

https://blog.csdn.net/qgnczmnmn/article/details/109384632

//org.springframework.beans.BeanUtils
public static void copyProperties(Object source, Object target){....}

//org.apache.commons.beanutils.BeanUtils
public static void copyProperties(Object dest,Object orig){....}

一般使用org.springframework.beans.BeanUtils下的copyProperties方法,报错的概率低。

BeanUtils.copyProperties属于浅拷贝

关于日期转换为2023-07-21格式的字符串/日期的问题(优化版本)

public class Test {
    public static void main(String[] args) {
        Date postDate = new Date();
        String date = "";
        if (postDate != null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            date = simpleDateFormat.format(postDate);
        }
        System.out.println(postDate.toString());
        System.out.println(date);
    }
}
//输出为
Fri Jul 21 11:18:40 CST 2023
2023-07-21

即使catch字段里return 了,finally里的代码也会执行

 try{
           System.out.println("aaa");
           double x=1/0;
       }catch (Exception ex){
           ex.printStackTrace();
           return ;
       }finally {
           System.out.println("bbb");
       }

其输出结果如下:

aaa
bbb
java.lang.ArithmeticException: / by zero
at Test.main(Test.java from InputFileObject:15)
Disconnected from the target VM, address: ‘127.0.0.1:6294’, transport: ‘socket’

一个函数怎么返回多个值

一个函数,即使他的形式参数是数组,修改了数组之后也不会对原来的值产生影响

public static void main(String[] args) {

       ArrayList<Integer> arrayList=new ArrayList<Integer>();
       arrayList.addAll(Arrays.asList(1,2,3,4,5));
       func(arrayList);
        for (Integer integer : arrayList) {
            System.out.println(integer); // 1,2,3,4,5
        }
    }
    public static void func(ArrayList<Integer> arrayList){
       for(int a:arrayList){
           a+=5;
       }
    }

建议这个函数返回一个HashMap

获取一个绝对路径下的所有文件

File file = new File(url.getPath());
File[] files = file.listFiles();

Solr删除数据

当然最好是在Document下删除数据,不过我们solr没有这个按钮

http://localhost:8004/solr/globalSearch/update?stream.body=%3Cdelete%3E%3Cquery%3EversionId%3A%5B37696+TO+50275%5D%3C/query%3E%3C/delete%3E&commit=true

query里面为查询条件,内含一部分转义。总之在%3A%5B到%5D%3C之间输入数据就行

如果是只删除一条数据,versionId:38986 即可

当然Java程序中也有根据id删除solr索引的

打增量war包

1.右键->子版本->显示历史->找到合适的版本->与本地比较

2.对于每一个文件,先上面,再下面,下面注意是WEB-INF

具体情况依项目而定。

关于查找一个文件夹下的所有子文件(并且用递归求和)

因为Java中没用引用,所以传的参数是没用的,无论是int和Integer都没用,只能用int[] 数组

然后用递归去统计文件和文件夹的数量,代码如下:

public class Test {
    public static void main(String[] args) {
        int[] count = new int [1];
        count[0] = 0;
        String path="C:\\Users\\qizui\\Desktop\\webINF";
        getFiles(path,count);
        System.out.println(count[0]);
    }
    public static void getFiles(String clientBase,int[] count) {
        File file = new File(clientBase);
        // 如果这个路径是文件夹
        if (file.isDirectory()) {
            // 获取路径下的所有文件
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                // 如果还是文件夹 递归获取里面的文件 文件夹
                if (files[i].isDirectory()) {
                    System.out.println("目录:" + files[i].getPath());
                    //继续读取文件夹里面的所有文件
                    getFiles(files[i].getPath(),count);
                } else {
                    System.out.println("文件:" + files[i].getPath());
                    count[0]++;
                }
            }
        } else {
            System.out.println("文件:" + file.getPath());
            count[0]++;
        }
    }
}

给一个路径,获取文件内容

//提取文件夹里对应的内容
String content = "";
//对文件夹里的html文件进行处理
File fileExcel = new File(dirPath);
if (!fileExcel.exists()) {
    System.err.println("文件不存在: " + fileExcel);
    //怎么提示给用户文件不存在呢?
}
BufferedReader reader = null;
StringBuilder contentBuilder = new StringBuilder();
try {
    // 创建文件读取器
    InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(fileExcel), "UTF-8");
    reader = new BufferedReader(inputStreamReader);

    String line;
    while ((line = reader.readLine()) != null) {
        // 添加每行内容到 StringBuilder
        contentBuilder.append(line);
        // contentBuilder.append(System.lineSeparator());
    }
    //提取的html的文件内容
    content = contentBuilder.toString();
} catch (IOException e) {
    System.err.println("无法读取文件: " + e.getMessage());

} finally {
    try {
        // 关闭文件读取器
        if (reader != null)
            reader.close();
    } catch (IOException e) {
        System.err.println("无法关闭文件读取器: " + e.getMessage());
    }
}

判断一个类所有属性为null

import static utils.CheckObjNull.checkObjAllFieldsIsNull;

public class Test {
    public static void main(String[] args) {
        Regulation regulation=new Regulation();
        if(regulation==null){
            System.out.println("regulation为null");
        }
        if(checkObjAllFieldsIsNull(regulation)){
            System.out.println("regulation的所有属性为null");
        }

    }
}
//只会输出下面,已经new了对象之后,则恒不为null

对应的工具类:

public class CheckObjNull {
    public static boolean checkObjAllFieldsIsNull(Object object) {
        if (null == object) {
            return true;
        }
        try {
            for (Field f : object.getClass().getDeclaredFields()) {
                f.setAccessible(true);
                if (f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
                    return false;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}

如果你新new了一个对象,则这个对象是不为null的,即使他的属性都为null,你要通过上述函数来判断。

其中StringUtils.isNotBlank要导入下面的包

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

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