关于Java项目代码的个人理解,JDK8的新特性

Dao层为数据连接层,一般一个Dao层与一张表相对应
Dto层为数据传输层,一般一个Dao对应一个Dto或多个Dto,原因是前端不需要传输全部字段,所以新建一个Dto层,其实可以用Map代替

1、@Builder创建对象

Dao.builder().属性("属性值").属性("属性值").build()

2、遍历List合并结果集

在主Dto中添加副Dto的List

public class SklMechanismDto implements Serializable {
    List<SklPersonnel> personnels;
}

3、 .forEach(item->{}); 合并结果集

sklMechanisms.forEach(info->{
       List<SklPersonnel> sklPersonnels = sklPersonnelMapper.selectPersonnelByMechanismId(info.getId());
       info.setPersonnels(sklPersonnels);
            });

list.stream().map(Dto::new).collect(Collectors.toList());

public List<SklDictionaryDto> getPubDictionary(ParameterMap param) {
        String category = MapUtils.getString(param, "category");
        List<SklDictionary> sklDictionaries = dictionaryMapper.selectAllList(SklDictionary.builder()
                .category(category).build()
        );
        return sklDictionaries.stream().map(SklDictionaryDto::new).collect(Collectors.toList());
    }

4、Java enum

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

例如定义一个颜色的枚举类。

enum Color 
{ 
    RED, GREEN, BLUE; 
} 

5、获取与当前用户同一组的用户信息

String username = ServletUtil.getCurrentUser();
SysUserRole sysUserRole = userRoleMapper.selectByUsername(username);
SysUser sysUser = userMapper.selectUserByUsername(username);
List<SysUser> sysUsers = userMapper.selectListByGrpno(sysUser.getGrpno());
List<String> usernames = sysUsers.stream().map(SysUser::getUsername).collect(Collectors.toList());

6、将json转成数组

private void doJsonParse(SklConcludeProjects entity) {
        //将json 转成数组
        if((entity.getProjectActors()==null || entity.getProjectActors().size()==0)
                && !StringUtils.isEmpty(entity.getProjectActorsJson()) ) {
            List<SklConcludeProjectsActor> o = JsonUtil.toObject(entity.getProjectActorsJson(), new TypeReference<List<SklConcludeProjectsActor>>() {});
            entity.setProjectActors(o);
        }
        //将json 转成数组同时把上传的文件与期对应起来
        if((entity.getStageResults()==null || entity.getStageResults().size()==0)
                && !StringUtils.isEmpty(entity.getStageResultsJson()) ) {
            List<SklConcludeProjectsStageResult> o = JsonUtil.toObject(entity.getStageResultsJson(), new TypeReference<List<SklConcludeProjectsStageResult>>() {});
            if (entity.getStageAttachFiles() != null && entity.getStageAttachFiles().size() > 0) {
                o.forEach(p->{
                    if (StringUtils.hasText(entity.getStageResultsJson()) && !StringUtils.isEmpty(p.getAttachName())) {
                        for (MultipartFile stageAttachFile : entity.getStageAttachFiles()) {
                            if (stageAttachFile.getOriginalFilename() == null) {
                                continue;
                            }
                            if (stageAttachFile.getOriginalFilename().contains(p.getAttachName())) {
                                p.setStageAttachFile(stageAttachFile);
                                break;
                            }
                        }
                    }
                });
            }
            entity.setStageResults(o);
        }
    }

7、获取当前项目路径

//自定义文件目录,在配置文件中application-dev
params: 
	#文章附件绝对地址
 	articlesFilePath: /articles/local/

        
        
@Value("${params.articlesFilePath}")
private String articlesFilePath;

//文件路径			
String filePath = articlesFilePath+now.get(Calendar.YEAR)+"_"+(now.get(Calendar.MONTH) + 1)+"/";
File rootPath = new File("");
String path = rootPath.getCanonicalPath() + filePath;

8、已知图片url,将图片转为base64再以map形式传输

try {
    //如果图片url为空则返回null
    if (sklArticle.getTitleImg() == null){
        map.put("image",null);
        return map;
    }
    //从数据库中拿出url
    String imagePath = sklArticle.getTitleImg();
    FileInputStream fis = new FileInputStream(imagePath);
    //新建流
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    int count = 0;
    byte[] buffer = new byte[1024 * 8];
    //用字符流复制图片,循环读取,每次读取1024*8个字节
    //虽然是每次循环读取1024*8个字节,但实际上还是一个一个字节读取的,当读取完后会返回一个-1,结束循环
    while ((count = fis.read(buffer)) != -1) {
        os.write(buffer, 0, count);
        //刷新该缓冲流,即,将使用的Wrtier流写入到本地文件中,而不是存于内存中,清除buffer内容
        os.flush();
    }
    //从流中获取数据数组
    byte b[] = os.toByteArray();
    Base64 base64 = new Base64();
    //将字节数组转为base64形式并加入map
    map.put("image",base64.encodeToString(b));
    fis.close();
    os.close();
    return map;
} catch (Exception e) {
    e.printStackTrace();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值