成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mybatis使用小札

SegmentFault / 3203人閱讀

摘要:你數(shù)據(jù)庫(kù)的默認(rèn)值不起作用而是得到,那怎么解決這個(gè)問(wèn)題呢通過(guò)使用和標(biāo)簽我們解決了這個(gè)問(wèn)題。將和均交由該處理,但本人實(shí)測(cè),這個(gè)好像并沒(méi)有什么卵用,有用的是在文件中顯式指定,如下所示。

前言

Mybatis在我所見(jiàn)過(guò)的持久化框架里真心是一個(gè)異類,因?yàn)樗莝ql-centric的,而不是基于對(duì)象和表映射的。我會(huì)在本文中講一下Mybatis幾個(gè)重要的技巧,與本文的上一篇文章Hibernate做個(gè)對(duì)比。

Mybatis配置

在ApplicationContext上加上如下配置:

XML
        
        
        
    
    
        
    
    
        


然后在mybatis-config.xml中做進(jìn)一步的配置。

XML

    
        
    

    
Mybatis 分頁(yè)

Mybatis不支持分頁(yè),所以我采用了PageHelper這個(gè)插件,首先在你的Mybatis配置文件里加上一下配置

XML

然后在需要分頁(yè)的查詢之前,加上下面一句話:

javaPageHelper.startPage(pageNum,PAGE_SIZE);
Mybatis 中的sql標(biāo)簽

由于Mybatis是通過(guò)文本替換組裝生成SQL語(yǔ)句的,所以不難發(fā)現(xiàn)它的插入和更新同樣是靜態(tài)的,對(duì)象里是null的插入也是null。你數(shù)據(jù)庫(kù)的默認(rèn)值不起作用而是得到null,那怎么解決這個(gè)問(wèn)題呢?

XML
        
            id,
            phone,
            email,
            photo,
        



        
            #{id},
            #{phone},
            #{email},
            #{photo},
        



        insert into user ()
        values ()


通過(guò)使用include和sql標(biāo)簽我們解決了這個(gè)問(wèn)題。

Mybatis typeHandler

有時(shí)候我們常常想將Collection或者其他對(duì)象直接以Json字符串的形式存在數(shù)據(jù)庫(kù)里而不是再開一張表,雖然普遍的觀點(diǎn)是不贊同這種做法,但這種需求卻是實(shí)際存在的。怎么才能在DAO中就將字符串和對(duì)象的轉(zhuǎn)換做掉而不用交給上層顯式地轉(zhuǎn)換呢?

采用自定義的Typehandler就可以,下面給出一個(gè)例子

java@MappedJdbcTypes(JdbcType.VARCHAR)
public class JSONHandler implements TypeHandler {

    /**
      * json數(shù)據(jù)和類名的分隔符號(hào)
      * */
     private static final char SPLIT = "/"; 


     /**
      * json 轉(zhuǎn)換成對(duì)象
      * */
     private Object jsonToObject(String json) throws RuntimeException{
        if (json == null) {
            return null;
        }
        int index = json.lastIndexOf(SPLIT);
        if (index < 0) {
            return null;
        }
        String key = json.substring(index + 1, json.length());
        json = json.substring(0, index);
        Class cls = null;
        try {
            cls = Class.forName(key);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("序列化成json時(shí)找不到指定的類", e);
        }
        Object ob = JSON.parseObject(json, cls);
        return ob;
    }

    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        if(parameter == null){
             ps.setString(i, null);
             return;
        }
            String json = JSON.toJSONString(parameter);
            json  = json + SPLIT + parameter.getClass().getName();
            ps.setString(i, json);

    }

    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        String  json = rs.getString(columnName);
        return  jsonToObject(json);
    }

    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
        String json=rs.getString(columnIndex);
        return jsonToObject(json);
    }

    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        String  json = cs.getString(columnIndex);
        return  jsonToObject(json);
    }


}


首先設(shè)定處理的JDBCType,顯然是變長(zhǎng)字符,然后實(shí)現(xiàn)給定的接口,最后在Mybatis的配置文件中加上這么一句。

XML

將Map和List均交由該handler處理,但本人實(shí)測(cè),這個(gè)好像并沒(méi)有什么卵用,有用的是在Mapper.xml文件中顯式指定,如下所示。

