Mybatis多字段模糊查询

本文介绍了在使用MyBatis框架进行数据库操作时如何处理多个输入参数的问题。提供了两种解决方案:一是通过定义PO(Persistent Object)类来组织多个参数;二是使用HashMap作为参数容器。这两种方法均可用于实现复杂的查询需求。

        刚刚学习Mybatis,认识到增删改查这些操作都只能传入一个参数,传出一个参数。如果需要传入或传出好几个参数,则有两种方法:

        方法1::这就需要定义PO(Persistent Object)类。我理解的PO类就是主要用来和数据库打交道的,该类的变量基本上都要在数据库表中存在(有可能分布在多张表中,比如将多表查询时获得的结果放到PO类中)。随便说一下VO类(Value Object),我理解的VO类主要用来实现实际的业务需求的,是对应我们现实生活中的某些事物的。PO和VO可以相互转换(通过属性与属性的对应,有可能需要若干个VO类才能构造成一个PO类)

        插入某个类时:类中的属性和表中的字段对应

<insert id="addUser" parameterType="com.henrykin.po.User" >
	</selectKey>
		insert INTO `user` (username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
	</insert>

        当对某个字段进行模糊查询时:可以这样

<!-- 自定义条件查询用户列表 -->
	<select id="findUserByName" parameterType="java.lang.String" 
			resultType="com.henrykin.po.User">
	   select * from user where username like '%${name}%'
	</select>

        可是如果要对多个字段进行模糊查询时,我就不确定该怎么做了,因为只能传入一个参数。我尝试将多个字段组成一个PO类,然后传入这个PO类。下面的NameAndAddress是自定义的PO类,类中有name和address成员变量,生成getter,setter方法。

        如:下面展示两个字段:

<!-- 自定义条件查询用户列表 -->
	<select id="findUserByNameAndAddress" parameterType="com.henrykin.po.NameAndAddress" 
			resultType="com.henrykin.po.User">
	   select * from user where username like '%${name}%' and address like '%${adress}%'
	</select>

        结果是可以的。

        方法2:使用HashMap作为传入参数:

UserMapper.xml局部:其中传入参数类型HashMap,可以写成HashMap/Hashmap/hashmap/hashMap中的任一种。

<!-- 自定义条件查询用户列表 -->
	<select id="getUserByColumn_Hashmap" parameterType="hashmap" 
			resultType="com.henrykin.po.User">
			 select * from user where ${columnName} like '%${columnValue}%'
	</select>

测试代码局部:

传递的map中的keysql中解析的key要一致,

如果不一致测试结果没有报错,只是通过key获取值为空。

HashMap<String, Object> map = new HashMap<>();
map.put("columnName", "username");
map.put("columnValue", "li");
List<User> users =  mapper.getUserByColumn_Hashmap(map);

      总结: 总之记住一点,传入传出都只有一个参数,当不能满足需求时,就可以自己根据需求定义PO类或者使用hashMap。

转载于:https://my.oschina.net/henryking/blog/775799

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值