欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis多条件动态查询

程序员文章站 2022-03-11 21:41:55
...

当进行多条件动态查询时,最方便的使用@SelectProvider(type=XXXSqlProvider.class, method="getXXX")注解

此时我们需要编写自己的SqlProvider,我们需要用到org.apache.ibatis.jdbc.SqlBuilder中的静态方法,来看一段代码吧,如下:

public String getUserListByConditions(Map<String, Object> parameter){
		String age= (String) parameter.get("age");
		String isdead= (String) parameter.get("isdead");
		
		BEGIN();
		SELECT("*");
		FROM("user");
		if(age!=null&&!age.equals("")){
			int _age= Integer.parseInt(age);
			WHERE("age="+_age+"");
		}
		if(isdead!=null&&!isdead.equals("")){
			boolean _isdead= Boolean.parseBoolean(isdead);
			WHERE("isDisplay="+_isdead+"");
		}
		ORDER_BY("createtime DESC LIMIT #{offset}, #{pagesize}");
		
		return SQL();
	}

上面代码的意思是拼凑了一条sql语句,用以查询user。条件动态为:age,isdead,最后分页显示。

请注意该方法的参数parameter是获取Mapper传递过来的,对应的mapper如下:

@SelectProvider(type=UserSqlProvider.class, method="getUserListByConditions")
List<User> getUserListByConditions(@Param("age")String age,@Param("isdead")String isdead,@Param("offset")int offset,@Param("pagesize")int pageSize)