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 ...
随机推荐
- 测试 js 方法运行时间
早期测速的时候是这样的,呵呵呵,一开始还挺爽的 function testFunctionTime(fn) { var start = new Date().getTime(); if (fn) fn ...
- 虚构 css 父级选择器
能 CSS 解决的绝不用 JS,这句话又一次故作装逼地说出来还是挺爽的... 比如下拉列表,能用 CSS 的 :focus 就不用 JS 的 .on("focus blur") 能 ...
- Kubernetes List-Watch
list-watch,作为k8s系统中统一的异步消息传递方式,对系统的性能.数据一致性起到关键性的作用. list-watch操作需要做这么几件事: 由组件向apiserver而不是etcd发起wat ...
- 和BEM的战斗:10个常见问题及如何避免
原文链接: https://segmentfault.com/a/1190000006135647 无论你是刚刚发现BEM或者已经是个中熟手(作为web术语来说),你可能已经意识到它是一种有用的方法. ...
- 考勤助手ER图2.0版本所存在的问题
如图所示,考勤助手ER图2.0版本中,缺少个人信箱这一问题虽然不具有逻辑层面的问题,但是它是不满足需求的,也就是说这样的设计无法满足小组对考勤助手最初的设计.其次,就设计层面来分析,弱联系是数据库查询 ...
- myEclipse 导入maven项目时报错
1.先右击项目,build Path 查看是否是某个JAR出了错.去掉无用的JAR 以及修改对应的JDK版本 2.检查src源文件,查看是否是源文件出了错.发现,还真的是 导入的包上面,报错:The ...
- JAVA Properties配置文件的读写
通常我们就会看到一个配置文件,比如:jdbc.properties,它是以“.properties”格式结尾的.在java中,这种文件的内容以键值对<key,value>存储,通常以“=” ...
- xenapi-add-support-for-vgpu
Model types 为了在vm中支持vgpu,问题在于vgpu是否应该被当作一个PCI设备, 虽然物理GPU不是一个SR-IOV设备,但vgpu却是以一个类似SR-IOV device上的VF赋给 ...
- Java-集合类源码List篇(三)
前言 前面分析了ArrayList和LinkedList的实现,分别是基于数组和双向链表的List实现.但看之前那张图,还有两个实现类,一个是Vector,另一个是Stack,接下里一起走进它们的源码 ...
- 拷贝struts2项目时,运行后启动的是拷贝前的项目
.解决方案: 然后