Java easy_trans字典绑定,Java字典注解绑定

278 篇文章 1 订阅
57 篇文章 0 订阅

 ================================

©Copyright 蕃薯耀 2022-08-30

蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

一、引入Maven依赖

基于<mybatisPlus.version>3.4.3.3</mybatisPlus.version>实现

        <dependency>
		    <groupId>com.baomidou</groupId>
		    <artifactId>mybatis-plus-boot-starter</artifactId>
		    <version>${mybatisPlus.version}</version>
		</dependency>
		
		<dependency>
		    <groupId>com.baomidou</groupId>
		    <artifactId>mybatis-plus-generator</artifactId>
		    <version>${mybatisPlusGenerator.version}</version>
		    <scope>provided</scope>
		</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
		
		<dependency>
		    <groupId>com.fhs-opensource</groupId>
		    <artifactId>easy-trans-spring-boot-starter</artifactId>
		    <version>2.0.2</version>
		    <exclusions>
		    	<exclusion>
		    		<groupId>com.baomidou</groupId>
            		<artifactId>mybatis-plus-annotation</artifactId>
		    	</exclusion>
		    </exclusions>
		</dependency>
		
		<dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-mybatis-plus-extend</artifactId>
            <version>2.0.2</version>
            <exclusions>
            	<exclusion>
		            <groupId>com.baomidou</groupId>
		            <artifactId>mybatis-plus-core</artifactId>
            	</exclusion>
            	<exclusion>
		            <groupId>com.baomidou</groupId>
		            <artifactId>mybatis-plus-extension</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
        
		<dependency>
		    <groupId>commons-beanutils</groupId>
		    <artifactId>commons-beanutils</artifactId>
		    <version>1.9.4</version>
		</dependency>

不要漏了:commons-beanutils

解决Mybatis-Plus版本不一致的注解冲突问题

Caused by: java.lang.ClassNotFoundException: com.baomidou.mybatisplus.annotation.OrderBy
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 101 common frames omitted

排除 mybatis-plus-annotation

		<dependency>
		    <groupId>com.fhs-opensource</groupId>
		    <artifactId>easy-trans-spring-boot-starter</artifactId>
		    <version>2.0.2</version>
		    <exclusions>
		    	<exclusion>
		    		<groupId>com.baomidou</groupId>
            		<artifactId>mybatis-plus-annotation</artifactId>
		    	</exclusion>
		    </exclusions>
		</dependency>

二、application.properties 配置

1、Redis配置

spring.redis.host=192.168.11.210
spring.redis.port=6379
spring.redis.database=0
#spring.redis.password=
spring.redis.timeout=3000

2、easy-trans配置

#启用redis缓存 如果不用redis请设置为false
#如果不使用redis,请在启动类加禁用掉redis的自动配置类
#@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
easy-trans.is-enable-redis: true
#方式1:启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
#方式2:标记为 @TransMethodResult 的方法返回值会自动翻译,基于AOP实现,实现效果同全局翻译。
#方式3:翻译服务的核心是TransService 把此类@Autowired到你的controller或者service中,
#调用 transOne/transBatch 方法可以翻译单个/多个 pojo,为了性能,TransService 不处理嵌套,
#比如User里套了个Org org里面的数据不会被翻译。
easy-trans.is-enable-global: false
#启用平铺模式
easy-trans.is-enable-tile: true
#如果你项目框架使用map的子类包装vo(比如 ruoyi的ajaxResult类)请设置为true否则请不设置或者设置为false
#easy-trans.is-enable-map-result: true

三、实体类继承和注解

1、实体类继承 TransPojo 接口

public class WarehousePrincipal implements Serializable,TransPojo

2、属性添加 @Trans 注解

@Trans(type = TransType.DICTIONARY,key = "warehouse_principal", ref = "typeName")

3、完整示例

@TableName("warehouse_principal")
@ApiModel(value = "WarehousePrincipal对象", description = "")
public class WarehousePrincipal implements Serializable,TransPojo {

    private static final long serialVersionUID = 1L;

      @ApiModelProperty("主键")
      @TableId(value = "id", type = IdType.AUTO)
      private Long id;


      @Trans(type = TransType.DICTIONARY,key = "warehouse_principal", ref = "typeName")
      @ApiModelProperty("负责人类型,默认为0,0:仓库管理员,1:仓库责任人")
      private Integer type;

      

}

4、其它使用情形

//实现TransPojo  接口,代表这个类需要被翻译或者被当作翻译的数据源
public class Student implements TransPojo {
     // 字典翻译 ref为非必填
    @Trans(type = TransType.DICTIONARY,key = "sex",ref = "sexName")
    private Integer sex;

    //这个字段可以不写,实现了TransPojo接口后有一个getTransMap方法,sexName可以让前端去transMap取
    private String sexName;
    
    //SIMPLE 翻译,用于关联其他的表进行翻译    schoolName 为 School 的一个字段
    @Trans(type = TransType.SIMPLE,target = School.class,fields = "schoolName")
    private String schoolId;
	
	//远程翻译,调用其他微服务的数据源进行翻译
	@Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle")
    private String middleSchoolId;
	
	// 枚举翻译,返回文科还是理科给前端
	@Trans(type=TransType.ENUM,key = "desc")
    private StudentType studentType = StudentType.ARTS;

    public static enum StudentType{

        ARTS("文科"),
        SCIENCES("理科");

        private String desc;
        StudentType(String desc){
            this.desc = desc;
        }
    }
}

四、Controller方法添加 @TransMethodResult 注解

因为不是全局配置,所以在需要转换的方法增加注解。

	@TransMethodResult
	@RequestMapping("/queryForPageVO")
	public Result queryForPage(@RequestBody Page<WarehousePrincipalVO> page, 
			@RequestBody WarehousePrincipalVO params) {
		
		return Result.ok(warehousePrincipalService.queryForPageVO(page, params));
	}

如果要开启全局注解,则需要在配置文件中修改配置项,但开启全局会影响性能。

#方式1:启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
#方式2:标记为 @TransMethodResult 的方法返回值会自动翻译,基于AOP实现,实现效果同全局翻译。
#方式3:翻译服务的核心是TransService 把此类@Autowired到你的controller或者service中,
#调用 transOne/transBatch 方法可以翻译单个/多个 pojo,为了性能,TransService 不处理嵌套,
#比如User里套了个Org org里面的数据不会被翻译。
easy-trans.is-enable-global: true

五、字典数据初始化

import java.util.Map;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.fhs.trans.service.impl.DictionaryTransService;


@Component
public class TransJob {

	private static final Logger log = LoggerFactory.getLogger(TransJob.class);
	
	@Resource
	private SysDictService sysDictService;
	
	//注入字典翻译服务
	@Resource
    private  DictionaryTransService dictionaryTransService;
	
	@Scheduled(initialDelay = 3000, fixedRate = 5 * 60 * 1000)
    public void execute() {
		
		Long startTime = System.currentTimeMillis();
		try {
			dictionaryTransService.makeUseRedis();
			
			Map<String, Map<String, String>> datas = sysDictService.getDictMaps();
			
			if(datas != null && !datas.isEmpty()) {
				for (String key : datas.keySet()) {
					dictionaryTransService.refreshCache(key, datas.get(key));
				}
			}
			
		} catch (Exception e) {
			BizException.error("TransJob更新字典缓存失败", e);
		}
		
		Long endTime = System.currentTimeMillis();
		
        log.info("TransJob更新字典缓存消耗时间为:{}", (endTime - startTime) + " ms");
    }
	
}

================================

©Copyright 蕃薯耀 2022-08-30

蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介:历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值