根据CREATE TABLE `tb_dic` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` varchar(255) DEFAULT NULL COMMENT '数据项名称', `other_name1` varchar(255) DEFAULT NULL COMMENT '数据项别名1', `other_name2` varchar(255) DEFAULT NULL COMMENT '数据项别名2', `detail` varchar(255) DEFAULT NULL COMMENT '详细描述', `type_id` int(11) DEFAULT NULL COMMENT '类别id', `order` varchar(255) DEFAULT NULL COMMENT '排序', `valid` int(11) DEFAULT NULL COMMENT '是否有效', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典表';CREATE TABLE `tb_dic_type` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type_name` varchar(255) DEFAULT NULL COMMENT '字典类型名称', `type_detail` varchar(255) DEFAULT NULL COMMENT '字典类型描述', `edit` varchar(255) DEFAULT NULL COMMENT '是否可编辑1是0否', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典类型表'; 基于Springboot 生成 字典缓存代码
时间: 2023-11-21 14:10:37 浏览: 35
以下是一个基于Springboot生成字典缓存的示例代码:
```
@Service
public class DictionaryService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private CacheManager cacheManager;
@Cacheable(value = "dictionaryCache", keyGenerator = "cacheKeyGenerator")
public Map<String, Map<String, String>> getDictionary() {
Map<String, Map<String, String>> dictionary = new HashMap<>();
// 查询字典类型列表
List<Map<String, Object>> types = jdbcTemplate.queryForList("SELECT * FROM tb_dic_type WHERE valid = 1");
for (Map<String, Object> type : types) {
int typeId = (int) type.get("id");
String typeName = (String) type.get("type_name");
// 查询字典项列表
List<Map<String, Object>> items = jdbcTemplate.queryForList("SELECT * FROM tb_dic WHERE type_id = ? AND valid = 1 ORDER BY `order`", typeId);
Map<String, String> itemMap = new LinkedHashMap<>();
for (Map<String, Object> item : items) {
String itemName = (String) item.get("name");
String detail = (String) item.get("detail");
itemMap.put(itemName, detail);
}
dictionary.put(typeName, itemMap);
}
return dictionary;
}
@CacheEvict(value = "dictionaryCache", allEntries = true)
public void clearCache() {
}
}
```
这个示例代码中,我们使用了Springboot的缓存注解,通过@Cacheable注解将getDictionary方法进行了缓存配置,并指定了缓存名称为dictionaryCache。同时,我们还在该注解中指定了一个keyGenerator,用于生成缓存的key。这里我们使用了一个自定义的keyGenerator,用于生成符合我们需求的缓存key。
在getDictionary方法中,我们先查询字典类型列表,然后遍历每个字典类型,查询该字典类型下的字典项列表,并将字典项信息存放到一个Map中。最后,我们将这个字典信息的Map存放到另一个Map中,以字典类型名称为key,字典项信息的Map为value。
在clearCache方法中,我们使用了@CacheEvict注解,用于清空dictionaryCache缓存。当我们在数据库中修改了字典信息时,调用该方法就可以清空缓存,让下一次调用getDictionary方法时重新加载最新的字典信息。