第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Restful服務(wù) MyBatis 多表查詢大量字段時(shí)結(jié)果集映射解決方案?

Restful服務(wù) MyBatis 多表查詢大量字段時(shí)結(jié)果集映射解決方案?

慕田峪4524236 2019-03-21 18:19:47
MyBatis 無論是 resultType 還是 resultMap 都需要一個(gè)實(shí)體例如我們這樣一個(gè)SQL<mapper namespace="com.savorgames.dao.MemberMapper">   <select id="test" resultType="com.savorgames.domain.Member">       SELECT username,password FROM "user";  </select></mapper>Member實(shí)體public class Member {        private int uid;    private String username;    private String password;    private String email;    private String nickname;        public int getUid() {        return uid;    }    public void setUid(int uid) {        this.uid = uid;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getNickname() {        return nickname;    }    public void setNickname(String nickname) {        this.nickname = nickname;    }}結(jié)果集映射MapperList<Member>現(xiàn)在問題來了,做restful服務(wù)器時(shí)候,將實(shí)體轉(zhuǎn)換成 json 會(huì)出現(xiàn)大量空值 并暴露數(shù)據(jù)庫表字段,傳輸?shù)膉son也相對(duì)變大了例如:[{"uid":0,"username":"阿斯達(dá)","password":null,"email":null,"nickname":null},{"uid":0,"username":"阿薩法","password":null,"email":null,"nickname":null},{"uid":0,"username":"阿斯達(dá)","password":null,"email":null,"nickname":null},{"uid":0,"username":"啊實(shí)打?qū)嵉?quot;,"password":null,"email":null,"nickname":null},{"uid":0,"username":"阿斯達(dá)啊","password":null,"email":null,"nickname":null},{"uid":0,"username":"是打算打","password":null,"email":null,"nickname":null},{"uid":0,"username":"阿斯達(dá)","password":"12312312","email":null,"nickname":null}]總不能每一個(gè)sql語句都寫一個(gè)實(shí)體類吧,如何靈活的處理 MyBatis 結(jié)果集,只返回查詢字段?
查看完整描述

5 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

正確的做法是不改變實(shí)體類(DO),

  1. 新建數(shù)據(jù)傳輸類(DTO),例如MemberDTO,

  2. 寫一個(gè)方法吧DO轉(zhuǎn)化成DTO,一個(gè)DTO包含的數(shù)據(jù)可能來自好幾個(gè)DO,就像你現(xiàn)在需要傳輸Member的數(shù)據(jù),如果需要其他表的一些屬性怎么辦。

DO是保持和數(shù)據(jù)庫一致的,DTO是保持跟外界交互一致的,這樣在數(shù)據(jù)或者業(yè)務(wù)發(fā)生變動(dòng)的時(shí)候,可以靈活的調(diào)整。
千萬不要把DO直接拿來做數(shù)據(jù)傳輸,這樣不利于擴(kuò)展


查看完整回答
反對(duì) 回復(fù) 2019-04-19
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

這個(gè)跟Mybatis沒有半毛錢關(guān)系吧,應(yīng)該是json序列化的配置問題。

我假設(shè)你用的是SpringMVC+Jackson,Jackson的序列化配置如下:


<mvc:annotation-driven>

    <mvc:message-converters register-defaults="true">

        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

            <property name="objectMapper">

                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">

            <property name="serializationInclusion" value="NON_NULL"/><!-- 重點(diǎn):只輸出非NULL字段 -->

        </bean>

    </mvc:message-converters>

</mvc:annotation-driven>

可以看一下@JsonInclude的幾個(gè)枚舉變量對(duì)應(yīng)的含義,個(gè)人認(rèn)為最理想的應(yīng)該是用NON_EMPTY,這個(gè)會(huì)把空對(duì)象、空數(shù)組也不輸出(例如:{}, [])。但要注意的是:0也會(huì)被認(rèn)為是EMPTY從而不輸出(意味著所有沒賦值或?yàn)?的int類型或Integer對(duì)象都不會(huì)被輸出)。


查看完整回答
反對(duì) 回復(fù) 2019-04-19
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

將對(duì)象轉(zhuǎn)換為JSON時(shí)(序列化過程),如果對(duì)象的某個(gè)屬性值為null,則該屬性不參與序列化,生成的JSON結(jié)果也不會(huì)包含該屬性。代碼如下:


public String toNotifyBody(NotifyBean bean) {

        HashMap<String, Object> map = new HashMap<String, Object>();

        map.put("orderId", bean.orderId);

        map.put("title", bean.title);

        map.put("subject", bean.subject);

        map.put("operateType", bean.operateType);

        map.put("handlePerson", bean.handlePerson);

        map.put("extractPerson", bean.extractPerson);

        map.put("sla", bean.sla);

        return JSON.toJSONString(map);

    }

將上述參數(shù),放在map中,然后調(diào)用json的方法JSON.toJSONString()的時(shí)候,對(duì)于null值,是不傳輸?shù)?。我們看一下JSON.toJSONString()方法的實(shí)現(xiàn)。


public static final String toJSONString(Object object) {

        return toJSONString(object, new SerializerFeature[0]);

    }

    public static final String toJSONString(Object object, SerializerFeature... features) {

        SerializeWriter out = new SerializeWriter();


        try {

            JSONSerializer serializer = new JSONSerializer(out);

            for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {

                serializer.config(feature, true);

            }


            serializer.write(object);


            return out.toString();

        } finally {

            out.close();

        }

    }


查看完整回答
反對(duì) 回復(fù) 2019-04-19
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果沒有實(shí)體類,暴露數(shù)據(jù)表字段是必然的。

不知道你使用的什么方法生成 JSON,不過理論上來說,應(yīng)該會(huì)有一個(gè)忽略空值的參數(shù),找找看,如果實(shí)在找不到,可以用正則表達(dá)式把空屬性去掉。


查看完整回答
反對(duì) 回復(fù) 2019-04-19
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

構(gòu)建對(duì)應(yīng)的實(shí)體類是必須的,只顯示需要展示的內(nèi)容,并對(duì)數(shù)據(jù)的格式進(jìn)行轉(zhuǎn)換(比如date轉(zhuǎn)string等)


查看完整回答
反對(duì) 回復(fù) 2019-04-19
  • 5 回答
  • 0 關(guān)注
  • 2335 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)