最近在做一个省市区数据的三级联动,数据量太多,而且数据基本很少变化,每次从数据库获取会有很大压力,由于诸多原因,每次都是全部查询去遍历,相信很多人第一时间想到的是用缓存,没错,缓存确实也可以解决这个问题,但是这里我换了一种方式,直接生成json文件,后续去需要数据直接解析json文件的数据返回即可,在此只是利用省市区举个例子,具体问题具体分析,重点在于如何使用java实现json文件的生成与解析。
对于省市区三级联动的功能,有很多的方法能够减少对数据库的访问,来达到想要的效果
方式:
1. 直接前端使用省市区组件
2. 加入缓存
3. 懒加载模式,根据选中的数据查询对应下级数据
4. json文件生成与解析
5. 其它更多…
在这只是讲解下第四点
CreateFileUtil
json生成解析工具类
public class CreateFileUtil {
/**
* 生成.json格式文件
*/
public static boolean createJsonFile(String jsonString, String filePath, String fileName) {
// 标记文件生成是否成功
boolean flag = true;
// 拼接文件完整路径
//String fullPath = filePath + File.separator + fileName + ".json";
String fullPath = filePath + fileName + ".json";
// 生成json格式文件
try {
// 保证创建一个新文件
File file = new File(fullPath);
if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
file.getParentFile().mkdirs();
}
if (file.exists()) { // 如果已存在,删除旧文件
file.delete();
}
file.createNewFile();
// 格式化json字符串
jsonString = JsonFormatTool.formatJson(jsonString);
// 将格式化后的字符串写入文件
Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
write.write(jsonString);
write.flush();
write.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
// 返回是否成功的标记
return flag;
}
/**
* 读取json文件数据
*/
public static String fileToJson(String path){
String jsonStr = "";
try {
File jsonFile = new File(path);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
直接调用即可
效果
json文件效果:
解析数据效果:
如有问题,欢迎留言!