欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis實(shí)現(xiàn)SQL存儲(chǔ)流程詳解

 更新時(shí)間:2023年03月10日 08:33:56   作者:ceaningking  
MyBatis作為一款優(yōu)秀的持久層框架,它支持自定義SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。它免除了幾乎所有的JDBC代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作

今天學(xué)習(xí)了Mybatis執(zhí)行存儲(chǔ),感覺(jué)不是那么好用,可能是我沒(méi)用習(xí)慣。

我先在SQLSERVER創(chuàng)建存儲(chǔ)

alter procedure usp_user_getUser
	@username varchar(30)='',
	@groupid varchar(10)=''
as
/*
	exec usp_user_getUser '',''
*/
begin
	select * from TB_USER with(nolock)
	where 1=1
		and ((@username='') or (@username<>'' and username=@username))
		and ((@groupid='') or (@groupid<>'' and groupid=@groupid))
end

我創(chuàng)建這個(gè)存儲(chǔ),是想查詢(xún)用戶(hù)數(shù)據(jù),但是我設(shè)置了兩個(gè)條件@username,@groupid。

理想情況是即使沒(méi)有入?yún)⒅?,也能夠查?xún)出來(lái)。這個(gè)暫且不先考慮,先執(zhí)行存儲(chǔ)成功再說(shuō)。

我現(xiàn)在mapper接口定義兩個(gè)查詢(xún),返回類(lèi)型為map類(lèi)型。一個(gè)參數(shù)必傳,一個(gè)參數(shù)不用必傳。代碼如下:

    List<Map<String,User>> getProcUser(String username, String groupid);
    List<Map<String,Object>> getProcUsers(String username, String groupid);

getProcUser方法返回 List<Map<String,User>> 類(lèi)型,我是考慮只返回需要的字段,但實(shí)際中是,是不知道存儲(chǔ)返回的字段有變化沒(méi),所以在getProcUsers中返回 List<Map<String,Object>> 類(lèi)型.

在mapper文件中,其實(shí)執(zhí)行存儲(chǔ)是一樣的,但是id不一樣,代碼如下:

    <select id="getProcUser" statementType="CALLABLE" resultType="java.util.Map">
        {
            call usp_user_getUser (
                #{username,mode=IN,jdbcType=VARCHAR},
                #{groupid,mode=IN,jdbcType=VARCHAR}
            )
        }
    </select>
    <select id="getProcUsers" statementType="CALLABLE" resultType="java.util.Map">
        {
            call usp_user_getUser(
                #{username,mode=IN,jdbcType=VARCHAR},
                #{groupid,mode=IN,jdbcType=VARCHAR}
            )
        }
    </select>

那么我在controller中增加方法調(diào)用,代碼如下,由于我使用了Swagger2,注解較多,代碼如下:

@PostMapping("/user/getProcUser")
    @ApiOperation(value = "存儲(chǔ)-獲取賬號(hào)信息",notes = "存儲(chǔ)-獲取賬號(hào)信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "賬號(hào)", dataType = "string", paramType = "query", example = "", required = true),
            @ApiImplicitParam(name = "groupid", value = "組類(lèi)別", dataType = "string", paramType = "query", example = "", required = true)
    })
    //這種方式 入?yún)⒈仨氂兄?
    public List<Map<String,User>> getProcUser(String username, String groupid){
        List<Map<String,User>> list= null;
        SqlSession sqlSession= null;
        try{
            sqlSession= MybatisUtils.getSqlSession();
            UserMapper mapper= sqlSession.getMapper(UserMapper.class);
            list= mapper.getProcUser(username,groupid);
            System.out.println(list);
        } catch(Exception e){
            e.printStackTrace();
        } finally {
            if (sqlSession!= null){
                sqlSession.close();
            }
        }
        return list;
    }
    @PostMapping("/user/getProcUsers")
    @ApiOperation(value = "存儲(chǔ)-獲取賬號(hào)信息",notes = "存儲(chǔ)-獲取賬號(hào)信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "賬號(hào)", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "groupid", value = "組類(lèi)別", dataType = "string", paramType = "query", example = "", required = false)
    })
    public List<Map<String,Object>> getProcUsers(String username, String groupid){
        List<Map<String,Object>> list= null;
        SqlSession sqlSession= null;
        if (username==null){username= "";}
        if (groupid==null){groupid= "";}
        try{
            sqlSession= MybatisUtils.getSqlSession();
            UserMapper mapper= sqlSession.getMapper(UserMapper.class);
            list= mapper.getProcUsers(username,groupid);
            System.out.println(list);
        } catch(Exception e){
            e.printStackTrace();
        } finally {
            if (sqlSession!= null){
                sqlSession.close();
            }
        }
        return list;
    }

