文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis如何实现SQL存储

2023-07-05 11:21

关注

这篇“Mybatis如何实现SQL存储”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis如何实现SQL存储”文章吧。

先在SQLSERVER创建存储

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

我创建这个存储,是想查询用户数据,但是我设置了两个条件@username,@groupid。

理想情况是即使没有入参值,也能够查询出来。这个暂且不先考虑,先执行存储成功再说。

我现在mapper接口定义两个查询,返回类型为map类型。一个参数必传,一个参数不用必传。代码如下:

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

getProcUser方法返回 List<Map<String,User>> 类型,我是考虑只返回需要的字段,但实际中是,是不知道存储返回的字段有变化没,所以在getProcUsers中返回 List<Map<String,Object>> 类型.

在mapper文件中,其实执行存储是一样的,但是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中增加方法调用,代码如下,由于我使用了Swagger2,注解较多,代码如下:

@PostMapping("/user/getProcUser")    @ApiOperation(value = "存储-获取账号信息",notes = "存储-获取账号信息")    @ApiImplicitParams({            @ApiImplicitParam(name = "username", value = "账号", dataType = "string", paramType = "query", example = "", required = true),            @ApiImplicitParam(name = "groupid", value = "组类别", dataType = "string", paramType = "query", example = "", required = true)    })    //这种方式 入参必须有值    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 = "存储-获取账号信息",notes = "存储-获取账号信息")    @ApiImplicitParams({            @ApiImplicitParam(name = "username", value = "账号", dataType = "string", paramType = "query", example = "", required = false),            @ApiImplicitParam(name = "groupid", value = "组类别", 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;    }

调用 getProcUser 方法,username和groupid是设置的必传,所以返回值正常。

调用 getProcUsers 方法,username和groupid不是必传的,所以这个入参是null值。

如果有任意一个参数是不传,接口调用返回“[]”数组。也就是没有查询出来。

哪怕是在方法中加入@RequestParam设置默认值也无用,因为调用传的就是null

所以上面代码,可以看到我加入了参数判断, 代码如下(上面代码有,此处我标注下):

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

我去判断了参数是否null,如果是,定义空字符串。然后调用就正常了。

以上就是关于“Mybatis如何实现SQL存储”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