Spring Converter(转换器)

@FunctionalInterface
public interface Converter<S, T> { //一对一转换
@Nullable
T convert(S source);
} 该接口非常简单,只定义了一个转换方法,两个泛型参数则是需要转换的两个类型。
在单独处理两个类型的转换时这是首选,即一对一。 但是倘若有同一父类(或接口)的类型需要进行类型转化,为每个类型都写一个Converter显然是十分不理智的。
对于这种情况,Spring提供了一个ConverterFactory接口。 public interface ConverterFactory<S, R> { //一对多转换
<T extends R> Converter<S, T> getConverter(Class<T> targetType);
}

字符串转换成枚举类

public class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {

    @SuppressWarnings("unchecked")
@Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToEnumConverter(targetType);
} private static class StringToEnumConverter<T extends Enum>
implements Converter<String, T> { private Class<T> enumType; private StringToEnumConverter(Class<T> enumType) {
this.enumType = enumType;
} @SuppressWarnings("unchecked")
@Override
public T convert(String source) {
return (T) Enum.valueOf(this.enumType, source.toUpperCase());
}
}
} 注册转换器: public class WebMvcAutoConfiguration implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new StringToEnumConverterFactory());
}
}

Hibernate 继承映射

单表继承映射(一张表)

每个子类对应一张表的继承映射(两张表)

每个类对应一张表的继承映射(三张表)

三种映射方式的比较:

  第一种方式,只有一张表,数据冗余较多,但查询效率高,数据量不是非常大的时候,推荐使用。

  第二种方式,每个子类对应一张表,数据冗余比较少,查询效率不高,主键不能设置成自增。

  第三种方式,每个类对应一张表,数据冗余较少,查询效率比第二种方式稍高,需要维护的表的个数较多。

Signal Table 多个entity对应同一张表,用一个字段区分(第一种方式)

//定义辨别者列的列名为person_type,列类型为字符串
@DiscriminatorColumn(name="person_type", discriminatorType=DiscriminatorType.STRING)
//指定该实体对应的记录在辨别者列的值为"person"
@DiscriminatorValue("普通人")
public class Person @DiscriminatorValue("顾客")
public class Customer extends Person @DiscriminatorValue("员工")
public class Employee extends Person /** 基础评论 Entity */
@Data
@Entity(name = "BaseComment")
@Table(name = "comments")
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER, columnDefinition = "int default 0")
public class BaseComment extends BaseEntity {} @Entity(name = "PostComment")
@DiscriminatorValue("0")
public class PostComment extends BaseComment {} @Entity(name = "SheetComment")
@DiscriminatorValue("1")
public class SheetComment extends BaseComment {} @Entity(name = "JournalComment")
@DiscriminatorValue("2")
public class JournalComment extends BaseComment {}

Spring Boot 解析 YAML

server:
name: app
address:
- 192.168.1.1
- 192.168.1.2 @Component
@ConfigurationProperties(prefix = "server")
public class Properties {
private String name;
private List<String> address = new ArrayList<>();
} server:
list:
- name: app1
address:
- 10.11.1.1
- 10.11.1.2
- name: app2
address:
- 10.10.1.1
- 10.10.1.2 @Component
@ConfigurationProperties(prefix = "server")
public class Properties {
private List<Ld> list = new ArrayList<>();
}
public class Ld {
private String name;
private List<String> address = new ArrayList<>();
} 或者 /** YAML文件转换器 */
public interface ThemePropertyResolver {
ThemeProperty resolve(String content) throws IOException;
} @Service
public class YamlThemePropertyResolver implements ThemePropertyResolver { private final ObjectMapper yamlMapper; public YamlThemePropertyResolver() {
yamlMapper = new ObjectMapper(new YAMLFactory());
//未知属性不报错
yamlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} @Override
public ThemeProperty resolve(String content) throws IOException {
return yamlMapper.readValue(content, ThemeProperty.class);
}
} @Data
public class ThemeProperty {
private String id;
private String name; @Data
public static class Author {
private String name;
private String website;
}
} id: ld
name: ld
author:
name: ld
website: https://

Halo(十)的更多相关文章

  1. Halo(十二)

    @RequestBody @ResponseBody @RequestBody 1) 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConver ...

  2. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. SSE图像算法优化系列二十:一种快速简单而又有效的低照度图像恢复算法。

    又有很久没有动笔了,主要是最近没研究什么东西,而且现在主流的趋势都是研究深度学习去了,但自己没这方面的需求,同时也就很少有动力再去看传统算法,今天一个人在家,还是抽空分享一个简单的算法吧. 前段日子在 ...

  4. Halo 的缔造者们在忙什么?

    如果你自认为是一名主机游戏玩家,就一定知道 Halo.自 2001 年首代作品问世至今,十多年的磨炼已使得『光环』成为世界顶级的 FPS 游戏之一.<光环4>的推出,更让系列走向一个重要的 ...

  5. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

  6. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  7. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  8. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  9. CSS十问——好奇心+刨根问底=CSSer

    最近有时间,想把酝酿的几篇博客都写出来,今天前端小学生带着10个问题,跟大家分享一下学习CSS的一些体会,我觉得想学好CSS,必须保持一颗好奇心和刨根问底的劲头,而不是复制粘贴,得过且过.本人能力有限 ...

随机推荐

  1. vue定义组件

    1.定义组件 2.在App.vue里引入Home组件 home代码 <template> <div>home</div> </template> < ...

  2. PHP操作Excel – PHPExcel 基本用法

    利用PHP实现对于Excel的写入和读取,主要借助于PHPExcel插件来完成. 准备工作: 1.下载PHPExcel的SDK,下载地址:https://github.com/PHPOffice/PH ...

  3. spring管理的事务

    之前对spring的事务传播机制没有概念,花点时间去看了事务的源码,以及这些事务传播机制使用的文档,在此做一下简单的笔记 正文 下面说提到的共享事务的意思就是几个service共用同一个事务,如传播机 ...

  4. Docker容器内部端口映射到外部宿主机端口

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. 注意:宿主机的一个端口只能映射到容器内部的某一个端口 ...

  5. data_model_action

    w PowerDesigner

  6. 深入学习Keras中Sequential模型及方法

    https://www.cnblogs.com/wj-1314/p/9579490.html

  7. js 数组相减 (一个数组去掉不符合条件的子数组)

    数组相减?我也希望将来在ES8或者更好js版本能带来数组之间相互运算的方法,但是现在不能,咱们只能靠已有的方法实现: var arr1 = [2,3,5,88,99,444,66],arr2 = [2 ...

  8. SQL常用语句之数据库中表的创建、删除以及属性的修改-篇幅3

    一.表的创建: CREATE TABLE [database_name.[schema_name].|schema_name.]table_name (column_name1 data_type   ...

  9. 字符串类——KMP算法的应用

    1,字符串类中的新功能(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述函数实现原理): 2,子串查找(KMP 算法直接运用): 1,int indexOf(const char* s) ...

  10. SQL server2000 创建表单的方法(已实践检验)

    我的系统是win7旗舰版的,在安装完SQL server2000之后,单击表,右键-新建表时,系统要么弹出:MMC检测到此管理单元发生一个错误.要么直接弹出microsoft sql server 2 ...