1、实体类中时间类型LocalDateTime,查询的时候Mybatis报错
解决:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
将数据库连接池Druid设置为1.1.21版本及以上
2、MybatisPlus忽略实体类中的非数据库字段,JPA忽略实体类中的非数据库字段、Hibernate忽略实体类中的非数据库字段
解决:
Mybatis Plus忽略映射字段时可以在实体类属性上使用以下注解:
@TableFiled(exist = false):表示该属性不为数据库表字段,但又是必须使用的
@TableFiled(exist = true):表示该属性为数据库表字段。
在实体类的属性上面加上这个注解后,此字段就不会映射数据库了
@TableFiled(exist = false)
private Position position
Spring data jpa 或 Hibernate中
//数据库不存在的这个字段
@Transient
private String test;
3、寒哥的日志
trace ID + P6SPY
4、@Autowired和@Resource之间的区别
@Autowired 可用于:构造函数、成员变量、Setter方法
@Autowired和@Resource之间的区别
@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。
@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。
5、windows版nginx重启命令
nginx -s reload
6、搞一个属于自己的代码生成器
7、JSR303 数据校验
8、@EqualsAndHashCode
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* @title: HashCodeTest
* @Author MeiYang
* @Date: 2022/12/23 14:53
* @Version 1.0
*/
public class HashCodeTest {
public static void main(String[] args) {
Cat cat1 = new Cat("黑色", "鲁鲁", 2);
Cat cat2 = new Cat("白色", "鲁鲁", 2);
System.out.println(cat1.equals(cat2)); //true callSuper = false
System.out.println(cat1.equals(cat2)); //false callSuper = true
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Animal {
private String color;
}
@Data
@EqualsAndHashCode(callSuper = false) //排除父类字段
class Cat extends Animal {
//@EqualsAndHashCode(callSuper = true) //不排除父类字段
private String name;
private Integer age;
public Cat(String color, String name, Integer age) {
super(color);
this.name = name;
this.age = age;
}
}
9、事务回滚
@Transactional(rollbackFor = Exception.class)
序列化的最主要目的就是传递和保存对象,保存对象的完整性和可传递性
在Java中,为什么不允许从静态方法中访问非静态变量
1、静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问。
2、非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问。
3、静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。
在Java中,什么时候用重载,什么时候用重写?
1、重载是多态的集中体现,在类中,要以统一的方式处理不同类型数据的时候用重载。
2、重写的使用是建立在继承关系上的,子类在继承父类的基础上,增加新的功能,可以用重写。
3、简单总结:
重载是多样性,重写是增强剂。
目的是提高程序的多样性和健壮性,以适配不同场景使用时,使用重载进行扩展。
目的是在不修改原方法及源代码的基础上对方法进行扩展或增强时,使用重写。
你想吃一碗面,我给你提供了拉面,炒面,刀削面,担担面供你选择,这是重载。
你想吃一碗面,我不但给你端来了面,还给你加了青菜,加了鸡蛋,这个是重写。
HashMap和Hashtable有什么区别?
1、HashMap是线程不安全的,HashTable是线程安全的
2、HashMap中允许键和值为null,HashTable不允许
3、HashMap的默认容器是16,为2倍扩容,HashTable默认是11,为2倍+1扩容
队列和栈是什么?有什么区别?
1、队列先进先出,栈先进后出
2、遍历数据速度不同
栈只能从头部取数据,也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性。
队列则不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影响数据结构,速度要快得多。
docker运行项目的基础命令
nohup java -jar XXX.jar & 运行项目
ps -aux | grep jee项目名
docker ps
docker ps -a
docker images
docker load < xx.tar
docker start xxx
docker restart xxx
nginx -s reload
Windows环境下Redis启动命令
redis-server redis.windows.conf
SVN上传格式
versionID-timestamp:description
fmjob-lot-config-1.0.1-SNAPSHOT-202301101117:
1.删除Controller
获取当前数据库版本
//MySQL, mysql -v
select version();
//Oracle
select * from v$version();
连接不同的数据库
datasource:
dynamic:
#设置默认的数据源或者数据源组,默认值即为master
primary: master
#严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
master111:
url: jdbc:p6spy:oracle:thin:@10.217.1.88:1521:orcl
username: FMCODE_YUN
password: 123456
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
master:
type: com.alibaba.druid.pool.DruidDataSource
username: "root"
password: "root"
url: jdbc:p6spy:mysql://10.217.1.88:3306/hcms_db?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Chongqing
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
slave_1:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:p6spy:mysql://10.217.1.88:3306/wms_db?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Chongqing
username: root
password: root
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
//搭配使用
@Mapper
@DS("master")
public interface UserMapper extends BaseMapper<User> {
}
大肥猫整理
lambda.like(StringUtils.hasText(sysOrgVO.getName()) SysOrg::getName sysOrgVO.getName());
//后端取多个值的时候拼接
@PostMapping("/roleConfirm/{pId}/{personId}")
@ResponseBody
@ApiOperation("用户确认绑定角色")
public Result roleConfirm (@PathVariable Integer pId
@PathVariable Integer personId){
请求头参数拼接是 /{personId}/{userId} 后端接收参数使用的是 @PathVariable
@PathVariable 是从 GetMapping/PostMapping/等这些里面 取拼接的参数
请求头参数拼接是 ?personId = 2 & userId = 3 后端接收参数使用的是 @RequestParam
@RequestParam 是要传给我的参数
String 是 NotBlank 其余全部是NotNull
创建实体类的时候,要加上 @EqualsAndHashCode(callSuper = true)
对两张表进行的修改或删除或添加操作,要在IMPl中加上事务注解 @Transactional(rollbackFor = Exception.class)
事务四大特征(ACID)
原子性(A):要么都成功,要么都失败
一致性©:事务前后的数据完整性要保证一致,开始1000块钱,后面转账结束了,也得是1000块钱
隔离性(I):事务A和事务B之间具有隔离性
持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
这个链接讲解的各个消息队列不错
https://baijiahao.baidu.com/s?id=1708982953211904704&wfr=spider&for=pc
Java八种基本数据类型总结
序号 | 数据类型 | 大小/字节 | 封装类 | 默认值 | 可表示数据范围 |
---|---|---|---|---|---|
1 | byte | 1 | Byte | 0 | -128~127 |
2 | short | 2 | Short | 0 | -32768~32767 |
3 | int | 4 | Integer | 0 | -2147483648~2147483647 |
4 | long | 8 | Long | 0 | |
5 | float(单精度) | 4 | Float | 0.0 | |
6 | double(双精度) | 8 | Double | 0.0 | |
7 | char | 2 | Char | 空 | |
8 | boolean | 1 | Boolean | false | true或false |
包装类的默认值都为:null
== 是判断两个人是不是住同一个地址
equals是判断同一个地址里住的人是不是同一个
包装类型间的判断应该用equals而不是 ==
redis的五大类型 set zset String hash list
Redis
RDB:把当前数据生成快照保存在硬盘上
AOF:记录每次对数据的操作到硬盘上
SpringBoot读取配置文件
@value 不推荐这种方式
@configurationproperties 读取并与bean绑定
@propertySource
新建 就绪 运行 阻塞 消亡
核心线程数 最大线程数 存活时间 时间单位 队列 线程工厂 拒绝策略
悲观锁:synchronized 和 lock为代表,一个线程拿到锁执行任务,
其他线程原地等待,等他执行完再去抢,过程就是从运行到阻塞,
再从阻塞到唤醒,涉及上下文切换,影响性能,
乐观锁:AtomicInteger 如果一个线程拿到锁,那么其他线程不会停歇的去
获取,知道成功。 线程一直运行,不需要阻塞,不涉及上下文切换
需要多核CPU支持。