在dao层给map赋值

纠正一下应该把dd作为传入而不是sbiId;

sqlMap中的parameterType="java.util.Map", 就 OK

package com.ldrc.srm.jczx.web.results.module.screen;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.citrus.service.requestcontext.parser.ParserRequestContext;
import com.alibaba.citrus.turbine.Context;
import com.ldrc.srm.common.web.OuUser;
import com.ldrc.srm.jczx.biz.common.DateUtil;
import com.ldrc.srm.jczx.biz.construction.technology.IndexPlanManager;
import com.ldrc.srm.jczx.dal.dataobject.construction.projectinfo.Assessment;
import com.ldrc.srm.jczx.dal.dataobject.construction.technology.PatentExecute;
import com.ldrc.srm.jczx.dal.dataobject.construction.technology.SmAssessmentPlan; public class Kaimpatent {
@Autowired
private IndexPlanManager ipm;
@Autowired
ParserRequestContext parser;
public void execute(Context context){
OuUser ou = OuUser.getCurrentUser();
Integer sbiId = ou.getSubjectBaseId();
List<PatentExecute> pes = ipm.selectAllAimpatent();
List<PatentExecute> pesList = new ArrayList<PatentExecute>();
List<Assessment> ass = ipm.getAssessmentBySbiId(sbiId);
List<SmAssessmentPlan> assessmentPlanList = new ArrayList<SmAssessmentPlan>();
if (!ass.isEmpty()) {
for (Assessment assessment : ass) {
List<SmAssessmentPlan> assessmentPlan = assessment.getAssessmentPlan();
if (!assessmentPlan.isEmpty()) {
assessmentPlanList.addAll(assessmentPlan);
}
} if (!assessmentPlanList.isEmpty()) {
for (SmAssessmentPlan smAssessmentPlan : assessmentPlanList) {
Integer sadId = smAssessmentPlan.getSadId();
if (!pes.isEmpty()) {
for (PatentExecute patentExecute : pes) {
if (patentExecute.getSadId() != null && patentExecute.getSadId().equals(sadId)) {//使用程序代替sql相当于关联查询
pesList.add(patentExecute);
}
}
}
}
}
}
context.put("rUrl", parser.getRequest().getHeader("Referer"));
context.put("pes", pesList);
context.put("DateUtil", new DateUtil()); /**
* 上面的方法写了这么多其实不必
* 一条sql就搞定
* <select id="r" resultMap="BaseResultMap" parameterType="java.util.Map">
select t3.* from sm_s_assessment t1
left join SM_S_ASSESSMENT_PLAN t2
on t1.SASS_ID = t2.SASS_ID
left join SM_PATENT_EXECUTE t3
on t2.SAD_ID = t3.SAD_ID
where t1.SBI_ID = #{sbiId, jdbcType=INTEGER}
</select>
问题是我的resultMap中没有SBI_ID这个列,怎么办
有办法, 注意到parameterType有没有比平时不一样没<select id="r" resultMap="BaseResultMap" parameterType="java.util.Map">
呵呵, 就是parameterType="java.util.Map" ; 有了这个你可以在dao随意传递多少个参数, 不管下面的resultMap中有没有对应的列或属性
注意的是dao里传参,
Integer sbiId = 21;
Map<String, Object> m = new HashMap<String, Object>();
m.put("sbiId", sbiId);
List<PatentExecute> selectList = sqlSession.selectList("PatentExecuteMapper.r", m);
总结: 其实就是把parameterType平时使用的javaBean或四类八种换了 map, 原理是一样的
*/
其实还可以把上面的sql写到 指标 的sqlmap 中resultMap返回PatentExecuteMapper.BaseResultMap即可那么parameterType也不必须使用map类型了

如:<select id="r" resultMap="PatentExecuteMapper.BaseResultMap" parameterType="java.util.Map">
              select t3.* from sm_s_assessment t1
                left join SM_S_ASSESSMENT_PLAN t2
                    on t1.SASS_ID = t2.SASS_ID
                left join SM_PATENT_EXECUTE t3
                    on t2.SAD_ID = t3.SAD_ID
                where t1.SBI_ID = #{sbiId, jdbcType=INTEGER}
   </select>

mybatis是不是特别灵活啊!

    }
}

