多条件查询
散装参数用注解的方式(@param(”参数名称”))
使用 @Param(“参数名称”) 标记每一个参数,在映射配置文件中就需要使用 #{参数名称} 进行占位
在接口类中定义这样的方法
要求参数的名称和对应sql语句中参数的占位符名称一样
List<Brand> selectByCondition(@Param("status") int status, @Param("companyName") StringcompanyName, @Param("brandName") String brandName);
然后映射文件这样
<!-- 条件查询--><select id="selectByCondition" resultMap="brandResultMap">select *from tb_brandwhere status = #{status}and company_name like #{companyName}and brand_name like #{brandName};</select>
在测试代码中
String companyName = "华为";String brandName = "华为";// 处理参数companyName = "%"+companyName+"%";brandName= "%"+brandName+"%";String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//获取Mapper接口代理对象BrandMapper brandMapper =sqlSession.getMapper(BrandMapper.class);List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);System.out.println(brands);

实体类封装参数
将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。
该方式要求在映射配置文件的SQL中使用 #{内
容} 时,里面的内容必须和实体类属性名保持一致。
先写这个方法
List<Brand> selectByCondition(Brand brand)
然后映射文件中的sql语句
这里 的sql语句不用变
<select id="selectByCondition" resultMap="brandResultMap">select *from tb_brandwhere status = #{status}and company_name like #{companyName}and brand_name like #{brandName};</select>
然后测试类
模糊查询String companyName = "华为";String brandName = "华为";// 处理参数companyName = "%"+companyName+"%";brandName= "%"+brandName+"%";//将参数封装对象Brand brand = new Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//获取Mapper接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);List<Brand> brands = brandMapper.selectByCondition(brand);//传入brand对象System.out.println(brands);
很明显我们这种方式采用的是对象也就是实体类封装的方式
map集合
将多个参数封装到map集合中,将map集合作为接口的方法参数。
该方式要求在映射配置文件的SQL中使用 #{内容}
时,里面的内容必须和map集合中键的名称一致。
首先接口中的方法
List<Brand> selectByCondition(Map map)
然后映射文件中的sql语句还是不需要更改
测试类中需要的
int status = 1;// 模糊查询String companyName = "华为";String brandName = "华为";// 处理参数companyName = "%"+companyName+"%";brandName= "%"+brandName+"%";Map map = new HashMap<>();map.put("status",status);map.put("companyName",companyName);map.put("brandName",brandName);String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//获取Mapper接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);List<Brand> brands = brandMapper.selectByCondition(map);System.out.println(brands);sqlSession.close();

这就是实现多条件查询的几种方式。