XML
insert (tags) values (#{tags,typeHandler=sbeat.util.helper.JSONHandler})


    

Mybatis 外鍵查詢

外鍵查詢需要使用resultMap的association標(biāo)簽,如下所示

XML    
        
        
        
        
        
        
                
        
            
            
            
            
            
            
            
        
    
Mybatis 多參數(shù)

在接口定義中使用@Params注解,并在XML中不定義paramType,如下所示

javapublic List findByTradeId(@Param("tradeId") Long tradeId,@Param("ownerType") UserType ownerType);
XML    
Mybatis 逗號(hào)問(wèn)題

逗號(hào)的不注意往往是使用Mybatis中出現(xiàn)最多的失誤,可以通過(guò)使用where和set一級(jí)trim標(biāo)簽來(lái)盡量避免,如下所示:

XML
    id,
    phone,


    phone=#{phone},
    name=#{name},


    id=#{id}
    
        AND logic_delete=#{logic_delete}
        
            AND logic_delete=false
        
    
     AND name=#{name}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64398.html

相關(guān)文章

  • 《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 —— <閱讀小札·一>

    摘要:閱讀小札一閱讀前自大學(xué)課上,就開始接觸設(shè)計(jì)模式,但對(duì)設(shè)計(jì)模式卻鮮有研究與實(shí)踐。第二部分是核心部分,由淺到深講解個(gè)設(shè)計(jì)模式。設(shè)計(jì)模式遵循的原則所有設(shè)計(jì)模式罪訓(xùn)的一條原則就是找出程序中變化的地方,并將變化封裝起來(lái)。 閱讀小札 · 閱讀前 自大學(xué)Java課上,就開始接觸設(shè)計(jì)模式,但對(duì)設(shè)計(jì)模式卻鮮有研究與實(shí)踐。最近向公司反映和游說(shuō)技術(shù)提升,得以獲得公司提供購(gòu)書機(jī)會(huì),借此認(rèn)真學(xué)習(xí)前端學(xué)習(xí)之路的...

    Yangder 評(píng)論0 收藏0
  • Hibernate使用小札

    摘要:本文將由淺入深為您帶來(lái)一個(gè)粗略的使用體驗(yàn)。當(dāng)再次調(diào)用時(shí),將得到一個(gè)新的,并重新開始這一系列工作。與此同時(shí),提供了一套自己的,使用注解即可,主要有,,等,兩種級(jí)聯(lián)可以同時(shí)使用。 前言 Hibernate作為Java中最為流行的O/R映射框架,同時(shí)已經(jīng)完全遵照J(rèn)PA規(guī)范并作為其實(shí)現(xiàn)的一個(gè)超集,它能夠幫助我們快速進(jìn)行開發(fā),從繁重的持久化層實(shí)現(xiàn)中脫離出來(lái)。本文將由淺入深為您帶來(lái)一個(gè)粗略的Hi...

    starsfun 評(píng)論0 收藏0
  • MyBatis入門使用

    摘要:入門使用簡(jiǎn)介是支持普通查詢存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。一般情況下是被整合使用的,但是他也可以獨(dú)立使用。獨(dú)立使用步驟建立類。配置文件主要用于配置程序中可變性高的設(shè)置,中的配置文件主要封裝在中。針對(duì),注冊(cè)類型的,以及用于映射接口的。 MyBatis入門使用 MyBatis簡(jiǎn)介 MyBatis是支持普通SQL查詢、存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。MyBatis消除了幾乎所有的JDBC代碼...

    shiyang6017 評(píng)論0 收藏0
  • MyBatis入門介紹

    摘要:入門介紹簡(jiǎn)介是支持普通查詢存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。獨(dú)立使用步驟建立類。配置文件主要用于配置程序中可變性高的設(shè)置,中的配置文件主要封裝在中。對(duì)應(yīng)于全局配置中的的配置屬性。進(jìn)行測(cè)試代碼實(shí)例建立類。針對(duì),注冊(cè)類型的,以及用于映射接口的。 MyBatis入門介紹 MyBatis簡(jiǎn)介 MyBatis是支持普通SQL查詢、存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。MyBatis消除了幾乎所有的JDB...

    Eirunye 評(píng)論0 收藏0
  • MyBatis-Plus初步

    摘要:是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在應(yīng)用方面,是最好的,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)應(yīng)用軟件。是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。 本章主要是對(duì)MyBatis-Plus的初步介紹,包括一些背景知識(shí)、環(huán)境搭建、初步使用等知識(shí)和例子。對(duì)于背景知識(shí),主要包含對(duì)MyBatis-Plus的特性介紹、為什么使用MyB...

    娣辯孩 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<