springboot嵌套子類使用方式—前端與后臺(tái)開(kāi)發(fā)的注意事項(xiàng)
springboot嵌套子類使用
在實(shí)際項(xiàng)目里,我們會(huì)使用到一個(gè)User用戶含有子類Address、這種嵌套子類在開(kāi)發(fā)中會(huì)遇到很多問(wèn)題,現(xiàn)在主要針對(duì)前臺(tái)和后臺(tái)的開(kāi)發(fā)問(wèn)題進(jìn)行整理。
實(shí)際Bean類
User類里含有Address類
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 對(duì)于一對(duì)一
使用@Result注解,調(diào)用查詢子類數(shù)據(jù)。
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); }
前臺(tái)使用bootstrap-table進(jìn)行解析顯示
在formmater里進(jìn)行子類顯示
columns: [{ ? ? ? ? ? ? checkbox : true ? ? ? ? }, { ? ? ? ? ? ? field: 'userId', ? ? ? ? ? ? title: '用戶ID' ? ? ? ? }, { ? ? ? ? ? ? field: 'userName', ? ? ? ? ? ? title: '用戶姓名' ? ? ? ? }, { ? ? ? ? ? ? field: 'userAddress', ? ? ? ? ? ? title: '地址', ? ? ? ? ? ? formatter : function(value,row, index){ ? //主要配置在這里 ? ? ? ? ? ? ? ? return value.city; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? ]
后臺(tái)Controller轉(zhuǎn)換成Json會(huì)出現(xiàn) $ref
解決辦法如下:
注意:
String jsonSting=JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect);
結(jié)果中出現(xiàn)$ref,先把JSONObject轉(zhuǎn)換成String,然后再轉(zhuǎn)換回JSONObject
? @ResponseBody ? ? @RequestMapping("allUser") ? ? public String findALL(){ ? ?? ? ? ? ? PageHelper.startPage(pageNumber,pageSize); ? ? ? ? List<User> userList= userService.findAll(); ? ? ? ? PageInfo<User> page=new PageInfo<>(userList); ? ? ? ? //取出查詢結(jié)果 ? ? ? ? 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); ?//結(jié)果中出現(xiàn)$ref,先把JSONObject轉(zhuǎn)換成String,然后再轉(zhuǎn)換回JSONObject ? ? ? ? JSONObject json= JSON.parseObject(jsonSting); ? ? ? ? System.out.println(json.toJSONString()); }
注解在嵌套方法不生效問(wèn)題
例如在service中方法如下
? ? @PermissionAop ? ? @Override ? ? public List<PoiPermission> getList() { ? ? ? ? List<PoiPermission> list = this.list(); ? ? ? ? return list; ? ? } ? ? @Override ? ? public void test(){ ? ? ? ? this.getList(); ? ? ? ? System.out.println(""); ? ? }
controller中調(diào)用test()方法,test方法中調(diào)用切面方法,切面不生效,無(wú)法進(jìn)入切面。
使用如下方式可解決該問(wèn)題(啟動(dòng)類上需要添加
@EnableAspectJAutoProxy(exposeProxy = true))
? ? @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類實(shí)現(xiàn)的接口。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何從官網(wǎng)下載Hibernate jar包的方法示例
這篇文章主要介紹了如何從官網(wǎng)下載Hibernate jar包的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04Java中checkbox實(shí)現(xiàn)跨頁(yè)多選的方法
最近做了一個(gè)項(xiàng)目其中遇到這樣的需求,要實(shí)現(xiàn)checkbox跨頁(yè)多選功能,經(jīng)過(guò)小編整理,順利解決,今天小編給大家分享Java中checkbox實(shí)現(xiàn)跨頁(yè)多選的方法,需要的的朋友參考下2017-01-01idea中提示Class 'xxx' is never us
這篇文章主要介紹了idea中提示Class 'xxx' is never used的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Java實(shí)現(xiàn)KFC點(diǎn)餐系統(tǒng)過(guò)程解析
這篇文章主要介紹了Java實(shí)現(xiàn)KFC點(diǎn)餐系統(tǒng)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
這篇文章主要介紹了Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器,文章我圍繞實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的相關(guān)代碼展現(xiàn)全文,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,2022-01-01