🎨 changes

This commit is contained in:
fuhouyin 2024-05-03 15:12:14 +08:00
parent 6e13dcb975
commit b900e4f9a8
8 changed files with 1 additions and 414 deletions

View File

@ -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
[![JetBrains-logo](https://i.loli.net/2020/10/03/E4h5FZmSfnGIgap.png)](https://www.jetbrains.com/?from=real-url)
需要在<build>内配置数据库信息 以及生成文件所在的位置信息

View File

@ -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;
}
```

View File

@ -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;
}
```

View File

@ -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);
}
```

View File

@ -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));
```

View File

@ -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 注入的风险,同时也存在代码安全的问题。
${ } 占位符中的数据是原模原样的,不会区分数据类型。
${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。
```

View File

@ -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);
```

View File

@ -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 DirNametar是打包不是压缩
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文件即可。
```