🎨 changes
This commit is contained in:
parent
6e13dcb975
commit
b900e4f9a8
@ -68,10 +68,4 @@
|
||||
### 自动生成数据库所有实体类
|
||||
autoentity.pom.xml
|
||||
基于jOOQ的自动生成实体类功能,添加pom文件或者修改至自己的pom文件中,maven打包即可在对应处生成实体类
|
||||
需要在<build>内配置数据库信息 以及生成文件所在的位置信息
|
||||
|
||||
## 鸣谢
|
||||
|
||||
感谢 [JetBrains](https://www.jetbrains.com/?from=real-url) 提供的 free JetBrains Open Source license
|
||||
|
||||
[](https://www.jetbrains.com/?from=real-url)
|
||||
需要在<build>内配置数据库信息 以及生成文件所在的位置信息
|
@ -1,15 +0,0 @@
|
||||
### JAVA 手机号码格式验证,使用正则表达式
|
||||
|
||||
```java
|
||||
public static boolean isValidPhoneNumber(String phoneNumber){
|
||||
|
||||
if((phoneNumber != null) && (!phoneNumber.isEmpty())){
|
||||
|
||||
return Pattern.matches("^1[3-9]d{9}$",phoneNumber);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
```
|
@ -1,40 +0,0 @@
|
||||
### Java 日期格式化
|
||||
#### 将birthday改为String类型
|
||||
```java
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class student {
|
||||
|
||||
private String birthday;
|
||||
}
|
||||
```
|
||||
#### 直接把格式好的时间设置进去,值得注意的是DateTimeFormatter是线程安全的。
|
||||
```java
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class demo {
|
||||
|
||||
public static void main(String[] args) {
|
||||
student student = new student();
|
||||
String current = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
student.setBirthday(current);
|
||||
System.out.println(student);
|
||||
}
|
||||
}
|
||||
```
|
||||
#### 效果:student(birthday=2024-02-17 01:36:22)
|
||||
### (扩展)Spring框架中将Date的格式化方案
|
||||
#### 在Spring框架,如果你需要将一个日期格式从后端传递给前端,你可以通过注解@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 进行返回。这样就可以直接在对象中(new Date())了
|
||||
```java
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class student {
|
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private String birthday;
|
||||
}
|
||||
```
|
@ -1,29 +0,0 @@
|
||||
### Java如何向数组里添加元素
|
||||
#### 1.已有的数组datecolumn和list集合
|
||||
```java
|
||||
String[] datecolumn = {"Mon", "Tue", "Wed"};
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("Thu");
|
||||
list.add("Fri");
|
||||
list.add("Sat");
|
||||
list.add("Sun");
|
||||
```
|
||||
#### 2.数组和集合add到titleList中
|
||||
```java
|
||||
List<String> titleList = new ArrayList<String>();
|
||||
//将datecolum数组转换list并add到titleList中
|
||||
titleList.addAll(Arrays.asList(datecolumn));
|
||||
//将list添加到titleList中
|
||||
titleList.addAll(list);
|
||||
```
|
||||
#### 3.titleList集合转换title数组
|
||||
```java
|
||||
String[] title = titleList.toArray(new String[titleList.size()]);
|
||||
```
|
||||
|
||||
#### 4.遍历title数组
|
||||
```java
|
||||
for (String string : title) {
|
||||
System.out.println(string);
|
||||
}
|
||||
```
|
@ -1,46 +0,0 @@
|
||||
```java
|
||||
//准备
|
||||
Map<String, String> map = new HashMap<String, String>();
|
||||
map.put("key1", "value1");
|
||||
map.put("key2", "value2");
|
||||
map.put("key3", "value3");
|
||||
```
|
||||
```java
|
||||
//第一种:普遍使用,二次取值
|
||||
System.out.println("通过Map.keySet遍历key和value:");
|
||||
System.out.println("map.keySet():"+map.keySet()); //[key1, key2, key3]
|
||||
for (String key : map.keySet()) {
|
||||
System.out.println("key= "+ key + " and value= " + map.get(key));
|
||||
}
|
||||
```
|
||||
```java
|
||||
//第二种
|
||||
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
|
||||
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
|
||||
System.out.println("map.entrySet():"+map.entrySet()); //[key1=value1, key2=value2, key3=value3]
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<String, String> entry = it.next();
|
||||
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
|
||||
}
|
||||
```
|
||||
```java
|
||||
//第三种:推荐,尤其是容量大时
|
||||
System.out.println("通过Map.entrySet遍历key和value");
|
||||
System.out.println("map.entrySet():"+map.entrySet()); //[key1=value1, key2=value2, key3=value3]
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
|
||||
}
|
||||
```
|
||||
```java
|
||||
//第四种
|
||||
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
|
||||
System.out.println("map.values():"+map.values()); //[value1, value2, value3]
|
||||
for (String v : map.values()) {
|
||||
System.out.println("value= " + v);
|
||||
}
|
||||
```
|
||||
```java
|
||||
//第五种
|
||||
System.out.println("通过lamda表达式遍历key和value:");
|
||||
map.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
|
||||
```
|
@ -1,63 +0,0 @@
|
||||
### Mybatis (ParameterType) 如何传递多个不同类型的参数
|
||||
#### 方法一:不需要写parameterType参数。
|
||||
#### 由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
|
||||
```java
|
||||
public List<XXXBean> getXXXBeanList(String xxId, String xxCode);
|
||||
|
||||
<select id="getXXXBeanList" resultType="XXBean">
|
||||
select t.* from tableName where id = #{0} and name = #{1}
|
||||
</select>
|
||||
```
|
||||
#### 方法二:基于注解(最简单)
|
||||
#### 由于是多参数那么就不能使用parameterType, 这里用@Param来指定哪一个
|
||||
```java
|
||||
public List<XXXBean> getXXXBeanList(@Param("id")String id, @Param("code")String code);
|
||||
|
||||
<select id="getXXXBeanList" resultType="XXBean">
|
||||
select t.* from tableName where id = #{id} and name = #{code}
|
||||
</select>
|
||||
```
|
||||
#### 方法三:Map封装
|
||||
#### 其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个。
|
||||
```java
|
||||
public List<XXXBean> getXXXBeanList(HashMap map);
|
||||
|
||||
<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">
|
||||
select 字段... from XXX where id=#{xxId} code = #{xxCode}
|
||||
</select>
|
||||
```
|
||||
#### 方法四:List封装
|
||||
#### 传递list和map在资源消耗上肯定远大于方法一和方法二
|
||||
```java
|
||||
public List<XXXBean> getXXXBeanList(List<String> list);
|
||||
|
||||
<select id="getXXXBeanList" resultType="XXBean">
|
||||
select 字段... from XXX where id in
|
||||
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
```
|
||||
|
||||
```java
|
||||
#{}
|
||||
|
||||
MyBatis处理 #{ } 占位符,使用的 JDBC 对象是 PreparedStatement 对象,执行sql语句的效率更高。
|
||||
|
||||
使用 PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。
|
||||
|
||||
#{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。
|
||||
|
||||
```
|
||||
|
||||
```java
|
||||
${}
|
||||
|
||||
MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。
|
||||
|
||||
${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。
|
||||
|
||||
${ } 占位符中的数据是原模原样的,不会区分数据类型。
|
||||
|
||||
${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。
|
||||
```
|
@ -1,32 +0,0 @@
|
||||
### RestTemple请求api接口发送formData形式
|
||||
```java
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
// 用于请求报错后,查看报错详情的(如果接口有报错详情的话)
|
||||
restTemplate.setErrorHandler(new ResponseErrorHandler() {
|
||||
@Override
|
||||
public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// 用于formData请求方式
|
||||
MultiValueMap<String,Object> params = new LinkedMultiValueMap<>();
|
||||
params.add("key","value");
|
||||
|
||||
// MultiValueMap遇到需要填充list,可参考下面做法
|
||||
for (int i = 0; i < AttachmentList.size(); i++) {
|
||||
params.add("AttachmentList["+i+"].fileName",AttachmentList.get(i).getFileName());
|
||||
params.add("AttachmentList["+i+"].attachmentUrl",AttachmentList.get(i).getAttachmentUrl());
|
||||
params.add("AttachmentList["+i+"].fileSize",AttachmentList.get(i).getFileSize());
|
||||
}
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(params, headers);
|
||||
```
|
@ -1,182 +0,0 @@
|
||||
### 常用Linux命令
|
||||
```shell
|
||||
#jar包启动
|
||||
java -jar xxx.jar
|
||||
nohup java -jar xxx.jar >server.log 2>$1 $
|
||||
nohup java -jar -Xmx2g -Xms2g xxx.jar > logs/serverLog.log 2>&1 &
|
||||
|
||||
#查询所有端口
|
||||
netstat -tuln
|
||||
#根据进程号查询端口
|
||||
netstat -nlp | grep pid
|
||||
#根据端口号查进程号
|
||||
netstat -nlp | grep 端口号
|
||||
#查询进程pid
|
||||
ps -ef | grep
|
||||
netstat -anp | grep PID
|
||||
|
||||
#文件上传
|
||||
rz
|
||||
#文件下载
|
||||
sz
|
||||
|
||||
#快速查询进程号
|
||||
pgrep -f xxxx
|
||||
```
|
||||
```shell
|
||||
#安装jdk
|
||||
#在/opt文件夹下下载并解压jdk文件
|
||||
#下载地址:
|
||||
https://www.oracle.com/java/technologies/downloads/
|
||||
#解压:
|
||||
tar -zxvf jdk-19_linux-x64_bin.tar.gz
|
||||
#设置环境变量:
|
||||
vim ~/.bash_profile
|
||||
#jdk
|
||||
export JAVA_HOME=/opt/jdk/jdk-19.0.1
|
||||
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
|
||||
#保存并推出
|
||||
:wq
|
||||
#使环境变量生效
|
||||
source ~/.bash_profile
|
||||
|
||||
#测试 / java -version
|
||||
```
|
||||
```shell
|
||||
#压缩、解压
|
||||
tar -cvf fille.tar file(可以多个文件空格隔开)-c: 建立压缩档案;-v: 显示所有过程;-f: 使用档案名字,是必须的,是最后一个参数)
|
||||
tar -xvf file.tar 解包到当前目录
|
||||
tar -xvf file.tar -C dir 把文件解压到指定目录中
|
||||
zip 压缩后文件名 源文件
|
||||
zip -r 压缩后目录名 原目录
|
||||
unzip file.zip -d dir 解压到指定目录
|
||||
gunzip file1.gz 解压 file1.gz
|
||||
gzip file1 压缩 file1
|
||||
gzip -9 file 最大程度压缩文件
|
||||
|
||||
#示例:
|
||||
01-.tar格式
|
||||
解包: tar xvf FileName.tar
|
||||
打包: tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
|
||||
02-.gz格式
|
||||
解压1: gunzip FileName.gz
|
||||
解压2: gzip -d FileName.gz
|
||||
压 缩: gzip FileName
|
||||
|
||||
03-.tar.gz格式
|
||||
解压: tar zxvf FileName.tar.gz
|
||||
压缩: tar zcvf FileName.tar.gz DirName
|
||||
|
||||
04-.bz2格式
|
||||
解压1: bzip2 -d FileName.bz2
|
||||
解压2: bunzip2 FileName.bz2
|
||||
压 缩: bzip2 -z FileName
|
||||
|
||||
05-.tar.bz2格式
|
||||
解压: tar jxvf FileName.tar.bz2
|
||||
压缩: tar jcvf FileName.tar.bz2 DirName
|
||||
|
||||
06-.bz格式
|
||||
解压1: bzip2 -d FileName.bz
|
||||
解压2: bunzip2 FileName.bz
|
||||
|
||||
07-.tar.bz格式
|
||||
解压: tar jxvf FileName.tar.bz
|
||||
|
||||
08-.Z格式
|
||||
解压: uncompress FileName.Z
|
||||
压缩: compress FileName
|
||||
|
||||
09-.tar.Z格式
|
||||
解压: tar Zxvf FileName.tar.Z
|
||||
压缩: tar Zcvf FileName.tar.Z DirName
|
||||
|
||||
10-.tgz格式
|
||||
解压: tar zxvf FileName.tgz
|
||||
|
||||
11-.tar.tgz格式
|
||||
解压: tar zxvf FileName.tar.tgz
|
||||
压缩: tar zcvf FileName.tar.tgz FileName
|
||||
|
||||
12-.zip格式
|
||||
解压: unzip FileName.zip
|
||||
压缩: zip FileName.zip DirName
|
||||
|
||||
13-.lha格式
|
||||
解压: lha -e FileName.lha
|
||||
压缩: lha -a FileName.lha FileName
|
||||
|
||||
14-.rar格式
|
||||
解压: rar a FileName.rar
|
||||
压缩: rar e FileName.rar
|
||||
rar请到:下载!
|
||||
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量
|
||||
指定的目录也行): cp rar_static /usr/bin/rar
|
||||
```
|
||||
```shell
|
||||
#文件、目录
|
||||
rm -f file 强制删除文件,不提示
|
||||
rm -r dir 递归删除其文件和文件夹
|
||||
rm -rf dir 强制删除文件夹及其内容,不提示
|
||||
mv dir/file dir 将文件或者文件夹移动到指定目录
|
||||
mv -t dir file 将文件或者文件夹移动到指定目录
|
||||
mkdir dir dir2 创建两个文件夹
|
||||
mkdir -p /tmp/dir 创建多级目录
|
||||
cp file file1 将文件file复制一份file1
|
||||
cp -a file/dir dir 将文件或者文件夹复制到指定目录
|
||||
cd .. 返回上一级目录
|
||||
cd ../.. 返回上两级目录
|
||||
cd / 返回根目录
|
||||
ls 列举出当前目录中所有文件
|
||||
ls -a 列举出当前目录中所有文件,包括隐藏文件
|
||||
ls -l 显示文件的详细信息
|
||||
ls -lrt 按时时间排序显示文件
|
||||
pwd 显示当前路径
|
||||
|
||||
#网络相关
|
||||
ip add 显示当前ip地址
|
||||
ifdown eth0 禁用 ‘eth0’ 网络设备
|
||||
ifup eth0 启用 ‘eth0’ 网络设备
|
||||
|
||||
#系统相关
|
||||
su 用户名 切换用户登录
|
||||
shutdown -h now 关机
|
||||
shutdown -r now 重启
|
||||
reboot 重启
|
||||
```
|
||||
```shell
|
||||
#Linux查找文件命令
|
||||
find / -name test.txt 在所有目录中查找名字为test.txt的文件
|
||||
find / -name ‘*.txt’ 在所有目录中查找后缀名为.txt的文件
|
||||
find . -name test.txt 在当前目录中查找名字为test.txt的文件
|
||||
find /etc -name '*srm*' 查找/etc文件夹下所有名字中包含srm的文件
|
||||
find / -amin -10 查找在系统中最后10分钟访问的文件
|
||||
find / -atime -2 查找在系统中最后48小时访问的文件
|
||||
find / -empty 查找在系统中为空的文件或者文件夹
|
||||
find / -group cat 查找在系统中属于 groupcat的文件
|
||||
find / -mmin -5 查找在系统中最后5分钟里修改过的文件
|
||||
find / -mtime -1 查找在系统中最后24小时里修改过的文件
|
||||
find / -nouser 查找在系统中属于作废用户的文件
|
||||
find / -user fred 查找在系统中属于FRED这个用户的文件
|
||||
```
|
||||
```shell
|
||||
#查看历史操作命令:
|
||||
history
|
||||
#history记录文件:
|
||||
more ~/.bash_history
|
||||
|
||||
清除history历史命令记录:
|
||||
#1.1.编辑history记录文件,删除部分不想被保存的历史命令。
|
||||
vim ~/.bash_history
|
||||
#1.2.清除当前用户的history命令记录。
|
||||
history -c
|
||||
|
||||
#2.1利用vim特性删除历史命令
|
||||
#使用vim打开一个文件
|
||||
vi test.txt
|
||||
# 设置vim不记录命令,Vim会将命令历史记录,保存在viminfo文件中。
|
||||
:set history=0
|
||||
# 用vim的分屏功能打开命令记录文件.bash_history,编辑文件删除历史操作命令
|
||||
vsp ~/.bash_history
|
||||
# 清楚保存.bash_history文件即可。
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user