Mybatis常用总结:参数,返回,执行sql,include等
1.参数注入
1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数
public List<RecordVo> queryList(String workerId, Integer topNum);
<select id="queryList" resultType="com.demo.RecordVo">
SELECT ID id, WORKER_ID workerId, UPDATE_DATE updateDate
FROM USER_RECORDS t
WHERE t.WORKER_ID = #{0}
LIMIT #{1}
</select>
1.2Map或者封装对象,workerId为map里面的键;如果是对象则workerId为对象中的属性,这种方法非常常用
public Integer queryCountByWorkerId(Map queryParam);
<select id="queryCountByWorkerId" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM tableName F
WHERE F.WORKER_ID = #{workerId}
</select>
1.3注解
public Integer queryCountByWorkerId(@param(“workerId”)String workerId);
<select id="queryCountByWorkerId" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM tableName F
WHERE F.WORKER_ID = #{workerId}
</select>
2.返回
2.1映射<!-- 实体类与表字段对应 -->
<resultMap type="com.demo.DataModule" id="dataModule">
<result column="ID" property="id" />
<result column="CREATE_DATE" property="createDate" />
<result column="WORKERID" property="workerId" />
<result column="UPDATE_DATE" property="updateDate" />
<result column="STATUS" property="status" />
</resultMap>
<select id="queryAll" resultType="dataModule">
select ID,CREATE_DATE,WORKERID from tableName
</select>
这种方式查询语句查询的字段直接就是数据库里面的字段就好了,就定义映射的column
2.2直接返回对象
<select id="queryAll" resultType="com.demo.DataModule">
select ID id,CREATE_DATE createDate,WORKERID workerId from tableName
</select>
这里查询返回的字段别名必须对应返回对象中的属性
3.执行原生sql
3.1sql参数:
public class ParamVo {
private String sql;
//getter setter 省略
}
3.2接口:
/**
* @功能描述: 创建
* @param vo
* @return
*/
public int excuteCreateSql(ParamVo vo);
/**
* @功能描述: 查询
* @param vo
* @return
*/
public List<Map<String, Object>> excuteSelectSql(ParamVo vo);
3.3xml:
<update id="excuteCreateSql">
${sql}
</update>
${}不编译sql直接执行,如果用#{sql}可能报错
<select id="excuteSelectSql" resultType="java.util.Map">
${sql}
</select>
这里不知道返回类型用map或者hashmap作为返回
4.include:有时候两个方法要返回的字段都一样或者where子句一样,这样为了避免重复写代码,就抽出来用include
4.1定义子句相同部分
<sql id="queryChild">
FROM tableName1 F
RIGHT JOIN tableName2 C ON F.WORKER_ID = C.WORKER_ID
WHERE F.STATUS = 1 AND F.WORKER_ID = #{workerId}
ORDER BY C.CREATE_DATE DESC
</sql>
4.2引用
<select id="queryCountByWorkerId" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT COUNT(1)
<include refid="queryChild"/>
</select>
<select id="queryListByWorkerId" parameterType="java.util.Map" resultType="com.demo.RecordVo">
SELECT ID id, WORKER_ID workerId, UPDATE_DATE updateDate,......
<include refid="queryChild"/>
</select>
仅供参考,不足之处还请见谅,欢迎指正!转载请标明出处。如有疑问,欢迎评论或者联系我邮箱1034570286@qq.com
Mybatis常用总结:参数,返回,执行sql,include等的更多相关文章
- postgresql shell脚本传递参数并执行sql脚本并
参考: https://stackoverflow.com/questions/7389416/postgresql-how-to-pass-parameters-from-command-line ...
- Mybatis执行sql(insert、update、delete)返回值问题
数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert: 插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...
- SSIS中执行SQL任务组件参数传递的问题
原文:SSIS中执行SQL任务组件参数传递的问题 症状: 执行SQL任务,传递参数到子查询中,执行报错. 错误: 失败,错误如下:"无法从使用 sub-select 查询的 SQL 语句中派 ...
- 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...
- PreparedStatement执行sql語句
import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.PreparedStatement; i ...
- log4j打印mybatis执行sql,将占位符换成真实的参数输出
背景: 在我日常码代码的时候,由于对mybatis的动态sql,比较依赖,并且有时候需求复杂,导致sql较长,而且参数众多,当出现问题是,需要将sql,放到navicat里面去执行查看结果,但是对于复 ...
- MyBatis - 常用标签与动态Sql
MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...
- Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!
前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...
- Mybatis执行SQL的流程
前篇:Mybatis初始化过程 SqlSession : SqlSession是一个接口,它有两个实现类:DefaultSqlSession (默认)和 SqlSessionManager (弃用,不 ...
- mybatis关于ORM的使用以及设计(三)[参数对象转换为SQL语言]
上节分析了Mapper对象的创建. 在ORM的定义中可以理解为Object->SQLMapper抽象层(这一层并不负责具体的SQL执行.这一层可以理解为SQL代理层) 本节分析以下内容: ①Sq ...
随机推荐
- Log4net - 规则简介
参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...
- EF上下文对象线程内唯一性与优化
在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
- C# 数组的交集、差集、并集
C# 数组的交集.差集.并集 工作中经常会用这方面的知识来检查那些字段是必须输入的,那些是禁止输入. using System; using System.Collections.Generic; u ...
- TemplateMethod(模块方法模式)
/** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- SAP CRM 显示消息/在消息中进行导航
向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...
- BPM体系文件管理解决方案分享
一.方案概述 企业管理在很大程度上是通过文件化的形式表现出来,体系文件管理是管理体系存在的基础和证据,是规范企业管理活动和全体人员行为,达到管理目标的管理依据.对与公司质量.环境.职业健康安全等体系有 ...
- Linux 安装Mono环境 运行ASP.NET(一)
1.先看一下Linux环境下面请求的过程,(画的不是很好,简单的了解一下原理.) .NET跨平台其实需要这三个关键:编译器.CLR和基础类库.在.NET下我们编写一个最简单的"Hello W ...
- Hadoop1 Centos伪分布式部署
前言: 毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...
- lucene 基础知识点
部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...