作业场景:当用户在输入框中自由输入(表示用户不会全部输入所有的参数条件)时,通过关键字匹配来查询数据库的信息。
动态SQL:SQL语句会随着用户的输入或外部条件的变化而变化,我们称为动态SQL
解决方法:
@1:通过mybatis自己提供的where标签代替sql语句中的where,若提交的参数为空则自动去掉and。
@2:通过加入诸如1=1的恒等式让所有格式一样
如下参考:
@方法一推荐:
根据姓名 id 一同查询或只根据姓名或id查询有关信息。
(感觉有点像前端进行数据校验合法后再传后端进行数据处理的样子)
<select id="selectinfo" resultType="com.itcast.pojo.user">
select *
from myuser
<where>
<if test="id!=null" >
and id=#{id}
</if>
<if test="name!=null">
and name=#{name}
</if>
</where>
</select>
注意:一定不要出现中文输入法下的字符,不然一片红色的错误。
测试:
user temp=null;
temp= userMapper.selectinfo("乐七",null);
System.out.println(temp.toString());
结果:成功读出数据:
user{id=5, name='乐七', address='null'}
方法二(不经常使用):
加个恒等式1=1 后面再接上if标签
<select id="selectinfo" resultType="com.itcast.pojo.user">
select *
from myuser
where 1=1
<if test="id!=null" >
and id=#{id}
</if>
<if test="name!=null">
and name=#{name}
</if>
</select>
测试也是正确