文章目录
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();
}