直接将值返回给对象

  1. <select id="list" resultType="com.vipsoft.base.entity.UserInfo">
  2. SELECT Id,Title FROM User
  3. </select>

如果字段和属性名不一致时,通过 resultMap 做映射

  1. <resultMap id="StudentResult" type="com.mybatis3.domain.Student">
  2. <id column="stud_id" property="studId" jdbcType="VARCHAR"/>
  3. <result column="user_name" property="name" jdbcType="VARCHAR"/>
  4. <result column="email" property="email" jdbcType="VARCHAR" />
  5. <result column="phone" property="phone" jdbcType="VARCHAR" />
  6. <result column="status" property="status" jdbcType="INTEGER" />
  7. <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
  8. </resultMap>
  9.  
  10. <select id="findAllStudents" resultMap="StudentResult" >
  11. SELECT * FROM STUDENTS
  12. </select>

实体引用另一个实体的查询结果返回

  1. <resultMap type="Course" id="CourseResult">
  2. <id column="course_id" property="courseId"/>
  3. <result column="name" property="name"/>
  4. <result column="description" property="description"/>
  5. <result column="start_date" property="startDate"/>
  6. <result column="end_date" property="endDate"/>
  7. </resultMap>
  8.  
  9. <resultMap type="Tutor" id="TutorResult">
  10. <id column="tutor_id" property="tutorId"/>
  11. <result column="tutor_name" property="name"/>
  12. <result column="email" property="email"/>
  13. <collection property="courses" resultMap="CourseResult"/>
  14. </resultMap>
  15.  
  16. <select id="findTutorById" parameterType="int" resultMap="TutorResult">
  17. SELECT T.TUTOR_ID, T.NAME AS TUTOR_NAME, EMAIL, C.COURSE_ID, C.NAME, DESCRIPTION, START_DATE, END_DATE
  18. FROM TUTORS T LEFT OUTER JOIN ADDRESSES A ON T.ADDR_ID=A.ADDR_ID
  19. LEFT OUTER JOIN COURSES C ON T.TUTOR_ID=C.TUTOR_ID
  20. WHERE T.TUTOR_ID=#{tutorId}
  21. </select>

choose 该方式适用于多个条件中选择一个满足条件的来生成sql

  1. <select id="searchCourses" parameterType="hashmap" resultMap="CourseResult">
  2. SELECT * FROM COURSES
  3. <choose>
  4. <when test="searchBy == 'Tutor'">
  5. WHERE TUTOR_ID= #{tutorId}
  6. </when>
  7. <when test="searchBy == 'CourseName'">
  8. WHERE name like #{courseName}
  9. </when>
  10. <otherwise>
  11. WHERE TUTOR start_date &gt;= now()
  12. </otherwise>
  13. </choose>
  14. </select>

where 适用于从多个条件中选择所有满足条件的来构成condtions,

符号 小于 小于等于 大于 大于等于 单引号 双引号
原符号 < <= > >= & ' "
替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;
  1. <select id="searchCourses" parameterType="hashmap" resultMap="CourseResult">
  2. SELECT * FROM COURSES
  3. <where>
  4. <if test=" tutorId != null ">
  5. TUTOR_ID= #{tutorId}
  6. </if>
  7. <if test="courseName != null">
  8. AND name like #{courseName}
  9. </if>
  10. <if test="startDate != null">
  11. AND start_date &gt;= #{startDate} <!--大于等于 开始时间-->
  12. </if>
  13. <if test="endDate != null">
  14. AND end_date &lt;= #{endDate} <!--小于等于 结束时间-->
  15. </if>
  16. </where>
  17. </select>

foreach

  1. <select id="selectUserByListId" parameterType="com.ys.vo.UserVo" resultType="com.ys.po.User">
  2. select * from user
  3. <where>
  4. <!--
  5. collection:指定输入对象中的集合属性.该属性的值有三种:list,array,map,根据传入的集合类型而设定该值。
  6. item:每次遍历生成的对象
  7. index:当前迭代的次数
  8. open:开始遍历时的拼接字符串
  9. close:结束时拼接的字符串
  10. separator:遍历对象之间需要拼接的字符串
  11. select * from user where 1=1 and id in (1,2,3)
  12. -->
  13. <foreach collection="list" item="id" open="(" separator="," close=")">
  14. #{id}
  15. </foreach>
  16. </where>
  17. </select>

