1.概要
本文主要记录我在学习mybatis注解时 多表的动态模糊查询
什么叫动态查询,什么又叫做非动态查询呢?
像这种代码是非动态的,因为where后面的条件是固定的,只能有确定的一个条件,不能增加也不能删除改条件,这就是非动态查询
@Select("select * from t_blog where type_id=#{typeId}")
如果你理解了非动态查询,动态查询就很好理解了,动态查询和非动态查询的区别是,动态查询的条件是非固定的。
动态查询的好处
在淘宝网上购买商品时,你根据个人喜好进行动态的选择物品,你动态的进行加减分类项查询的过程就是动态查询,动态查询写一条sql语句即可。如果不用动态查询,后端就要写很多的sql语句,这样十分的麻烦
废话不多说直接上代码
@Select("<script>"+
" select b.id,b.title,b.update_time,b.recommend,b.type_id,t.id,t.name from t_blog b ,t_type t where 1=1 "+
"<if test= \"typeId != null \"> and b.type_id = #{typeId} </if>"+
"<if test=\"title != null \">and title like CONCAT('%',#{title},'%')</if>"+
"</script>"
)
List<BlogQuery> searchByTitleOrTypeOrRecommend(SearchBlog searchBlog);
<script> </script> 这两兄弟必须有,是动态查询的开始和结束符
" select b.id,b.title,b.update_time,b.recommend,b.type_id,t.id,t.name from t_blog b ,t_type t where 1=1 "+
该语句代表两个表进行联合查询,其中的where 1=1 代表true,意思是无论我们之后的动态查询 都为else 该语句也是正确的
"<if test= \"typeId != null \"> and b.type_id = #{typeId} </if>"+
"<if test=\"title != null \">and title like CONCAT('%',#{title},'%')</if>"+
这两句if语句代表,如果你满足了<if ____ >中的条件就进入 <if> </if> 条件体中去执行代码
总结
我在写该代码的思路是:先把sql语句完整的写出来并在navicat上实验 如果正确的话再添加上非sql语句的代码。然后在idea上进行单元测试。
如果我写的有什么错误的话还请各位大佬指点一下。