ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## Json配置映射 类似MyBatis通过xml提供映射,BeetlSQL3通过JsonConfigMapper,实现ResultSetMapper,提供了一个json格式映射 ```java private static final String USER_MAPPING = "{'id':'id','name':'name','deptName':'dept_name'}"; @Data @ResultProvider(JsonConfigMapper.class) @JsonMapper(USER_MAPPING) public static class UserInfo { Integer id; String name; String deptName; } ``` 对于UserInfo,使用了BeetlSQL3提供的JsonConfigMapper对象,JsonConfigMapper会读取@JsonMapper( 此类被@ProviderConfig标注)作为配置映射参数,这样,如果查询的SQL结果集是 ``` id,name,detp_name ``` 则会按照`USER_MAPPING`的配置映射到各自属性上 > @JsonMapper 实现了@ProviderConfig()注解,因此,这注解将会传给JsonConfigMapper。了解BeetlSQL3注解如何实现,可以参考《源码解读》 如果需要一对多的映射,也可以使用 ```java private static final String DEPT_MAPPING = "{'id':'id','name':'name','users':{'id':'u_id','name':'u_name'}}"; @Data @ResultProvider(JsonConfigMapper.class) @JsonMapper(DEPT_MAPPING) public static class DepartmentInfo { Integer id; String name; List<UserInfo> users; } ``` 对于DEPT_MAPPING配置,如果结果集满足 ```sql id,name,u_id,u_name ``` 则可以进行映射,并且,u_id,u_name,赋值给UserInfo对象, 此对象合并到**相同(id,name)**的DepartmentInfo的users属性上 JsonConfigMapper可以进行任意复杂的映射。 并将结果集合并 @JsonMapper提供了json配置,也可以指定一个sqlId作为配置,因此配置可以放到markdown文件里 ```java @ResultProvider(JsonConfigMapper.class) //@JsonMapper( // "{'id':'id','name':'name','users':{'id':'u_id','name':'u_name'}}") @JsonMapper(resource ="dept.departmentJsonMapping") public class MyDepartment { Integer id; String name; List<MyUser> users; } ``` dept.md内容如下 ```markdown departmentJsonMapping === * MyDepartment 映射关系配置 ​```json { "id":"id", "name":"name", "users": { "id":"u_id", "name":"u_name" } } ​``` ```