調(diào)用 getProcUser 方法,username和groupid是設(shè)置的必傳,所以返回值正常。

調(diào)用 getProcUsers 方法,username和groupid不是必傳的,所以這個(gè)入?yún)⑹莕ull值。

如果有任意一個(gè)參數(shù)是不傳,接口調(diào)用返回“[]”數(shù)組。也就是沒(méi)有查詢(xún)出來(lái)。

哪怕是在方法中加入@RequestParam設(shè)置默認(rèn)值也無(wú)用,因?yàn)檎{(diào)用傳的就是null

所以上面代碼,可以看到我加入了參數(shù)判斷, 代碼如下(上面代碼有,此處我標(biāo)注下):

        if (username==null){username= "";}
        if (groupid==null){groupid= "";}

我去判斷了參數(shù)是否null,如果是,定義空字符串。然后調(diào)用就正常了。

到此這篇關(guān)于Mybatis實(shí)現(xiàn)SQL存儲(chǔ)流程詳解的文章就介紹到這了,更多相關(guān)Mybatis SQL存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談java Collection中的排序問(wèn)題

    淺談java Collection中的排序問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談java Collection中的排序問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • HashMap插入相同key問(wèn)題

    HashMap插入相同key問(wèn)題

    這篇文章主要介紹了HashMap插入相同key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java中操作Redis的詳細(xì)方法

    Java中操作Redis的詳細(xì)方法

    基于Jedis實(shí)現(xiàn)對(duì)redis中字符串的操作,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),包括連接池JedisPool應(yīng)用的實(shí)例代碼,對(duì)Java操作Redis的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-11-11
  • IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)

    IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)

    這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Spring Validation和Hibernate Validator結(jié)合國(guó)際化代碼實(shí)例

    Spring Validation和Hibernate Validator結(jié)合國(guó)際化代碼實(shí)例

    這篇文章主要介紹了Spring Validation和Hibernate Validator結(jié)合國(guó)際化代碼實(shí)例,我們需要對(duì)請(qǐng)求參數(shù)進(jìn)行非空、長(zhǎng)度、正確性進(jìn)行校驗(yàn), 本文主要講解Spring Validation 和 Hibernate Validator, 同時(shí)整合i18n(國(guó)際化)實(shí)現(xiàn)參數(shù)校驗(yàn)自動(dòng),需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)郵件發(fā)送遇到的問(wèn)題

    Java實(shí)現(xiàn)郵件發(fā)送遇到的問(wèn)題

    本文給大家分享的是個(gè)人在項(xiàng)目過(guò)程中,使用Java實(shí)現(xiàn)郵件發(fā)送的時(shí)候所遇到的幾個(gè)問(wèn)題以及解決方法,有需要的小伙伴可以參考下
    2016-09-09
  • Sharding-Proxy基本功能用法介紹

    Sharding-Proxy基本功能用法介紹

    這篇文章介紹了Sharding-Proxy基本功能用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Java加密解密工具(適用于JavaSE/JavaEE/Android)

    Java加密解密工具(適用于JavaSE/JavaEE/Android)

    這篇文章主要介紹了Java加密解密工具,適用于JavaSE/JavaEE/Android,感興趣的小伙伴們可以參考一下
    2016-04-04
  • SpringBoot + vue2.0查詢(xún)所用功能詳解

    SpringBoot + vue2.0查詢(xún)所用功能詳解

    這篇文章主要介紹了SpringBoot + vue2.0查詢(xún)所用功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Spring Boot中l(wèi)ombok的安裝與使用詳解

    Spring Boot中l(wèi)ombok的安裝與使用詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot中l(wèi)ombok安裝與使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09

最新評(píng)論