`

mybatis 中IN 查询写法

阅读更多
这个问题昨天困扰了我2个小时,终于在同事的开导下,这么写出来了,其实这种方法以前也写过,但是忘记了,现在发表到博客上面备忘。
 /**
     * 获取性别分析指标
     * 
     * @author shangql
     * @date 2013-1-17
     * @param date
     * @return
     * @return List<Map<String,Object>>
     */
    @Override
    public List<Map<String, Object>> getGender(String countValue, String date, Integer[] brandIds) throws Exception {
        Map<String, Object> inParamMap = new HashMap<String, Object>();
        inParamMap.put("countValue", countValue);
        inParamMap.put("date", date);
        inParamMap.put("brandIdsList", parseToParam(brandIds));
        inParamMap.put("size", EmptyUtil.isEmpty(brandIds)?0:brandIds.length);
        List<Map<String, Object>> resultList = dao.queryForList("ConsumerInfoServiceImpl/getGender", inParamMap);
        return nonEmpty(resultList);
    }

 /**
     * 判断非空数据
     * 
     * @author shangql
     * @date 2013-1-23
     * @param srcList
     * @return
     * @return List<Map<String,Object>>
     */
    private List<Map<String, Object>> nonEmpty(List<Map<String, Object>> srcList) {
        List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
        Map<String, Object> itemMap = null;
        if (EmptyUtil.isEmpty(srcList)) {
            itemMap = new HashMap<String, Object>();
            itemMap.put("name", "暂无数据");
            itemMap.put("data1", 0);
            resultList.add(itemMap);
            return resultList;
        } else {
            return srcList;
        }
    }



    /**
     * 装配条件参数
     * 
     * @author shangql
     * @date 2013-1-24
     * @param brandNames
     * @return
     * @return String
     */
    private List<Map<String, Object>> parseToParam(Integer[] brandIds) throws Exception{
        List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
        Map<String, Object> itemMap = null;
        if(!EmptyUtil.isEmpty(brandIds)){
            for (Integer i : brandIds) {
                itemMap = new HashMap<String, Object>();
                itemMap.put("brandId", i);
                resultList.add(itemMap);
            }
        }
        return resultList;
    }

mybaits SQl xml:
<!-- author: shangql date: 2013.01.17 desc:获取性别分析指标  -->
	<select id="ConsumerInfoServiceImpl/getGender" parameterType="java.util.HashMap" resultType="java.util.HashMap">
			SELECT  dimension_brand.dimbrandid AS brandid,
				dimension_brand.brandname AS name,
			       	COALESCE(
						(SELECT 
						       COUNT(membersex) AS sexcount
						  FROM member_info
						INNER JOIN sale_info
						ON   member_info.membercode = sale_info.membercode
						AND member_info.licensecode = sale_info.licensecode
						INNER JOIN dimension_goods
						ON   sale_info.goodsbarcode = dimension_goods.goodsbarcode
						WHERE membersex = #{countValue}
						AND dimension_brand.dimbrandid = brandId
						GROUP BY dimension_goods.brandid
						ORDER BY dimension_goods.brandid ASC)
					,0) AS data1
			FROM sale_info
				INNER JOIN dimension_goods
				ON  sale_info.goodsbarcode =  dimension_goods.goodsbarcode
				INNER JOIN dimension_brand 
				ON  dimension_goods.brandid = dimension_brand.dimbrandid
			WHERE checkflag = '0'
				AND membercode != '-1'
				AND to_char(saletime,'yyyyMM') = #{date}
				AND sale_info.goodsbarcode IN(SELECT  goodsbarcode FROM goods_info)
				<if test="size != 0">
					AND dimension_brand.dimbrandid IN
					<foreach item="item" collection="brandIdsList" open="(" separator="," close=")">
		              #{item.brandId}
          		 	</foreach> 
				</if>
			GROUP BY  dimension_brand.dimbrandid,dimension_brand.brandname
			ORDER BY dimension_brand.dimbrandid ASC;
	</select>


分享到:
评论

相关推荐

    Mybatis 中 Oracle 的拼接模糊查询及用法详解

    Mybatis 中 Oracle 的拼接模糊查询及用法是非常重要的知识点,本文详细介绍了拼接模糊查询的正确写法、技巧和错误排查。开发者可以根据实际情况选择合适的写法,以便更好地使用 Mybatis 实现 Oracle 数据库的查询...

    springboot-mybatis-custom-language-driver.zip

    在本项目"springboot-mybatis-custom-language-driver.zip"中,主要探讨了如何在SpringBoot集成MyBatis的环境中,自定义语言驱动以实现更灵活的SQL动态查询功能,特别是循环查询、IN查询以及if条件判断的动态SQL语句...

    详解MyBatis 常用写法

    详解MyBatis常用写法 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生...

    MyBatis传入集合 list 数组 map参数的写法

    在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...

    详解Mybatis注解写法(附10余个常用例子)

    Mybatis 注解写法详解 Mybatis 是一个流行的持久层框架,它提供了两种配置方式:XML 配置和注解配置。XML 配置是通过编写 XML 文件来配置数据库的映射关系,而注解配置则是通过在 Java 代码中使用注解来配置数据库...

    mybatis中批量插入的两种方式(高效插入)

    MyBatis是一个强大的持久层框架,它允许开发者编写SQL查询,使用存储过程,并进行高级映射,无需手动处理JDBC代码和结果集的封装。在处理大量数据时,批量插入是一种提高性能的有效策略。本文将深入探讨MyBatis中...

    MyBatis 参数类型为String时常见问题及解决方法

    在MyBatis中,当接口方法的参数类型为String时,Mapper XML文件中的动态SQL部分可能会出现异常。例如,我们有一个`findByAccountType`方法,其参数类型为String: ```java public Account findByAccountType(String...

    sqlserver分页的两种写法分别介绍

    在SQL Server 2005之前,或者不支持窗口函数的版本中,一种常用的分页方法是通过子查询和`NOT IN`或`NOT EXISTS`来实现。以下是一个使用存储过程的例子: ```sql CREATE PROC p_paged1 @pageSize INT, @current...

    mybatis postgresql 批量删除操作方法

    在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS)。它是以加州大学计算机系开发的 ...

    MyBatisPlus中使用or()和and()遇到的问题及细节处理

    在MyBatisPlus中,`or()`和`and()`方法用于构建复杂的SQL查询条件,它们是实现动态SQL的重要工具。在使用过程中,理解其工作原理和正确用法至关重要,以避免出现不必要的查询错误。本文将深入探讨这两个方法的使用...

    Mybaits通用的10种写法总结大全

    本文将深入探讨MyBatis中的10种通用写法,这些技巧对于提升开发效率和代码可维护性至关重要。 1. **`&lt;foreach&gt;`标签**: - `foreach`标签用于循环遍历集合,并将其内容插入到SQL语句中。它的主要属性包括: - `...

    SSM笔记-动态SQL

    在处理复杂查询时,Mybatis的动态SQL功能尤为强大,它允许我们在XML映射文件中编写条件化的SQL语句。下面我们将深入探讨动态SQL涉及的主要标签及其用法。 1. **if标签**:if标签用于在SQL语句中添加条件判断。例如...

    自己将项目的mongo 换成mysql 学习.zip

    - 使用MongoDB的导出工具(如`mongoexport`)将数据导出为JSON或CSV格式,然后通过MySQL的导入工具(如`LOAD DATA INFILE`)导入到MySQL中。 - 或者可以编写脚本,逐条读取MongoDB的数据并插入到MySQL中,但这种...

    解决MySQL读写分离导致insert后select不到数据的问题

    MySQL设置独写分离,在代码中按照如下写法,可能会出现问题 // 先录入 this.insert(obj); // 再查询 Object res = this.selectById(obj.getId()); res: null; 线上的一个坑,做了读写分离以后,有一个场景因为想方法...

    支持多数据库的ORM框架ef-orm.zip

    JPA 2.0为了弥补JPA1.0的不足,才将这种Query的思想引入为框架中的另一套查询体系——Criteria API。事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过...

Global site tag (gtag.js) - Google Analytics