select * from user where id=1 or id=2 or id=3

  1. <select id="selectUserByListId" parameterType="com.ys.vo.UserVo" resultType="com.ys.po.User">
  2. select * from user
  3. <where>
  4. <foreach collection="list" item="id" open="and (" close=")" separator="or">
  5. id=#{id}
  6. </foreach>
  7. </where>
  8. </select>

< sql >标签
该标签主要定义复用的sql语句片段,在执行的sql语句标签直接引用即可。可以提高编码效率、简化代码和提高可读性。

需要配置id熟悉,表示该sql片段的唯一标识。

引用:通过<include refid=" " / >标签引用,refid的值就是< sql>的id属性的值。

  1. <sql id="Base_Column_List">
  2. id, question, answer
  3. </sql>
  4. <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
  5. select
  6. <include refid="Base_Column_List" />
  7. from java
  8. where id = #{id,jdbcType=BIGINT}
  9. </select>

<set> : 主要用来替换sql语句中的set字段,一般在update中使用。

  1. <update>
  2. update user
  3. <set>
  4. <if test="name != null and name.length()>0">name = #{name},</if>
  5. <if test="age != null and age .length()>0">age = #{age },</if>
  6. </set>
  7. where id = #{id}
  8. </update> 

批量更新,一次执行多条SQL

  1. <update>
  2. <foreach collection="list" item="item" index="index" separator=";">
  3. update user
  4. <set>
  5. <if test="name != null and name.length()>0">name = #{name},</if>
  6. <if test="age != null and age .length()>0">age = #{age },</if>
  7. </set>
  8. <where>
  9. <if test="id != null and id != ''">
  10. AND id = #{id,jdbcType=VARCHAR}
  11. </if>
  12. <if test="userName != null and userName != ''">
  13. <bind name="bindUserName" value="'%' + userName + '%'" />
  14. AND UserName like #{bindUserName}
  15. </if>
  16. <if test="status != null">
  17. AND Status = #{status,jdbcType=INTEGER}
  18. </if>
  19. </where>
  20. </foreach>
  21. </update>

<trim> : 是一个格式化的标记,可以完成set或者是where标记的功能。

  1. select * from user
  2. <trim prefix="WHERE" prefixoverride="AND |OR">
  3. <if test="name != null and name.length()>0"> AND name=#{name}</if>
  4. <if test="age != null and age.length()>0"> AND age=#{age}</if>
  5. </trim>
  6.  
  7. 假如说nameage的值都不为null的话打印的SQL为:select * from user where name = xx and age = xx
  8. where的后面是不存在第一个and的,上面两个属性的意思如下:
  9.   prefix:前缀      
  10.   prefixoverride:去掉第一个and或者是or
  1. update user
  2. <trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
  3. <if test="name != null and name.length()>0"> name=#{name} , </if>
  4. <if test="age!= null and age.length()>0"> age=#{age} , </if>
  5. </trim>
  6. 假如说nameage的值都不为null的话打印的SQL为:update user set name=‘xx , age=‘xx where id=‘x
  7.  
  8. age='xx’的后面不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:
  9.    suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)
  10.    suffix:后缀

choose & foreach list 有一个值,条件=,有多个值 in

  1. <update id="updateStatus" parameterType="java.util.ArrayList" >
  2. update User
  3. set Status = 1,UpdateTime=(select GETDATE())
  4. <choose>
  5. <when test="idList != null and idList.size==1">
  6. WHERE Id= #{id,jdbcType=VARCHAR}
  7. </when>
  8. <when test="idList != null and idList.size>1">
  9. WHERE Id in
  10. <foreach collection="idList" item="id" open="(" close=")" separator=",">
  11. <if test="id != null and id != '' ">
  12. #{id,jdbcType=VARCHAR}
  13. </if>
  14. </foreach>
  15. </when>
  16. <otherwise>
  17. WHERE 1=0
  18. </otherwise>
  19. </choose>
  20. </update>

