小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

讓Mybatis查詢存儲(chǔ)過程不那么另類

 instl 2015-02-13

Mybatis默認(rèn)查詢存儲(chǔ)過程的返回值是使用參數(shù)傳來(lái)傳去的,從參數(shù)里獲取返回值總讓我感覺怪怪的,特別是在使用接口做Dao的時(shí)候,破壞了Dao接口方法的統(tǒng)一性。

然后就有了mybatis-callable,獲得方式如下:

1
2
3
4
5
6
7
8
9
<dependencies>
  ...
    <dependency>
        <groupId>com.github.miemiedev</groupId>
        <artifactId>mybatis-callable</artifactId>
        <version>1.0</version>
    </dependency>
 ...
</dependencies>


配置是這樣的:

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//ibatis.//DTD Config 3.0//EN"
        "http://ibatis./dtd/ibatis-3-config.dtd">
<configuration>
    <plugins>
        <plugin interceptor="com.github.miemiedev.mybatis.callable.CallableConvertInterceptor">        </plugin>
    </plugins>
</configuration>

創(chuàng)建一個(gè)查詢,需要注意的是只有statementType為CALLABLE時(shí)攔截器才會(huì)起作用:

1
2
3
4
5
6
7
8
9
<select id="query2" statementType="CALLABLE">
    <![CDATA[
        {call test_proc2(
            #{acResult,mode=OUT,jdbcType=CURSOR,javaType=ResultSet, resultMap=hashMap},
            #{userType},
            #{branchCode}
        )}
    ]]>
</select>

然后Dao或許是這樣的,接口也是一樣的:

1
2
3
4
5
6
7
public List<Map<String, Object>> query2(String userType, String branchCode){
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("userType",userType);
    params.put("branchCode",branchCode);
    //存儲(chǔ)過程只返回一個(gè)游標(biāo),則使用selectList返回List
    return getSqlSession().selectList("db.table.user.query2", params);
}

===========================================

返回單個(gè)參數(shù)但是不是游標(biāo)的話就這樣

1
2
3
4
5
6
7
8
9
<select id="query3" statementType="CALLABLE">
    <![CDATA[
        {call test_proc3(
            #{retCode,mode=OUT,jdbcType=INTEGER},
            #{userType},
            #{branchCode}
        )}
    ]]>
</select>

1
2
3
4
5
6
7
public Integer query3(String userType, String branchCode){
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("userType",userType);
    params.put("branchCode",branchCode);
    //存儲(chǔ)過程只有一個(gè)返回值,并且不是游標(biāo),則使用selectOne
    return getSqlSession().selectOne("db.table.user.query3", params);
}

===========================================

返回多個(gè)參數(shù),里面啥都有:

1
2
3
4
5
6
7
8
9
10
<select id="query" statementType="CALLABLE">
    <![CDATA[
        {call test_proc(
            #{retCode,mode=OUT,jdbcType=INTEGER},                
            #{acResult,mode=OUT,jdbcType=CURSOR,javaType=ResultSet, resultMap=hashMap},
            #{userType},
            #{branchCode}
        )}
    ]]>
</select>

1
2
3
4
5
6
7
public Map<String, Object> query(String userType, String branchCode){
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("userType",userType);
    params.put("branchCode",branchCode);
    //存儲(chǔ)過程只有一個(gè)返回值,并且不是游標(biāo),則使用selectOne
    return getSqlSession().selectOne("db.table.user.query", params);
}

Map中包含所有存儲(chǔ)過程輸出的結(jié)果,Key是存儲(chǔ)過程的參數(shù)名,按需來(lái)取就行了。

=============================================

上面看上去規(guī)則有點(diǎn)麻煩,其實(shí)用接口做的話就不用考慮是selectList還是selectOne了,直接接收返回值就可以。

=============================================

自己定義結(jié)果集的話參考一下SimpleResultHandler的實(shí)現(xiàn)就行了,反正把自己實(shí)現(xiàn)的按照下面這么配就行了。不配resultHandler的話默認(rèn)就是SimpleResultHandler了。

1
2
3
<plugin interceptor="com.github.miemiedev.mybatis.callable.CallableConvertInterceptor">
    <property name="resultHandler" value="com.github.miemiedev.mybatis.callable.handler.SimpleResultHandler"/>
</plugin>


完。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多