1.状态使用0或1表示,数据库中一般使用数字对应
2.创建相应的model类型
@Data
public class SysDict implments Serializable{
private static final long serialVersionUID = 1L;
@TableId(type=IdType.Auto)//设置主键自增
private Integer id;
private String typeCode; //字典值的类型
private String value; //字典名称
private String label;//字典值
@TableLogic//逻辑删除字段
private String delFlag;
}
3.写方言工具类DictUtils
//这个注解在使用 system cpngfig类的时候也有使用
@Component
public class DictUtils{
//从ioc容器中取出这个service对象 完成 static变量的初始化
@Autowired
private ISysDictService service;
private static ISysDictService sysDictService;
@PostConstruct //完成对从ioc容器中取出的service转移到service
public void init(){
sysDictService= service;
}
//根据type和value获取对应的中文label值
public String getDictLabel(String type, Integer value){
QueryWrapper<SysDict> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type_code",type); //前边对应数据库中的字段,后边是前端的属性
queryWrapper.eq("value",value);
SysDict sysdict = sysDictService.getOne(queryWrapper); //getOne方法参数只有querywrapper
return sysDict.getLabel();
}
}
4.完成工具类的使用,创建自定义方言类,直接前端调用,后边通过config方法将这个类方法等注入到bean容器
public class DictDialect extends AbstractDialect implements IExpressionObjectDialect {
public DictDialect(String name) {
super(name);
}
@Override
public IExpressionObjectFactory getExpressionObjectFactory() {
return new IExpressionObjectFactory() {
//定义自定获取的前缀名称
@Override
public Set<String> getAllExpressionObjectNames() {
return Collections.singleton("dict");
//后边都使用#{dict}表示表用了 utils类然后.方法 获取对应的label值
}
//将字典工具类注册
@Override
public Object buildObject(IExpressionContext iExpressionContext, String s) {
return new DictUtils();
}
//设置为缓存
@Override
public boolean isCacheable(String s) {
return true;
}
};
}
}
5.注册前边自定义方言类的方言插件的config
@Configuration
public class DialectConfig{
@Bean
@ConditionalOnMissingBean
//ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。//
public DictDialect customDialect(){
return new DictDialect("自定义的字典方言类");
}
}
下面给出mybatisp的分页插件
@Configuration
@MapperScan(basePackages = {"com.gem.back.mapper"})
public class MybatisPlusConfig {
/*
* 分页插件,自动识别数据库类型
* 多租户,请参考官网【插件扩展】
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
6.接下来前端页面使用这个方法
<tr th:each="sysuser:${userlist}">
<td th:text="sysuser.username"></td>
<td th:text="${#dict.getDictLabel("userStatus",sysuser.status)}">0</td>
<td>
<a href="#" th:href="@{/a/user/form(id=${sysuser.id})}" class="layui-btn layui-btn-sm">编辑</a>