Aop实现数据字典转换

本文介绍了如何使用AOP(面向切面编程)实现数据字典的自动转换,避免在前台进行状态码判断和转义。通过拦截字典查询方法,动态添加_text字段,使前端可以直接绑定中文描述,简化了开发流程。文章详细阐述了实现思路,包括自定义注解、查询方法和AOP拦截核心代码,以及示例中涉及的数据表和工具类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典转换简介

以前我们从数据字典里面取值,拿到的都是一堆状态码,我们需要在前台进行判断,然后转义成中文,这样是十分麻烦的,这又是每个字典字段不可少的一个地方,所以我就想到了利用切面来帮我们实现中文的转义。

首先直接看下最后实现的效果吧,一般我们的数据字典接口就之后返回我们的状态码,在aop处理过之后,它把我们的一些爱好、成绩等状态码转成了中文多加了几个字段一并返回给我们,这样我们在前台绑定的时候就能直接通过_text的字段进行绑定了,不需要进行转义了
在这里插入图片描述

实现思路:用aop拦截我们的字典查询方法,我们遍历查询出的code,然后通过code去调用方法查询出它对应的text文本值,添加了注解@Dict(dicDataSource = “stu_sex”) 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端(例如:我的学生等级字段是stulevel,然后我们通过拿到这个字段的值2去查询出它对应的等级B,然后把这个字段赋值给我们的stulevel_dictText然后一并添加到方法中返回),然后前端就可以直接取这个字段进行赋值

案例所用表

在这里插入图片描述

首先我们需要先自定义一个注解,这个注解主要是用来标识我们哪些字段是需要转义的

package com.xy.elasticsearch.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dict {
   
   

    /**
     * 方法描述:  数据dataSource
     * @return 返回类型: String
     */
    String dicDataSource();

    /**
     * 方法描述:  这是返回后Put到josn中的文本 key 值
     * @return 返回类型: String
     */
    String dicText() default "";
}

主要的两个方法,一个是查询出我们所有的字典数据,一个是通过code取查询text值

<!-- 查询出所有学生数据 -->
  <select id="listPager" resultType="com.xy.elasticsearch.entity.Student" parameterType="com.xy.elasticsearch.entity.Student">
    select
    <include refid="Base_Column_List" />
    from t_annotation_student
    <where>
      <if test="name != null and name != ''">
        and name like concat(concat('%',#{
   
   name}),'%')
      </if>
    </where>
  </select>

  <!--根据code去查询text文本-->
  <select id="queryByDatasourceCode" parameterType="com.xy.elasticsearch.entity.DataItem" resultType="com.xy.elasticsearch.entity.DataItem">
    select
        <include refid="Base_Column_List"></include>
    from t_annotation
    <where>
      <if test="datasource != null and datasource != ''">
        and datasource = #{
   
   datasource}
      </if>
      <if test="code != null and code != ''">
        and code = #{
   
   code}
      </if>
    </where>
  </select>

service层

package com.xy.elasticsearch.service;

import com.xy.elasticsearch.entity.DataItem;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.xml.crypto.Data;

/**
 * @author 阳某
 * @create 2020-03-22 13:44
 */
@Repository
public interface DataItemService {
   
   
    DataItem queryByDatasourceCode(DataItem dataItem);

    String queryBydatasourceKey(String datasource, String key);

}

方法实现

package com.xy.elasticsearch.service.impl;

import com.xy.elasticsearch.entity.DataItem;
import com.xy.elasticsearch.entity.DataItemMapper;
import com.xy.elasticsearch.service.DataItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.xml.crypto.Data;

/**
 * @author 阳某
 * @create 2020-03-22 14:23
 */
@Service
public class DataItemServiceImpl implements DataItemService {
   
   

    @Autowired
    private DataItemMapper dataItemMapper;

    @Override
    public DataItem queryByDatasourceCode(DataItem dataItem) {
   
   
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿秃头的阳某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值