多条件查询
散装参数用注解的方式(@param(”参数名称”))
使用 @Param(“参数名称”) 标记每一个参数,在映射配置文件中就需要使用 #{参数名称} 进行占位
在接口类中定义这样的方法
要求参数的名称和对应sql语句中参数的占位符名称一样
List<Brand> selectByCondition(@Param("status") int status, @Param("companyName") String
companyName, @Param("brandName") String brandName);
然后映射文件这样
<!-- 条件查询-->
<select id="selectByCondition" resultMap="brandResultMap">
select *
from tb_brand
where 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);
//获取SqlSession
SqlSession 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_brand
where 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);
//获取SqlSession
SqlSession 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);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper接口代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
List<Brand> brands = brandMapper.selectByCondition(map);
System.out.println(brands);
sqlSession.close();
这就是实现多条件查询的几种方式。