mybatis的parameterType使用map实现真正的sql随意写
在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随意写的更多相关文章
- mybatis的parameterType为map,map里带有多个list
我写这个主要是为了解决sql注入 原sql有sql注入, 结果:select req_msg_id from account_message_info where req_msg_id in ('12 ...
- mybatis中parameterType可以写的别名
mybatis中parameterType可以写的别名 https://blog.csdn.net/sdzhangshulong/article/details/51749807 _byte byte ...
- 解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错
前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" ,然后使用 jackson @ResponseBody 返 ...
- mybatis中的map.xml文件中sql语句需要分号吗?
mybatis中的map.xml文件中sql语句需要分号吗? :你是说sql介绍的分号吗?不需要的
- 【mybatis】mybatis查询 结果 用map接收,无实体接收 + 关联子表 一并返回主子表的结果
如果后台程序没有实体对应mysql的数据表. 而mybatis想要查询mysql这个数据表的数据,返回给应用程序. 应用程序该如何接收? =============================== ...
- IntelliJ IDEA中,mybatis的配置文件(map.xml)无法编译到class文件夹下
编译工具:IntelliJ IDEA 项目结构:maven 项目框架:SSM 问题:java目录下,mybatis的配置文件(map.xml)无法编译到class文件夹下 问题原因:在idea中,直接 ...
- mybatis中#{}与${}的差别(如何防止sql注入)
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
随机推荐
- Dubbo认识
Dubbo提供了服务注册.RPC服务调用.调用均衡.服务监控和服务failover等功能 Dubbo框架中有两个重要角色:(服务)提供者和(服务)消费者,这里为了简单起见,将包含了dubbo提供者或消 ...
- img与父元素的间隙解决
近来在做H5页面时,突然发现一个问题,使用一个div包裹一个img,在手机预览时,发现图片与div之间有间隙. 当时第一反应就是,是不是间距没有设置为0,于是预览了下代码: .active img { ...
- html accesskey (단축키 지정)
accesskey 속성은 마우스 등을 쓰지 않는 환경을 위해 링크나 입력 폼에서 키보드의 키 입력만으로 동작을 실행할 수 있도록 accesskey 속성값에 access 할 영어 또 ...
- Linux 命令 - netstat: 检查网络设置及相关统计数据
netstat 程序可以用于查看不同的网络设置及数据.通过使用其丰富的参数选项,我们可以查看网络启动过程的许多特性. 命令格式 netstat [options] 命令参数 -r, --route 显 ...
- UML学习-总体概念篇
前言:我们在实施一个项目时,前期的设计是非常重要的,如建筑师在建造一个建筑时,需要事先设计图纸,设计图纸是设计的语言,是不同的工程设计人员.设计人员和生产人员之间进行沟通的语言,在一个现代化的工程里面 ...
- php递归方法实现无限分类实例
数组: 代码如下 复制代码 $items = array( array('id' => 1, 'pid' => 0, 'name' => '一级11' ), array('id' ...
- Cocos2d-x中使用音频CocosDenshion引擎介绍与音频文件的预处理
Cocos2d-x提供了一个音频CocosDenshion引擎,CocosDenshion引擎可以独立于Cocos2d-x单独使用,CocosDenshion引擎本质上封装了OpenAL音频处理库.具 ...
- 前端面试题和setTimeout异步
var len=4; while(len--){ setTimeout(function(){ alert(len); },0); alert(len); } 这个题目的答案我先说出来,读者请仔细考虑 ...
- 09_Java8操作集合的一些新特性
[使用forEach()结合Lambda表达式遍历集合] public class ForEachDemo { public static void main(String[] args) { Col ...
- WSAEventSelect模型详解
WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似. 该模型同样是接收 FD_XXX 之类的网络事件,但是是通 ...