1.数据字典
在之前设置的数据字典的服务写代码
对数据字典表的增删改查,
2.数据字典初始数据
数据字典的初始数据利用EasyExcel导入
EasyExcel基本使用
2.1导入依赖
<!-- easyexcel依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
2.2创建实体类
@Data
public class UserData{
@ExcelProperty("用户编号") //该注解是表头上的字段名
private int uid;
@ExcelProperty("用户名称")
private String username;
}
2.3读取数据库写入excel
public class TestWriter {
public static void main(String[] args){
//模拟一个List集合
List<UserData> list = new ArrayList();
for(int i=0; i<10; i++){
UserData data = new UserData();
data.setUid(i);
data.setUsername("lucy" + i);
list.add(data);
}
//1.设置excel文件路径和文件名称(文件夹必须已存在)
String fileName = "E:\\excel\\01.xlsx";
//2.调用方法实现写操作
EasyExcel.write(fileName, UserData.class)
.sheet("用户信息") //excel工作表的名字
.doWrite(list);
}
}
2.4写入数据库 创建实体类但需要修改
@Data
public class UserData{
@ExcelProperty(value="用户编号", index = 0) //index表示顺序,0表示对应表中第1个字段
private int uid;
@ExcelProperty(value = "用户名称", index = 1)
private String username;
}
2.5创建类并继承AnalysisEventListener
public class ExcelListener extends AnalysisEventListener<UserData> {
@Override
public void invoke(UserData userData, AnalysisContext analysisContext) {
System.out.println(userData);
//该方法表示一行一行读取excel内容,但是它从第二行读取,第一行是表头
//读取一行数据后封装到userData对象中
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头信息" + headMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
2.6调用
public class TestRead {
public static void main(String[] args){
//1.读取文件路径
String fileName = "E:\\excel\\01.xlsx";
//2.调用方法实现读取操作
EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead();
}
}
3redis+spring Cache
因为数据字典里的数据量过于庞大所以需要使用缓存技术
@Cacheable(value = "dict", keyGenerator = "keyGenerator")
//注@Cacheable使用springframework中的
/**
* 表示该方法的返回值存入缓存,命名:dict
* keyGenerator表示根据当前方法的包名、类名、方法名生成key(唯一效果)
*/
@CacheEvict(value = "dict", allEntries = true)
/**
* 清空指定dict的缓存数据
* allEntries=true表示清空所有缓存
*/
缓存@Cacheable
用在方法上,使用最多的缓存注解。
工作流程:先访问缓存,缓存中没有,去数据库查询,查询结果存到缓存。
根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。
查看源码,属性值如下:
属性/方法名 | 解释 |
value | 缓存名,必填,它指定了你的缓存存放在哪块命名空间 |
cacheNames | 与 value 差不多,二选一即可 |
key | 可选属性,可以使用 SpEL 标签自定义缓存的key |
缓存@CachePut
一般用在添加方法上,当添加一条新数据时,该数据会同步到指定的缓存中去。
使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。
查看源码,属性值如下:
属性/方法名 | 解释 |
value | 缓存名,必填,它指定了你的缓存存放在哪块命名空间 |
cacheNames | 与 value 差不多,二选一即可 |
key | 可选属性,可以使用 SpEL 标签自定义缓存的 |
缓存@CacheEvict
一般用在更新或删除的方法上,用于清空指定缓存。
使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上。
查看源码,属性值如下:
属性/方法名 | 解释 |
value | 缓存名,必填,它指定了你的缓存存放在哪块命名空间 |
cacheNames | 与 value 差不多,二选一即可 |
key | 可选属性,可以使用 SpEL 标签自定义缓存的key |
allEntries | 是否清空所有缓存,默认为 false。如果指定为 true,则方法调用后将立即清空所有的缓存 |
beforeInvocation | 是否在方法执行前就清空,默认为 false。如果指定为 true,则在方法执行前就会清空缓存 |