MyBatis Mapper.XML 标签使用说明的更多相关文章

  1. MyBatis Mapper XML 详解

    MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...

  2. MyBatis Mapper.xml文件中 $和#的区别

    MyBatis Mapper.xml文件中 $和#的区别   网上有很多,总之,简略的写一下,作为备忘.例子中假设参数名为 paramName,类型为 VARCHAR . 1.优先使用#{paramN ...

  3. mybatis mapper.xml 配置文件问题(有的错误xml是不报的) 导致服务无法启动 。

    转载自 开源编程 一舟mybatsi xml编译报错,tomcat启动一直循环,导致内存溢出,启动失败 mapper.xml怎么知道有没有编译错误,哪个位置有错误 这应该是mybatis的一个bug, ...

  4. mybatis mapper xml文件的导入方式和查询方式

    mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis  mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFact ...

  5. mybatis Mapper.xml和Mapper.java

    mybatis Mapper.xml和Mapper.java 通过Mapper.xml和Mapper.java来实现mybatis.环境和入门的一样的.关键:Mapper.xml + Mapper.j ...

  6. 自动回复之实现随机回复与常用Mapper XML标签

    [常用Mapper XML标签] 1.基本的:select.insert.update 等 2.可读性.方便拼SQL:where.set.trim 3.减少重复:sql 4.逻辑控制:if.choos ...

  7. mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?

    mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...

  8. JAVA - Intellij IDEA 中去掉mybatis Mapper.xml背景色

    JAVA - Intellij IDEA 中去掉mybatis Mapper.xml背景色 1:现在公司中使用mybatis的频率非常高,一般都会用MBG来生成基础的代码文件.在intellij中查看 ...

  9. MyBatis——Mapper XML 文件

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...

  10. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

随机推荐

  1. 题解 CF690C2

    题目大意: 给你一棵树,求一下直径 题目分析: emm,怎么说吧,就是树的直径的裸板子. 可能有人不大理解,明明是图,你为什么要说是给定一棵树. 大家可以自行验证一下,满足如下两个性质的是否是一棵树: ...

  2. 07-Shell运算符

    1.算术运算符 1.1 expr命令 expr 是 evaluate expressions 的缩写,译为"求值表达式".Shell expr 是一个功能强大,并且比较复杂的命令, ...

  3. Java八股面试题整理(1)

    1.为什么Java代码可以实现一次编写,到处运行? 参考答案 JVM(Java虚拟机)是Java跨平台的关键. 在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class).在 ...

  4. Chrome扩展的核心:manifest 文件(中)

    大家好,我是 dom 哥.我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 . 在上一篇中已经完成了 Chrome 扩展的雏形,本篇接着介绍 manifest 中的可选字段,完 ...

  5. FolkMQ 内存型消息中间件,v1.0.21 发布

    简介 采用 "多路复用" + "内存运行" + "快照持久化" + "Broker 集群模式"(可选)+ 基于 Sock ...

  6. Vue重用组件

    1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...

  7. 实现 Raft 协议

    文章地址 简介 Raft 是一个分布式共识算法,用于保证所有机器对一件事达成一个看法.本文用于记录实现 Raft 选举和日志复制的代码细节. 选举 节点启动时首先是跟随者状态,如果到达选举超时时间就尝 ...

  8. SLR(1)分析法

    由于LR(0)的能力实在是太弱了.例如: I = { X=>α·bβ, A=>α·, B=>α· } 这时候就存在两个冲突. 1.移进和规约的冲突: 2.规约和规约的冲突. SLR( ...

  9. 华企盾DSC在苹果电脑上申请审批没有通知

    由于系统通知这里没有允许DSC通知,开启后即可.系统偏好设置-通知与专注模式-通知 ​

  10. GPT Zero 是什么?

    from https://openaigptguide.com/gptzero/ 在人工智能技术飞速发展的今天,人们对于文字内容的准确性和可信度要求越来越高.例如在学术研究领域,防止抄袭和造假是非常重 ...