栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

20220629

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

20220629

本篇为动态sql查询
当用户输入的信息只提供一个条件时,使用动态sql查询
在映射文件里,直接使用if和where标签实现动态

    
        select *
        from brand
        
            
                and status = #{status}
            
            
                and company_name like #{companyName}
            
            
                and brand_name like #{brandName}
            
        
    

执行代码中用map集合,只传入中间一个条件

 @Test
    public void selByCond() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqs = sqlSessionFactory.openSession();

        BrandMapper mapper = sqs.getMapper(BrandMapper.class);
        
        int status = 1;
        String companyName = "huawei";
        String brandName = "huawei";
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        
        Brand br = new Brand();
        br.setStatus(status);
        br.setCompanyName(companyName);
        br.setBrandName(brandName);

        Map ma = new HashMap<>();
//        ma.put("status",status);
        ma.put("companyName",companyName);
//        ma.put("brandName",brandName);

        
//        List rs = mapper.selByCond(status, companyName, brandName);
//        List rs = mapper.selByCond(br);
        List rs = mapper.selByCond(ma);

        for (Brand r : rs) {
            System.out.println(r);
        }

        System.out.println();

        sqs.close();

    }

结果中看到预编译语句语法正确,mybatis的标签有自动修正语法的功能

接下来做单条件的动态sql查询
先在代理接口里添加方法

List selBySingleCond(Brand brand);

在sql映射文件里添加单条件查询的动态sql语句
本例可用otherwise标签,或where标签包裹,解决一个参数中一个条件都不传入的问题

    
    

执行代码

    @Test
    public void selBySingleCond() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqs = sqlSessionFactory.openSession();

        BrandMapper mapper = sqs.getMapper(BrandMapper.class);

        int status = 1;
        String companyName = "huawei";
        String brandName = "huawei";
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        Brand br = new Brand();
//        br.setStatus(status);
//        br.setCompanyName(companyName);
//        br.setBrandName(brandName);

        List rs = mapper.selBySingleCond(br);

        for (Brand r : rs) {
            System.out.println(r);
        }

        System.out.println();

        sqs.close();

    }

在运行结果中观察预编译的sql语句,看otherwise和where标签的效果,略

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号