项目自学记录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
List
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没有这个按钮
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>