MySQL通过JSON格式查看SQL执行详细步骤
set session optimizer_trace='enabled=on';
[SQL语句]
select * from information_schema.optimizer_trace;
set session optimizer_trace='enabled=on';
[SQL语句]
select * from information_schema.optimizer_trace;
现象
代码
Map<Long, Person> map = new HashMap<>();
Person person = new Person();
person.setName("Bruce");
map.put(1L, person);
List<ContainerClass> list = new ArrayList<>();
ContainerClass containerClass = new ContainerClass();
containerClass.setP1(map.get(1L));
containerClass.setP2(map.get(1L));
list.add(containerClass);
String s = JSON.toJSONString(list);
System.out.println(s);
结果
[{"p1":{"name":"Bruce"},"p2":{"$ref":"$[0].p1"}}]
解决
方案一
String s = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
方案二
Person p2 = new Person();
BeanUtils.copyProperties(map.get(1L), p2);
containerClass.setP2(p2);
结果
[{"p1":{"name":"Bruce"},"p2":{"name":"Bruce"}}]
yaml配置如下:
objectConfig:
object-map:
1:
name: "对象一"
desc: "这是第一个对象"
url: "https://abc.abc.abc"
2:
name: "对象二"
desc: "这是第二个对象"
url: "https://abc.abc.abc"
Java配置类代码如下:
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "objectConfig")
public class ObjectConfig {
private Map<Integer, ObjectEntity> objectMap;
}
public static class ObjectEntity{
private String name;
private String desc;
private String url;
}
Java使用代码如下:
@Autowired
private ObjectConfig objectConfig;
ObjectConfig.ObjectEntity objectEntity = objectConfig.getObjectMap().get(1);
}
今天使用IDEA搭建项目的过程中,总是弹出Kotlin配置的对话框,之前一直使用19版的IDEA,没有这个东西,20版默认加了IDEA插件,让人头大。
在数次弹出配置对话框之后,无意点了“全部项目”,然后就导致所有项目报红,百度无结果,只能自己研究。
先是打开插件,把kotlin插件关掉,然后打开项目设置,把项目下面写着的kotlin删掉。
然后发现有些项目里面的target中存在kotlin关键字,于是把所有的target都删掉了(clean不掉,这个时候clean会报错,不能用)。
还是不行,然后就开始研究pom文件,报错的、能删的都删掉了,刷新一下maven,总算是搞定了。
说起来很简单,自己第一次摸索还是很耗费时间和经历的,希望后面的同学能顺利一点。
思路
选择排序,顾名思义,就是每次选出一个最小或最大的数,移动位置,直到整个数组完成排序。
有数组[26, -3, 14, -15, 0, 324, 98, 1, 22]
现对该数组进行排序,使用选择排序算法。
先来屡一下思路和步骤:
选出整个数组最小的数,记录它的下标;
将它和未排序的最左边数组进行交换(交换过就是排序了);
直至整个数组排序完成。
讲解
首先声明出待排序下标、最小值和最小下标。最小值我们使用Integer.MAX_VALUE,来确保数组中肯定有值能够被排序:
@Test
public void sortTest() {
int[] nums = new int[]{26, -3, 14, -15, 0, 324, 98, 1, 22};
selectSort(nums);
System.out.println(Arrays.toString(nums));
}
private void selectSort(int[] nums) {
if (nums.length < 2) {
return;
}
// 待排序下标,从0开始
for (int i = 0; i < nums.length; i++) {
// 初始化最小值和最小下标
int minVal = Integer.MAX_VALUE;
int minIndex = -1;
// 遍历,寻找最小值
for (int j = i; j < nums.length; j++) {
// 如果元素小于minVal,则赋值minVal和minIndex
if (nums[j] < minVal) {
minVal = nums[j];
minIndex = j;
}
}
// 如果最小下标不等于-1,与待排序下表交换
if (minIndex != -1) {
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
}