mybatis多参数查询

一、利用map封装多个参数

xxxmapper.xml的查询语句(直接用占位符#{key},key就是map的key)

<select id="selectByMap" parameterType="hashmap" resultType="com.mybatis_demo.domain.User">
	select * from t_user where uname like concat('%',#{uname},'%') and age>#{age}
</select>

测试代码

//用map封装多个参数实现多参数查询
	@Test
	public void test6() {
		try {
			//读取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//创建sqlSessionFactoryBuilder
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用sqlSessionFactoryBuilder获取sqlSessionFactory
			SqlSessionFactory sqlSessionFactory = builder.build(in);
			//利用sqlSessionFactory获取sqlSeesion
			SqlSession session = sqlSessionFactory.openSession();
			//利用sqlSeesion操作数据库
			Map<String,Object> map = new HashMap<String,Object>();
			map.put("uname", "明");
			map.put("age", 95);
			List<User> list = session.selectList("UserMapper.selectByMap", map);
			for (User user : list) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

二、利用list封装多个参数

xxxmapper.xml的查询语句(通过foreach遍历list集合,其中item代表变量,open表示以"(“开头,separator表示变量之间以”,“隔开,close表示以”)"结尾,即遍历结果是(1,3,4,9)

<select id="selectByList" parameterType="java.util.List" resultType="com.mybatis_demo.domain.User">
	select * from t_user where uid in
	<foreach collection="list" item="item" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>

测试代码:

//多参数查询,用list传递参数,在对应的mapper.xml文件中使用foreach进行遍历
	@Test
	public void test7() {
		try {
			//读取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//创建sqlSessionFactoryBuilder
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用sqlSessionFactoryBuilder获取sqlSessionFactory
			SqlSessionFactory sqlSessionFactory = builder.build(in);
			//利用sqlSessionFactory获取sqlSeesion
			SqlSession session = sqlSessionFactory.openSession();
			//利用sqlSeesion操作数据库
			List<Integer> test = new ArrayList<Integer>();
			test.add(1);
			test.add(3);
			test.add(4);
			test.add(9);
			List<User> users = session.selectList("UserMapper.selectByList", test);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

三、如果使用动态代理mapper开发,还有另外一种方法

mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis_demo.mapper.UserMapper">
<select id="selectByMoreParamter" resultType="com.mybatis_demo.domain.User">
	<!-- select * from t_user where uname like concat('%',#{param1},'%') and age = #{param2} and address = #{param3} -->
	select * from t_user where uname like concat('%',#{arg0},'%') and age = #{arg1} and address = #{arg2}
</select>
</mapper>

mapper接口

public interface UserMapper {
	//mybatis使用mapper动态代理
	
	//4大原则,一个注意
	//1.接口中的方法名需要与对应mapper.xml的id一致
	//2.接口中的返回值需要与对应mapper.xml的返回值类型保持一致
	//3.接口中的参数需要与对应mapper.xml的参数类型、个数、参数名保持一致
	//4.对应mapper.xml的名字空间需要修改成对应接口的全包名
	//注意:mapper动态代理根据返回值类型,mybatis会自动选择调用selectone还是selectlist....

	//直接传多个参数
	public User selectByMoreParamter(String uname,Integer age,String address);
	
}

测试代码

//当传入多个参数时,使用#{arg0}、#{arg1},arg+下标获取参数,下标从0开始
	//或者使用#{param1},param+下标获取参数下标从1开始
	@Test
	public void test_selectByMoreParamter() {
		try {
			 //读取配置文件
			InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
			//创建SqlSessionFactoryBuilder对象,用来获取SqlSessionFactory对象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//利用SqlSessionFactoryBuilder对象build一个SqlSessionFactory对象
			SqlSessionFactory build = builder.build(in);
			//利用sqlSessionFactory获取session对象
			SqlSession session = build.openSession();
			//通过session对象获取对应mapper接口
			UserMapper mapper = session.getMapper(UserMapper.class);
			User user = mapper.selectByMoreParamter("白", 4, "北京朝阳区");
			System.out.println(user);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

总结:用map可以封装多种不同类型的参数,list只能封装同种类型的参数;使用动态代理可以使用arg+下标获取参数,下标从0开始;或者使用param+下标获取参数,下标从1开始

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus支持多参数查询,可以通过以下几种方式实现: 1. 使用@Param注解:在Mapper接口的方法参数中使用@Param注解,将多个参数映射到SQL语句中的对应位置。示例代码如下: ```java @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUsers(@Param("name") String name, @Param("age") Integer age); } ``` 在XML映射文件中的SQL语句中使用`#{}`占位符引用这些参数: ```xml <select id="selectUsers" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age} </select> ``` 2. 使用Map作为参数:将多个参数封装到一个Map中,Map的键值对分别对应参数名和参数值。示例代码如下: ```java @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUsers(Map<String, Object> params); } ``` 在XML映射文件中的SQL语句中使用`#{}`占位符引用Map中的参数: ```xml <select id="selectUsers" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age} </select> ``` 3. 使用Wrapper对象:MyBatis-Plus提供了Wrapper对象,用于构建查询条件。可以通过链式调用方法设置多个查询条件。示例代码如下: ```java @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUsers(@Param(Constants.WRAPPER) Wrapper<User> wrapper); } ``` 在调用方法时,构建查询条件并传入Wrapper对象: ```java QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("name", "John") .eq("age", 25); List<User> users = userMapper.selectUsers(wrapper); ``` 以上是MyBatis-Plus多参数查询的几种常见方式,根据具体需求选择合适的方式进行查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值