mybatis 模糊查询的实现方法
程序员文章站
2024-01-02 09:56:22
mybatis 模糊查询的实现方法
mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不可少的...
mybatis 模糊查询的实现方法
mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不可少的,所以,需要手动对mapper编写模糊查询功能。
这里先明确mybatis/ibatis中#和$的区别:
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。
4. $方式无法防止sql注入。
5. $方式一般用于传入数据库对象,例如传入表名.
6. 一般能用#的就别用$.
ps:在使用mybatis中还遇到<![cdata[]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。
我们的需求是对一个user进行模糊查询,思路是对所有基本字段(username,gender等)都跟传入的key(关键字)进行比较。
1、对usermapper.xml编码
<select id="queryuserbykey" parametertype="string" resulttype="com.lqr.pojo.user"> select * from user where uid like concat('%',#{key},'%') or username like concat('%',#{key},'%') or realname like concat('%',#{key},'%') or identification like concat('%',#{key},'%') or email like concat('%',#{key},'%') </select>
2、对usermapper.java编码
list<user> queryuserbykey(string key);
以上是本人在开发中遇到的情景,往后有其他mybatis模糊查询的使用再继续记录。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!