老师,麻烦解读下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是什么意思?
这里的 where is not null又是什么意思? 如果查不到值,前台是不是会报错?该怎么解决?
麻烦老师解读下这两段代码,并且讲解下含义。通俗的讲解下,不要让我去翻看其他资料或者官方文档了,我文化水平相当低的,看不懂,而且时间也紧
正在回答
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”是数据库专题部分很基础的内容。不需要同学去查官方文档,同学可以认认真真的把路径的课按照顺序看一遍。没有文化水平的差距,但不能太急于求成。
如果同学一直跳着学,知识点没有办法成为一个系统的知识。肺腑之言
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星