老师,麻烦解读下mybatis的动态语句if

老师,麻烦解读下mybatis的动态语句if

 <select id="selectByUser" parameterType="com.tgb.mybatis.entity.SysUser" resultType="com.tgb.mybatis.entity.SysUser">
        select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img	"headImg",
            create_time "createTime"
        from
            sys_user
        where
            1=1
            <if test="userName != null and userName !=''">
              and user_name like CONCAT('%',#{userName},'%')
            </if>
            <if test="userEmail != null and userEmail != ''">
              and user_email =#{userEmail}
            </if>
    </select>

请问这个 where 1=1是什么意思,test是什么意思?and是什么意思?

http://img1.sycdn.imooc.com//climg/5bc430260001d42002890201.jpg

这里的 where is not null又是什么意思?  如果查不到值,前台是不是会报错?该怎么解决?

麻烦老师解读下这两段代码,并且讲解下含义。通俗的讲解下,不要让我去翻看其他资料或者官方文档了,我文化水平相当低的,看不懂,而且时间也紧


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

1、where 1=1是什么意思:

举个例子,

例如,当我们输入条件进行查询时。

例如我们查询全部的时候,是不需要写where的,例如

select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img    "headImg",
            create_time "createTime"
        from
            sys_user

如果我们有一个查询条件,where 后边是 要跟一个 条件的,

select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img    "headImg",
            create_time "createTime"
        from
            sys_user
        where
            user_name like CONCAT('%',#{userName},'%')

如果我们有两个查询条件,where 后边是 要跟两个 条件的,并且这两个查询条件要用and连接起来

select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img    "headImg",
            create_time "createTime"
        from
            sys_user
        where
            user_name like CONCAT('%',#{userName},'%')
            and user_email =#{userEmail}

         

当我们写代码的时候,不知道用户会输入几个查询条件,因为如果用户查询全部,或者只查询一个条件的时候,where后边是不添加and 的。那我们写代码的时候where后边要不要跟and呢?

所以,我们可以给where后边添加 1=1 这个永真的条件。后边就可以跟and 了。

例如用户查询全部

select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img    "headImg",
            create_time "createTime"
        from
            sys_user
        where
            1=1

也是没有问题的。如果用户有userName 的查询条件,当userName != null and userName !='' 的时候:就是如下语句了

select
            user_name "userName",
            user_password "userPassword",
            user_info "userInfo",
            head_img    "headImg",
            create_time "createTime"
        from
            sys_user
        where
            1=1
            
             and user_name like CONCAT('%',#{userName},'%')

以此类推。

2、test是 if的一个属性,合理相当于java中 if后边的() ,用来写条件。

3、and 是拼接条件语句的。

4、where  e.sn  is not null 表示查询 表中e.sn不为null 的。如果查不到值,前台并不会报错。


5、另外,建议同学从路径的开始一点一点的学,看到同学是几个专题一起学的,欲速则不达,例如“and”是数据库专题部分很基础的内容。不需要同学去查官方文档,同学可以认认真真的把路径的课按照顺序看一遍。没有文化水平的差距,但不能太急于求成。

如果同学一直跳着学,知识点没有办法成为一个系统的知识。肺腑之言

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 广州麻辣牛杂档 提问者 #1
    真心感谢老师,你也老懂我了 。 我太浮躁,脑子没有别人灵活,还急于求成。。企图投机取巧
    2018-10-15 15:43:49
  • 广州麻辣牛杂档 提问者 #2
    很多知识点经常忘掉,觉得信手拈来能够提高效率,也希望老师理解下
    2018-10-15 15:45:44
  • 广州麻辣牛杂档 提问者 #3
    我写了一段代码,判断某id是否等于数据库的id,然而数据库里边找不到这个id,也就是null,前台好像就报错了 ,请问是什么原因呢
    2018-10-15 15:53:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师