@SQLDelete 场景描述 JPA中提供了简单的CRUD操作,其中删除操作是物理删除,但是实际应用中,系统中的数据是一种资源,不能直接删除,应该做到逻辑删除,JPA中删除操作是不可取的。
场景示例 调用JPA的删除方法,如下代码所示:
@Test public void testJpaDelete() { //此处根据id删除角色信息 roleRepository.deleteById(1); } 执行上面的测试方法,数据表中主键为1的数据,已经被删除掉,看下JPA的执行SQL如下所示:
delete from role where id=? 此语句为JPA删除操作的默认执行语句。
解决 …
2019-12-01273 字2 分钟
代码优化-多态代替IF条件判断
场景描述 在开发的场景中,常常会遇到打折的业务需求,每个用户对应的等级,他们的打折情况也是不一样的。例如普通会员打9折,青铜会员打8.5折,黄金会员打8折等等。在一般开发中最简单的就是判断用户的等级,然后对订单作对应的打折处理。
场景示例 写了一个简单的小示例,如下所示:
//1 代表学生 2老师 3校长 int type = 1; if (1 == type) { System.out.println("学生笑嘻嘻的说话"); } else if (2 == type) { System.out.println("老师开心的说话"); } else { …
2019-10-2714 字1 分钟
Bug集锦-Spring Cloud Feign调用其它接口报错
问题描述 Spring Cloud Feign调用其它服务报错,错误提示如下:Failed to instantiate [java.util.List]: Specified class is an interface。
解决方案 通过查询一些资料,得到的结论,是定义接口传递的参数时,没有用@RequestBody修饰,查看定义接口有用@RequestBogy修饰,Feign的接口实现里没有用@RequestBody修饰,添加后问题就解决了,以后还是要仔细看待每个问题。
2019-09-03550 字3 分钟
Java多线程-线程通信
通信的方式 要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间的相互通信,分为下面四类:
文件共享 网络共享 共享变量 JDK提供的线程协调API suspend/resume、wait/notify、park/unpark 文件共享 public class MainTest { public static void main(String[] args) { // 线程1 - 写入数据 new Thread(() -> { try { while (true) { …
2019-08-26191 字1 分钟
Java多线程-线程中止
不正确的线程中止-Stop Stop:中止线程,并且清除监控器锁的信息,但是可能导致 线程安全问题,JDK不建议用。 Destroy: JDK未实现该方法。
/** * @author simon */ public class StopThread extends Thread { private int i = 0, j = 0; @Override public void run() { synchronized (this) { // 增加同步锁,确保线程安全 ++i; try { // 休眠10秒,模拟耗时操作 Thread.sleep(10000); } catch …