Mybatis---配置文件完成增删改查(条件查询)

 多条件查询

我们经常会遇到多条件查询,将多条件查询的结果展示在下方的数据列表中。而我们做这个功能需要分析最终的SQL语句应该是什么样,思考两个问题

  • 条件表达式
  • 如何连接

简单的分析后,我们来看功能实现的步骤:

  • 编写接口方法
    • 参数:所有查询条件
    • 结果:List
  • 在映射配置文件中编写SQL语句

  • 编写测试方法并执行

在 BrandMapper 接口中定义多条件查询的方法。

而该功能有三个参数,我们就需要考虑定义接口时,参数应该如何定义。Mybatis针对多参数有多种实现

 

  • 使用 @Param("参数名称") 标记每一个参数,在映射配置文件中就需要使用 #{参数名称} 进行占位
    java List<Brand> selectByCondition(@Param("status") int status, @Param("companyName") String companyName,
                                       @Param("brandName") String brandName);
    
     对应的xml文件   <select id="selectByCondition" resultMap="selectMap">
            select *
            from tb_brand
            where status = #{status}
            and company_name like #{companyName}
            and brand_name like #{brandName};
        </select>

     

  • 将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和实体类属性名保持一致。
    java List<Brand> selectByCondition(Brand brand);

 

  • 将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和map集合中键的名称一致。
    List<Brand> selectByCondition(Map map);

     编写SQL语句

在 BrandMapper.xml 映射配置文件中编写 statement,使用 resultMap 而不是使用 resultType

<select id="selectByCondition" resultMap="brandResultMap">
        select *
        from tb_brand
        where
            status=#{status}
        and company_name like #{companyName}
        and brand_name like #{brandName};
    </select>

编写测试方法

在 test/java 下的 com.itheima.mapper 包下的 MybatisTest类中 定义测试方法

查看代码

// 处理参数
companyName = "%" + companyName + "%";
brandName = "%" + brandName + "%";

//1. 获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 获取Mapper接口的代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

//4. 执行方法
//方式一 :接口方法参数使用 @Param 方式调用的方法
//List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);
//方式二 :接口方法参数是 实体类对象 方式调用的方法
 //封装对象
/* Brand brand = new Brand();
    brand.setStatus(status);
    brand.setCompanyName(companyName);
    brand.setBrandName(brandName);*/

//List<Brand> brands = brandMapper.selectByCondition(brand);

//方式三 :接口方法参数是 map集合对象 方式调用的方法
Map map = new HashMap();
map.put("status" , status);
map.put("companyName", companyName);
map.put("brandName" , brandName);
List<Brand> brands = brandMapper.selectByCondition(map);
System.out.println(brands);

//5. 释放资源
sqlSession.close();

1散装参数:需要使用@Param("SQL中的参数占位符名称")

2、实体类封装参数

  只需要保证SQL中的参数名和实体类属性名对应上,即可设置成功

3、map集合

只需要保证SQL中的参数名和map集合的键的名称对应上,即可设置成功。

 

posted @   踏上星辰  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示