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等的更多相关文章

  1. postgresql shell脚本传递参数并执行sql脚本并

    参考: https://stackoverflow.com/questions/7389416/postgresql-how-to-pass-parameters-from-command-line ...

  2. Mybatis执行sql(insert、update、delete)返回值问题

    数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert:   插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...

  3. SSIS中执行SQL任务组件参数传递的问题

    原文:SSIS中执行SQL任务组件参数传递的问题 症状: 执行SQL任务,传递参数到子查询中,执行报错. 错误: 失败,错误如下:"无法从使用 sub-select 查询的 SQL 语句中派 ...

  4. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

  5. PreparedStatement执行sql語句

    import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.PreparedStatement; i ...

  6. log4j打印mybatis执行sql,将占位符换成真实的参数输出

    背景: 在我日常码代码的时候,由于对mybatis的动态sql,比较依赖,并且有时候需求复杂,导致sql较长,而且参数众多,当出现问题是,需要将sql,放到navicat里面去执行查看结果,但是对于复 ...

  7. MyBatis - 常用标签与动态Sql

    MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...

  8. Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!

    前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...

  9. Mybatis执行SQL的流程

    前篇:Mybatis初始化过程 SqlSession : SqlSession是一个接口,它有两个实现类:DefaultSqlSession (默认)和 SqlSessionManager (弃用,不 ...

  10. mybatis关于ORM的使用以及设计(三)[参数对象转换为SQL语言]

    上节分析了Mapper对象的创建. 在ORM的定义中可以理解为Object->SQLMapper抽象层(这一层并不负责具体的SQL执行.这一层可以理解为SQL代理层) 本节分析以下内容: ①Sq ...

随机推荐

  1. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  2. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  3. H3 BPM社区:流程开发者的学习交流平台

    企业上市有上市流程,融资扩充有融资流程,项目招投标有招投标流程,部门领导选拔有晋升流程,员工请假休假有请假流程,早起上班梳洗有符合自己习惯的流程--生活处处是流程,流程无处不在.但从信息化建设来说,企 ...

  4. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  5. ASP.NET Core 性能对比评测(ASP.NET,Python,Java,NodeJS)

    前言 性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检.比如我们在购买手机.显卡.CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测. 性能也一 ...

  6. Kafka1 利用虚拟机搭建自己的Kafka集群

    前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ...

  7. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  8. C++右值引用浅析

    一直想试着把自己理解和学习到的右值引用相关的技术细节整理并分享出来,希望能够对感兴趣的朋友提供帮助. 右值引用是C++11标准中新增的一个特性.右值引用允许程序员可以忽略逻辑上不需要的拷贝:而且还可以 ...

  9. ARM的栈指令

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  10. 使用Rest访问Redis中的数据

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   大家在用Redis保存数据的时候,有不同的序列化方式.用得最多应该还是JSON,有一些场景我们需要以Http请 ...