Mybatis相关SQL操作总结
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操作总结的更多相关文章
- Springboot第五篇:结合myBatis进行SQL操作
前提:和之前同样的,本篇会从前端和后台一起讲述关于SQL的select操作(其他操作原理大致类似,不多做解释了). 大致流程:前端通过AJAX将数据发送到后台的路由,后台路由会根据发送的数据进行SQL ...
- 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念
本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...
- 数据库优化和SQL操作的相关题目
SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...
- 【他山之石】mybatis打印sql日志 相关配置
背景:mybatis的sql日志打印对我来说一直比较迷,哪怕看过网上很多博客后还是这样,这两天刚好又遇到了问题,要查sql不得已又来查阅,这次终于搞定了. mybatis是有提供日志功能支持的,目前支 ...
- mybatis原理分析学习记录,mybatis动态sql学习记录
以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...
- Spring Boot 集成 MyBatis和 SQL Server实践
概 述 Spring Boot工程集成 MyBatis来实现 MySQL访问的示例我们见过很多,而最近用到了微软的 SQL Server数据库,于是本文则给出一个完整的 Spring Boot + M ...
- Mybatis设置sql超时时间
开始搭建项目框架的时候,忽略了sql执行超时时间的问题. 原本使用.net开发是,默认的超时时间是30s,这个时间一般一般sql是用不到的,但也不排除一些比较复杂或数据量较大的sql. 而java中, ...
- Mybatis动态sql及分页、特殊符号
目的: mybatis动态sql(案例:万能查询) 查询返回结果集的处理 mybatis的分页运用 mybatis的特殊符号 mybatis动态sql(案例:万能查询) 根据id查询 模糊查询 (参数 ...
- 精尽MyBatis源码分析 - MyBatis 的 SQL 执行过程(一)之 Executor
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
随机推荐
- java多线程笔记
一,线程的状态 1,新建状态:新创建了一个线程对象 2,就绪状态:线程创建对象后,线程调用star()的方法,等待获取CPU的使用权. 3,运行状态:获取了cpu的使用权,执行程序代码 4,阻塞状态: ...
- bootstrap table 复选框使用
var columns = [ { field : 'checked', checkbox: true, align: 'center', valign: 'middle', formatter:fu ...
- 【HackerRank】Closest Numbers
Sorting is often useful as the first step in many different tasks. The most common task is to make f ...
- Struts2笔记04——Hello World Example(转)
原文地址:https://www.tutorialspoint.com/struts_2/ [注释]项目结构,次序估计有误 通过学习Struts2的架构,我们可以知道,在Struts2 web应用中, ...
- DNS 主从同步配置
DNS 主从同步配置 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 看序列号. 从DNS:从是可以单独修改,主从不会报错.但从修改后,主端同步给从后 从端修改数据会丢失 主从原理:从会 ...
- INSPIRED启示录 读书笔记 - 第18章 重新定义产品说明文档
理想的产品说明文档 1.产品说明文档应该完整地描述用户体验——不只是用户需求,还包括交互设计和视觉设计.用户需求和用户体验是密不可分的 2.产品说明文档必须准确地描述软件的行为 3.产品说明文档必须以 ...
- INSPIRED启示录 读书笔记 - 第3章 产品管理与项目管理
互联网让两者变得不同 在传统的零售软件领域,产品经理常常兼任项目经理的工作,随着互联网的发展,两者的职责区别也越来越明显 产品管理的职责是探索(定义)有价值的.可用的.可行的产品 项目管理的职责是关注 ...
- JMeter学习(七)聚合报告之 90% Line 正确理解
90% Line 参数正确的含义: 虽然,我的上面理解有一定的道理,显然它是错误的.那看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no m ...
- Eclipse开发快捷键精选
1.alt+?或alt+/:自动补全代码或者提示代码2.ctrl+o:快速outline视图3.ctrl+shift+r:打开资源列表4.ctrl+shift+f:格式化代码5.ctrl+e:快速转换 ...
- Linux 一键安装 webmin/virtualmin
Webmin是一个可运行于Linux/freebsd的web界面的主机管理系统,而Virtualmin是一个基于Webmin的虚拟主机管理模块. webmin官方站: http://www.webmi ...