sqlMap文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="PatentExecuteMapper" >
<resultMap id="BaseResultMap" type="com.ldrc.srm.jczx.dal.dataobject.construction.technology.PatentExecute" >
<id column="SPE_ID" property="speId" jdbcType="INTEGER" />
<result column="SAD_ID" property="sadId" jdbcType="INTEGER" />
<result column="SPE_NUM" property="speNum" jdbcType="VARCHAR" />
<result column="SPE_APPLY_DATE" property="speApplyDate" jdbcType="DATE" />
<result column="SPE_APPLY_REMARK" property="speApplyRemark" jdbcType="VARCHAR" />
<result column="SPE_PEOPLE_NAME" property="spePeopleName" jdbcType="VARCHAR" />
<result column="SPE_INVENT_NAME" property="speInventName" jdbcType="VARCHAR" />
<result column="SPE_STUTAS" property="speStutas" jdbcType="VARCHAR" />
<result column="SPE_PRIORITY" property="spePriority" jdbcType="VARCHAR" />
<result column="SPE_PUBLISH_NUM" property="spePublishNum" jdbcType="VARCHAR" />
<result column="SPE_ISSUE_NUM" property="speIssueNum" jdbcType="VARCHAR" />
<result column="SPE_DIGEST" property="speDigest" jdbcType="VARCHAR" />
<result column="SPE_MAIN_NUM" property="speMainNum" jdbcType="VARCHAR" />
<result column="SPE_AGENT" property="speAgent" jdbcType="VARCHAR" />
<result column="SPE_FILE" property="speFile" jdbcType="VARCHAR" />
<collection property="files" column="SPE_FILE"
ofType="com.ldrc.srm.jczx.dal.dataobject.file.SrmFile" select="SrmFileMapper.selectByEgCode"
resultMap="SrmFileMapper.BaseResultMap">
</collection>
</resultMap> <sql id="Base_Column_List" >
SPE_ID, SAD_ID, SPE_NUM, SPE_APPLY_DATE, SPE_APPLY_REMARK, SPE_PEOPLE_NAME, SPE_INVENT_NAME,
SPE_STUTAS, SPE_PRIORITY, SPE_PUBLISH_NUM, SPE_ISSUE_NUM, SPE_DIGEST, SPE_MAIN_NUM,
SPE_AGENT, SPE_FILE
</sql>
<select id="r" resultMap="BaseResultMap" parameterType="java.util.Map">
select t3.* from sm_s_assessment t1
left join SM_S_ASSESSMENT_PLAN t2
on t1.SASS_ID = t2.SASS_ID
left join SM_PATENT_EXECUTE t3
on t2.SAD_ID = t3.SAD_ID
where t1.SBI_ID = #{sbiId, jdbcType=INTEGER}
</select>
<select id="selectAllAimpatent" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select *
from SM_PATENT_EXECUTE
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from SM_PATENT_EXECUTE
where SPE_ID = #{speId,jdbcType=INTEGER}
</select>
</mapper>

mybatis的parameterType使用map实现真正的sql随意写的更多相关文章

  1. mybatis的parameterType为map,map里带有多个list

    我写这个主要是为了解决sql注入 原sql有sql注入, 结果:select req_msg_id from account_message_info where req_msg_id in ('12 ...

  2. mybatis中parameterType可以写的别名

    mybatis中parameterType可以写的别名 https://blog.csdn.net/sdzhangshulong/article/details/51749807 _byte byte ...

  3. 解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错

    前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" ,然后使用 jackson @ResponseBody 返 ...

  4. mybatis中的map.xml文件中sql语句需要分号吗?

    mybatis中的map.xml文件中sql语句需要分号吗? :你是说sql介绍的分号吗?不需要的

  5. 【mybatis】mybatis查询 结果 用map接收,无实体接收 + 关联子表 一并返回主子表的结果

    如果后台程序没有实体对应mysql的数据表. 而mybatis想要查询mysql这个数据表的数据,返回给应用程序. 应用程序该如何接收? =============================== ...

  6. IntelliJ IDEA中,mybatis的配置文件(map.xml)无法编译到class文件夹下

    编译工具:IntelliJ IDEA 项目结构:maven 项目框架:SSM 问题:java目录下,mybatis的配置文件(map.xml)无法编译到class文件夹下 问题原因:在idea中,直接 ...

  7. mybatis中#{}与${}的差别(如何防止sql注入)

    默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...

  8. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  9. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

随机推荐

  1. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  2. hdu 4280 网络流

    裸的网络流,递归的dinic会爆栈,在第一行加一句就行了 #pragma comment(linker, "/STACK:1024000000,1024000000") #incl ...

  3. less-1

    说在前面的话,为什么用less: 1.需要编写的代码明显变少了 2.css管理更加容易 3.less学习成本低 4.使用less实现配色变得非常容易 5.兼容css3,实现各个浏览器中css的兼容写法 ...

  4. Jackson - Features for configuring Java-to-JSON mapping

    Following on/off features are defined in SerializationConfig.Feature (for Jackson 1.x), or Serializa ...

  5. SQL语句添加,删除主键

    IF EXISTS (SELECT * FROM sys.all_objects  WHERE  type_desc= N'主键名')begin --删除主键 alter table 表名 drop ...

  6. 关于蓝牙设备与ios连接后,自动打开一个app

    How to launch an iphone app when an external accessory is either paired over BT or plugged into dock ...

  7. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

  8. 牛客_Java_值传递(拷贝)不该表原来变量+传引用的话会一起改变

    总结: 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递.  与其他语言不同,Java不允许程序员选择按值传递还是按引用传递各个参数,基本类型(byte--short--int ...

  9. asp.net中C#对象与方法 属性详解

    C#对象与方法 一.相关概念: 1.对象:现实世界中的实体 2. 类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装  继承 多态 二.类的定义与语法 1.定义类: 修饰符 类名称 ...

  10. IOS-UI-UIDynamic(一)

    UIDynamic是从iOS7开始引入的技术 属于UIkit框架 可以模拟显示生活中的物理现象 如碰撞 抖动 摆动等 一. 使用UIDynamic步骤: 1.创建一个动力效果器UIDynamicAni ...