1、resultMap和resultType等参数以及结果集

  <select id="getApplicationByRoleCode" resultType="platform.appframe.entity.AfaApplication" parameterType="java.lang.String" >
select distinct <include refid="Application_Base_Column_List" />
from afa_application a
left join afa_auth_function b
on a.app_id = b.app_id
where b.party_code =#{roleCode}
</select>

resultMap:用于操作本map里头的表,即操作在当前映射文件里头的指定的map。

resultType:用于操作其他map里头的表。

parameterType:可以为java.lang.String、也可以为一个对象比如:appframe.entity.AfaAppMenu

parameterMap:比如:appframe.entity.AfaAppMenu

2、map里头没有的参数在mapper里头要定义清楚

    <select id="getMenusByRoleCodes" resultMap="afaAppMenuMap">
SELECT
<include refid="Base_Column_List" />
FROM AFA_APP_MENU
WHERE MENU_CODE IN
(SELECT a.FUNC_CODE
FROM AFA_APP_FUNCTION A
INNER JOIN AFA_AUTH_FUNCTION B
ON A.FUNC_CODE = B.FUNC_CODE
WHERE B.PARTY_CODE in
<foreach collection="roleCodes" item="roleCode" index="index" open="(" separator="," close=")">
#{roleCode}
</foreach>
<if test="appId!=null">
AND A.APP_ID = #{appId}
</if>
)
</select>

在mapper里头要定义

public interface AfaAppMenuMapper extends Mapper<AfaAppMenu> {
public List<AfaAppMenu> getMenusByRoleCodes(@Param("roleCodes")List<String> roleCodes,@Param("appId")String appId);
}

否则会报Parameter 'roleCodes' not found. Available parameters are [1, 0, param1, param2]

3、分页操作

public Page<AfaAppMenu> queryAfaAppMenuPage(@Param("searcher")Searcher searcher,@Param("page")Page<AfaAppMenu> page);

mybatis里头定义:

    <select id="queryAfaAppMenuPage" resultMap="afaAppMenuMap">
SELECT
<include refid="Base_Column_List" />
FROM AFA_APP_MENU
<trim prefix="where" prefixOverrides="and |or">
<if test="searcher != null and searcher.__QUERYCON != null">
${searcher.__QUERYCON}
</if>
</trim>
ORDER BY SORT_NO ASC
</select>

4、不将实体映射到数据库中

通过@Transient注解,该注解的对象在数据库中实际不存在。

 @Transient
private String context; public String getMenuAppId() {
return menuAppId;
} public void setMenuAppId(String menuAppId) {
this.menuAppId = menuAppId;
}
<result column="CONTEXT" jdbcType="VARCHAR" property="context" />

 5、相关语法整理

foreach 语法

方式一:List<String>方式 
<foreach collection="roleCodes" item="roleCode" index="index" open="(" separator="," close=")">
#{roleCode}
</foreach>
方式二:List<object>方式
<foreach item="func" index="index" collection="appfunc" open="(" separator="," close=")">
#{func.funcCode}
</foreach>

if 语法

添加前后缀:
        <trim prefix="where"  prefixOverrides="and |or">
<if test="searcher != null and searcher.__QUERYCON != null">
${searcher.__QUERYCON}
</if>
</trim> 判断等于某个字符串:
        <if test="appId!='app_menu_id'">
AND A.APP_ID = #{appId}
</if>

sql定义 

  定义:
<sql id="Application_Base_Column_List">
a.APP_ID,a.APP_NAME,a.APP_TYPE,a.IS_OPEN,a.CONTEXT,a.IP,a.PORT,a.PROTOCOL,a.APP_DESC,a.TENANT_ID,a.LOGOUT_URL,a.LAST_MODIFY_TIME
</sql>
使用:
<include refid="Application_Base_Column_List"/>

like语法

方式一:通过concat添加%:
WHERE FUNC_CODE LIKE CONCAT('%',#{key},'%') OR FUNC_NAME LIKE CONCAT('%',#{key},'%') 
方式二:通过$添加%:
where org_name like '%${orgName}%'

Mybatis相关SQL操作总结的更多相关文章

  1. Springboot第五篇:结合myBatis进行SQL操作

    前提:和之前同样的,本篇会从前端和后台一起讲述关于SQL的select操作(其他操作原理大致类似,不多做解释了). 大致流程:前端通过AJAX将数据发送到后台的路由,后台路由会根据发送的数据进行SQL ...

  2. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  3. 数据库优化和SQL操作的相关题目

    SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...

  4. 【他山之石】mybatis打印sql日志 相关配置

    背景:mybatis的sql日志打印对我来说一直比较迷,哪怕看过网上很多博客后还是这样,这两天刚好又遇到了问题,要查sql不得已又来查阅,这次终于搞定了. mybatis是有提供日志功能支持的,目前支 ...

  5. mybatis原理分析学习记录,mybatis动态sql学习记录

    以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...

  6. Spring Boot 集成 MyBatis和 SQL Server实践

    概 述 Spring Boot工程集成 MyBatis来实现 MySQL访问的示例我们见过很多,而最近用到了微软的 SQL Server数据库,于是本文则给出一个完整的 Spring Boot + M ...

  7. Mybatis设置sql超时时间

    开始搭建项目框架的时候,忽略了sql执行超时时间的问题. 原本使用.net开发是,默认的超时时间是30s,这个时间一般一般sql是用不到的,但也不排除一些比较复杂或数据量较大的sql. 而java中, ...

  8. Mybatis动态sql及分页、特殊符号

    目的: mybatis动态sql(案例:万能查询) 查询返回结果集的处理 mybatis的分页运用 mybatis的特殊符号 mybatis动态sql(案例:万能查询) 根据id查询 模糊查询 (参数 ...

  9. 精尽MyBatis源码分析 - MyBatis 的 SQL 执行过程(一)之 Executor

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

随机推荐

  1. 计算机网络概述 传输层 TCP拥塞控制

    TCP拥塞控制 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就 ...

  2. python配置文件操作

    步骤: 1.导入模块  import configparser 2.创建实例 cf = configparser.ConfigParser() 3.读取配置文件,若配置文件中有中文,则需设置编码格式  ...

  3. jQuery仿Android锁屏图案应用

    在线演示 本地下载

  4. package.json字段简要解析

    name 必填 应用名称 version 必填 应用版本 description 选填 应用描述,多用于搜索,在npm search 时可以用到 keywords 选填 应用关键字,也多用于搜索 sc ...

  5. 20165101刘天野 2017-2018-2 《Java程序设计》第8周学习总结

    #20165101刘天野 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章Java多线程机制 一.进程与线程 1.1.任务调动 大部分操作系统(如Wi ...

  6. iis和apache共享80端口

    Windows server 2003服务器上安装有默认 IIS 6和Apache两个服务器,IIS运行的一个.net程序,apache运行php程序,现在想让它们同时都能通过80端口访问,设置起来还 ...

  7. Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair)

    Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair) 引入 1. 进程和APP通信 创建进程 读取.分发 - 进程发送输入事件给APP 进程读取APP回应的事件 输 ...

  8. Docker Compose yml

    Wordpress + Mysql version: '3' services: db: image: mysql:latest volumes: - db_data:/var/lib/mysql e ...

  9. myEclipse 2014 破解教程

    因为经常在不同电脑里安装配置下载myEclipse,所以干脆记录下来,一直找度娘也是很麻烦的. 此教程仅对myEclipse2014 有效. 破解工具:https://pan.baidu.com/s/ ...

  10. hdu 5876 Sparse Graph 无权图bfs求最短路

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) P ...