mybatis多条件模糊查询

mybatis+mysql实现多个模糊条件查询

需求:
在这里插入图片描述
查询满足搜索条件其中任意一个条件的用户,为空则不添加此条件

SQL:

先查询日期区间2019-02~2019-03的信息(cust_createtime为日期字段名):

SELECT * FROM customer 
where DATE_FORMAT(cust_createtime,'%Y%m') 
BETWEEN '201902' and '201903'

所以此需求对应的sql:

SELECT * FROM customer 
where cust_name like '%阿里%' 
or cust_boss like '马' 
or DATE_FORMAT(cust_createtime,'%Y%m') BETWEEN '201902' and '201903'

Mapper接口(注意使用了@Param则不能再用索引传参)

 /**
     *  条件查询:公司名、董事长名、公司成立时间区域(开始时间、结束时间)
     * @param custName  公司名
     * @param custBoss  董事长
     * @param timeStart 成立时间范围
     * @param timeEnd   成立时间范围
     * @return  客户列表
     */
 List<Customer> findCustomer(@Param("custName") String custName, 
 	@Param("custBoss") String custBoss, 
 	@Param("timeStart") String timeStart, 
 	@Param("timeEnd") String timeEnd);

CustomerMapper.xml

<!--条件查询:公司名、董事长名、公司成立时间区域(开始时间、结束时间)-->
<select id="findCustomer" resultMap="customer_list_map">
	select * from customer
	<where>
		<!--添加if条件如果参数为空则不拼接sql-->
		<if test="custName != null and custName != '' ">
			cust_name like concat('%',#{custName},'%')
		</if>
		<if test="custBoss != null and custBoss != '' ">
			or cust_boss like concat('%',#{custBoss},'%')
		</if>
		<if test="timeStart != null and timeStart != '' and timeEnd != null and timeEnd != ''">
			or DATE_FORMAT(cust_createtime,'%Y%m') BETWEEN #{timeStart} and #{timeEnd}
		</if>
	</where>
</select>

mysql中concat函数

功能:将多个字符串连接成一个字符串
使用方法:

 select * from customer where cust_name like concat('%','张','%')
 //最终为:
 select * from customer where cust_name like '%张%'
发布了13 篇原创文章 · 获赞 6 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览