这个问题昨天困扰了我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 数据库的查询...
在本项目"springboot-mybatis-custom-language-driver.zip"中,主要探讨了如何在SpringBoot集成MyBatis的环境中,自定义语言驱动以实现更灵活的SQL动态查询功能,特别是循环查询、IN查询以及if条件判断的动态SQL语句...
详解MyBatis常用写法 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生...
在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...
Mybatis 注解写法详解 Mybatis 是一个流行的持久层框架,它提供了两种配置方式:XML 配置和注解配置。XML 配置是通过编写 XML 文件来配置数据库的映射关系,而注解配置则是通过在 Java 代码中使用注解来配置数据库...
MyBatis是一个强大的持久层框架,它允许开发者编写SQL查询,使用存储过程,并进行高级映射,无需手动处理JDBC代码和结果集的封装。在处理大量数据时,批量插入是一种提高性能的有效策略。本文将深入探讨MyBatis中...
在MyBatis中,当接口方法的参数类型为String时,Mapper XML文件中的动态SQL部分可能会出现异常。例如,我们有一个`findByAccountType`方法,其参数类型为String: ```java public Account findByAccountType(String...
在SQL Server 2005之前,或者不支持窗口函数的版本中,一种常用的分页方法是通过子查询和`NOT IN`或`NOT EXISTS`来实现。以下是一个使用存储过程的例子: ```sql CREATE PROC p_paged1 @pageSize INT, @current...
在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS)。它是以加州大学计算机系开发的 ...
在MyBatisPlus中,`or()`和`and()`方法用于构建复杂的SQL查询条件,它们是实现动态SQL的重要工具。在使用过程中,理解其工作原理和正确用法至关重要,以避免出现不必要的查询错误。本文将深入探讨这两个方法的使用...
本文将深入探讨MyBatis中的10种通用写法,这些技巧对于提升开发效率和代码可维护性至关重要。 1. **`<foreach>`标签**: - `foreach`标签用于循环遍历集合,并将其内容插入到SQL语句中。它的主要属性包括: - `...
在处理复杂查询时,Mybatis的动态SQL功能尤为强大,它允许我们在XML映射文件中编写条件化的SQL语句。下面我们将深入探讨动态SQL涉及的主要标签及其用法。 1. **if标签**:if标签用于在SQL语句中添加条件判断。例如...
- 使用MongoDB的导出工具(如`mongoexport`)将数据导出为JSON或CSV格式,然后通过MySQL的导入工具(如`LOAD DATA INFILE`)导入到MySQL中。 - 或者可以编写脚本,逐条读取MongoDB的数据并插入到MySQL中,但这种...
MySQL设置独写分离,在代码中按照如下写法,可能会出现问题 // 先录入 this.insert(obj); // 再查询 Object res = this.selectById(obj.getId()); res: null; 线上的一个坑,做了读写分离以后,有一个场景因为想方法...
JPA 2.0为了弥补JPA1.0的不足,才将这种Query的思想引入为框架中的另一套查询体系——Criteria API。事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过...