springboot嵌套子类使用
在实际项目里,我们会使用到一个User用户含有子类Address、这种嵌套子类在开发中会遇到很多问题,现在主要针对前台和后台的开发问题进行整理。
实际Bean类
User类里含有Address类
1
2
3
4
5
6
7
8
9
10
11
|
public class User { private int userId; private String userName; private Address userAddress; } public class Address { private int addressId; private String city; //忽略get、set方法 } |
UserMapper.java 对于一对一
使用@Result注解,调用查询子类数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public interface UserMapper { //one to one @Select ( "select * from user where userId = #{userId}" ) @Results ({ @Result (id= true ,column= "userId" ,property= "userId" ), @Result (column= "userName" ,property= "userName" ), @Result (column= "userId" ,property= "userAddress" ,one= @One (select= "com.whale.mapper.AddressMapper.getAddressByUserId" ,fetchType= FetchType.EAGER)) }) public interface AddressMapper { @Select ( "select * from address where userId=#{userId}" ) public Address getAddressByUserId( int userId); } |
前台使用bootstrap-table进行解析显示
在formmater里进行子类显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
columns: [{ checkbox : true }, { field: 'userId', title: '用户ID' }, { field: 'userName', title: '用户姓名' }, { field: 'userAddress', title: '地址', formatter : function(value,row, index){ //主要配置在这里 return value.city; } } ] |
后台Controller转换成Json会出现 $ref
解决办法如下:
注意:
1
|
String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect); |
结果中出现$ref,先把JSONObject转换成String,然后再转换回JSONObject
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@ResponseBody @RequestMapping ( "allUser" ) public String findALL(){ PageHelper.startPage(pageNumber,pageSize); List<User> userList= userService.findAll(); PageInfo<User> page= new PageInfo<>(userList); //取出查询结果 List<User> rows = page.getList(); JSONObject result = new JSONObject(); int total = ( int ) page.getTotal(); result.put( "total" ,total); result.put( "rows" ,rows); String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect); //结果中出现$ref,先把JSONObject转换成String,然后再转换回JSONObject JSONObject json= JSON.parseObject(jsonSting); System.out.println(json.toJSONString()); } |
注解在嵌套方法不生效问题
例如在service中方法如下
1
2
3
4
5
6
7
8
9
10
11
|
@PermissionAop @Override public List<PoiPermission> getList() { List<PoiPermission> list = this .list(); return list; } @Override public void test(){ this .getList(); System.out.println( "" ); } |
controller中调用test()方法,test方法中调用切面方法,切面不生效,无法进入切面。
使用如下方式可解决该问题(启动类上需要添加
1
|
@EnableAspectJAutoProxy (exposeProxy = true )) |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@PermissionAop @Override public List<PoiPermission> getList() { List<PoiPermission> list = this .list(); return list; } @Override public void test(){ IPoiPermissionService service = (IPoiPermissionService) AopContext.currentProxy(); service.getList(); System.out.println( "" ); } |
其中IPoiPermissionService为该service类实现的接口。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zhaolulu916/article/details/103668023