• insert – 映射插入语句。
  • update – 映射更新语句。
  • delete – 映射删除语句。
  • select – 映射查询语句
  • sql – 可被其它语句引用的可重用语句块
  • resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素
  • selectKey和include

Select

简单例子

<select id="selectPerson" parameterType="int" resultType="hashmap">SELECT * FROM PERSON WHERE ID = #{id}
</select>

select 标签的属性

<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"timeout="10"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">

对关键或者常用的属性解释

id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType

将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。

resultType 期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
resultMap 对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。

 insert ,update,delete的属性基本相同,但是有几个属性需要注意一下。(下面例子也会讲到用法)

useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。
keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。
keyColumn (仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。

下面是 insert,update 和 delete 语句的示例:

<insert id="insertAuthor">insert into Author (id,username,password,email,bio)values (#{id},#{username},#{password},#{email},#{bio})
</insert><update id="updateAuthor">update Author setusername = #{username},password = #{password},email = #{email},bio = #{bio}where id = #{id}
</update><delete id="deleteAuthor">delete from Author where id = #{id}
</delete>

如前所述,插入语句的配置规则更加丰富,在插入语句里面有一些额外的属性和子元素用来处理主键的生成,并且提供了多种生成方式。

首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置为目标属性就 OK 了。例如,如果上面的 Author 表已经在 id 列上使用了自动生成,那么语句可以修改为:

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username,password,email,bio)values (#{username},#{password},#{email},#{bio})
</insert>

如果你的数据库还支持多行插入, 你也可以传入一个 Author 数组或集合,并返回自动生成的主键。

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username, password, email, bio) values<foreach item="item" collection="list" separator=",">(#{item.username}, #{item.password}, #{item.email}, #{item.bio})</foreach>
</insert>

对于不支持自动生成主键列的数据库和可能不支持自动生成主键的 JDBC 驱动,MyBatis 有另外一种方法来生成主键。

这里有一个简单(也很傻)的示例,它可以生成一个随机 ID(不建议实际使用,这里只是为了展示 MyBatis 处理问题的灵活性和宽容度):

<insert id="insertAuthor"><selectKey keyProperty="id" resultType="int" order="BEFORE">select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1</selectKey>insert into Author(id, username, password, email,bio, favourite_section)values(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

在上面的示例中,首先会运行 selectKey 元素中的语句,并设置 Author 的 id,然后才会调用插入语句。这样就实现了数据库自动生成主键类似的行为,同时保持了 Java 代码的简洁。

selectKey 元素描述如下:

<selectKeykeyProperty="id"resultType="int"order="BEFORE"statementType="PREPARED">
selectKey 元素的属性
属性 描述
keyProperty selectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称。
keyColumn 返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。
resultType 结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map。
order 可以设置为 BEFOREAFTER。如果设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。
statementType 和前面一样,MyBatis 支持 STATEMENTPREPAREDCALLABLE 类型的映射语句,分别代表 Statement, PreparedStatementCallableStatement 类型。

sql

这个元素可以用来定义可重用的 SQL 代码片段,以便在其它语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。比如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个 SQL 片段可以在其它语句中使用,例如:

<select id="selectUsers" resultType="map">select<include refid="userColumns"><property name="alias" value="t1"/></include>,<include refid="userColumns"><property name="alias" value="t2"/></include>from some_table t1cross join some_table t2
</select>

也可以在 include 元素的 refid 属性或内部语句中使用属性值,例如:

<sql id="sometable">${prefix}Table
</sql><sql id="someinclude">from<include refid="${include_target}"/>
</sql><select id="select" resultType="map">selectfield1, field2, field3<include refid="someinclude"><property name="prefix" value="Some"/><property name="include_target" value="sometable"/></include>
</select>

具体可以查看mybatis帮助文档https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#

resultmap标签简洁明了的大神理解https://blog.csdn.net/xiaoliangknow/article/details/119379092?spm=1001.2014.3001.5501

mybatis----xml常用的标签相关推荐

  1. Maven之pom.xml常用标签解析及镜像配置

    前言 Maven仅仅是个打包工具而已,个人觉得没有太大必要花费在打包工具上,这里就列举一下个人觉得会常用标签的使用就好了,原理啥的基本就不太会去深度了解了,如果以后遇到需了解Maven工作原理的工作的 ...

  2. web.xml 常用标签配置(转)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Web.xml作用: 每一个javaWeb工程都有一个web.xml配置文件,web.xml文件是用来初始化工程配置信息的 ...

  3. 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?

    传统jdbc方法中,在写组合的多表复杂sql语句时,需要去拼接sql语句,稍不注意少写一个空格或"",就会导致报错. 这个Mybatis动态sql的功能,就拥有有效的解决了这个问题 ...

  4. Mybatis - xml文件标签中写注释

    Mybatis - xml文件标签中写注释 1.错误场景. ( /* */ 注释 ) 在IDEA中的直接使用快捷键注释 Ctrl + Shift + / 注释. SELECT t.name, t.ag ...

  5. mybatis XML 中<if>、<choose>、<when>、<otherwise>等标签的使用?多条件查询该怎么处理?

    mybatis XML 中if.choose.when.otherwise等标签的使用 一般使用在多条查询,虽然也可以通过注解写,我比较菜,我不会. 一般多条查询怎么解决? 1.如果是单表间的多条件查 ...

  6. mybatis的常用标签用法总结

    一.背景 在我们的学习过程中,我们经常使用到mybatis,这里主要讲讲常用的标签,这样你也可以在面试官面前有底气了,那下面我们就来讲讲这些常用的标签,再说了标签不熟悉非常影响开发效率和质量.好了废话 ...

  7. AndroidManifest.xml常用标签属性介绍

    AndroidManifest.xml常用标签属性介绍 manifest 标签 uses-permission 标签 uses-sdk 标签 application 标签 activity 标签 in ...

  8. MyBatis-06 MyBatis XML方式之多个接口参数用法

    概述 模拟场景:根据用户ID和角色的enable状态来查询用户的所有角色 工程结构 多个基本类型参数的场景 1.UserRoleMapper接口增加接口方法 2.UserRoleMapper.xml配 ...

  9. MyBatis-04 MyBatis XML方式之insert元素

    insert概述 简单的insert用法 1. UserMapper中添加接口方法 2. UserMapper.xml 添加节点 3. 编写单元测试 使用JDCB方式返回主键自增的值 1.UserMa ...

  10. MyBatis-03 MyBatis XML方式之select元素

    概述 select用法 根据用户id查询用户信息 1.UserMapper接口中添加接口方法 2. UserMapper.xml中配置resultMap和select元素 查询全部的SysUser 添 ...

最新文章

  1. 如何将Dictionary绑定到Repeater?
  2. 洛谷 P3128 [USACO15DEC]最大流Max Flow
  3. 【NLP】ALBERT:更轻更快的NLP预训练模型
  4. JavaScript产生一个n到m之间的随机数
  5. EF 从sqlserver2008 迁移到 2005出现的BUG
  6. Linux的实际操作:文件目录类实用指令(压缩gzip tar -zcvf和解压缩gunzip tar -zxvf)
  7. 顶配12599元!三星Galaxy S22国行价格来了...
  8. OpenCV实践笔记(1)----图像显示
  9. camunda流程定义表无数据_【经验】数据可视化分析操作指南
  10. [RK3288][Android6.0] StageFright解码流程小结
  11. foreman架构的引入4-安装Foreman1.6.3架构(foreman与puppetmaster分离)
  12. 找工作,首先找的是老板和主管
  13. K8s部署Nexus3管理Docker镜像
  14. ARCore-普及篇
  15. 三维激光扫描在堆体体积测算中的应用
  16. PAT甲级准备历程及经验教训总结
  17. 2010十大杰出IT博客大赛50强之李晨光
  18. 你不知道的接近开关与PLC连接时如何判断用PNP还是NPN
  19. 06CookieSession-12. HttpSession的钝化和活化
  20. abb机器人指令手册_ABB机器人速度设置

热门文章

  1. mysql窗口函数的作用
  2. 机器学习笔记 预测的原则和风险
  3. CS_2023_01
  4. 基于vue实现sku商品选择
  5. Import Netscaler VPX10.5 to Hyper-V 2012R2
  6. 中国英语市场营销分析与竞争形势调研报告2022版
  7. Java的学习道路(一)
  8. 数据库查询之条件排序
  9. 华为Mate7-打开开发者选项
  10. GraphSAGE 源代码 -- 分图训练