MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。 对于所有的力量, SQL
映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会
发现映射文件节省了大约 95%的代码量。 MyBatis 的构建就是聚焦于 SQL 的,使其远离于
普通的方式。

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
 cache - 配置给定命名空间的缓存。
 cache-ref – 从其他命名空间引用缓存配置。
 resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
 sql – 可以重用的 SQL 块,也可以被其他语句引用。
 insert – 映射插入语句
 update – 映射更新语句
 delete – 映射删除语句
 select – 映射查询语句
 
  1. select
  2. <select id=”selectPerson parameterType=”int resultType=”hashmap”>
  3. SELECT * FROM PERSON WHERE ID = #{id}
  4. </select>
这个语句被称作 selectPerson,使用一个 int (或 Integer)类型的参数,并返回一个 HashMap类型的对象,其中的键是列名,值是列对应的值
----------------------select 元素:----------------
  1. <select
  2. id=”selectPerson” <!--在命名空间中唯一的标识符,可以被用来引用这条语句。-->
  3. parameterType=”int” <!--将会传入这条语句的参数类的完全限定名或别名。-->
  4. parameterMap=”deprecated”
  5. resultType=”hashmap” <!--返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集
  6. 合本身。使用 resultType 或 resultMap,但不能同时使用>
  7. resultMap=”personResultMap” <!--命名引用外部的 resultMap。返回 map 是 MyBatis 最具力量的特性,对其有一个很好的理解的话,许
  8. 多复杂映射的情形就能被解决了。使用 resultMap 或 resultType,但不能同时使用。-->
  9. flushCache=”false” <!--将其设置为 true, 无论语句什么时候被调用,都会导致缓存被清空。默认值: false。-->
  10. useCache=”true” <!--将其设置为 true,将会导致本条语句的结果被缓存。默认值: true。>
  11. timeout=”10000” <!--这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。
  12. 默认不设置(驱动自行处理)。-->
  13. fetchSize=”256” <!--这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)。-->
  14. statementType=”PREPARED” <!--STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement,
  15. PreparedStatement 或 CallableStatement。默认值: PREPARED。-->
  16. resultSetType=”FORWARD_ONLY” <!--FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。
  17. 默认是不设置(驱动自行处理)。-->
  18. >
insert, update, delete
数据修改语句 insert, update 和 delete 在它们的实现中非常相似:

  1. <insert id="insertAuthor" parameterType="domain.blog.Author" flushCache="true"
  2. statementType="PREPARED" keyProperty="" useGeneratedKeys="" timeout="20000">
支持自动生成主键的数据库可以使用这个
  1. <insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys=”true” keyProperty=”id”>
  2. insert into Author (username,password,email,bio)
  3. values (#{username},#{password},#{email},#{bio})
  4. </insert>
不支持的可以使用这个
  1. <insert id="insertAuthor" parameterType="domain.blog.Author">
  2. <selectKey keyProperty="id" resultType="int" order="BEFORE">
  3.       select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
  4. </selectKey>
  5. insert into Author(id, username, password, email,bio, favourite_section)
  6. values(#{id}, #{username}, #{password}, #{email}, #{bio},#{favouriteSection,jdbcType=VARCHAR})
  7. </insert>
属性描述:
keyProperty:selectKey 语句结果应该被设置的目标属性
resultType    :结果的类型。 MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。
order    :这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果

设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

statementType  :  MyBatis 支持 STATEMENT, PREPARED 和CALLABLE 语句的映射类型,
                分别代表 PreparedStatement 和CallableStatement 类型。
sql
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。比如:

  1. <sql id=”userColumns”> id,username,password </sql>

这个 SQL 片段可以被包含在其他语句中,例如:

  1. <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
  2. select <include refid=”userColumns”/>from some_table where id = #{id}
  3. </select>
字符串替换
默认情况下,使用#{}格式的语法会导致 MyBatis 创建预处理语句属性并以它为背景设
置安全的值(比如?)。这样做很安全,很迅速, 也是首选的做法,有时你只是想直接在 SQL
语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里 MyBatis 不会修改或转义字符串。
重要: 接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会
         导致潜在的 SQL 注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
resultMap
----------------------------------将返回的结果映射到Map
  1. <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
  2.     select id, username, hashedPassword from some_table where id = #{id}
  3. </select>
----------------------------------将返回的结果映射到Bean
  1. <select id=”selectUsers” parameterType=”int” resultType=”com.someapp.model.User”>
  2. select id, username, hashedPasswordfrom some_tablewhere id = #{id}
  3. </select>
这个可以输入类的别名,而不用输入类的全路径
  1. <!-- 在XML配置文件中-->
  2. <typeAlias type=”com.someapp.model.User” alias=”User”/>
  3. <!-- 在SQL映射的XML文件中-->
  4. <select id=”selectUsers” parameterType=”int” resultType=”User”>
  5. select id, username, hashedPassword from some_table where id = #{id}
  6. </select>
 
如果列名没有精确匹配,你可以在列名上使用 select 字句的别名(一个
标准的 SQL 特性)来匹配标签
  1. <select id=”selectUsers” parameterType=”int” resultType= User>
  2. select user_id as “id”, user_name as “userName”, hashed_password as “hashedPassword”
  3. from some_table where id = #{id}
  4. </select>
》》》解决列名不匹配的另外一种方式
  1. <resultMap id="userResultMap" type="User">
  2. <id property="id" column="user_id" />
  3. <result property="username" column="user_name"/>
  4. <result property="password" column="hashed_password"/>
  5. </resultMap>

引用它的语句使用 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如:

  1. <select id=”selectUsers” parameterType=”int” resultMap=”userResultMap”>
  2. select user_id, user_name, hashed_password from some_table where id = #{id}
  3. </select>

SQL 映射的 XML 文件的更多相关文章

  1. 五、SQL映射的XML文件

    MyBatis真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL映射的XML文件是相当的简单.当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大约95%的代码 ...

  2. MyBatis学习(四)XML配置文件之SQL映射的XML文件

    SQL映射文件常用的元素: 1.select 查询语句是MyBatis最常用的语句之一. 执行简单查询的select元素是非常简单的: <select id="selectUser&q ...

  3. SpringBoot项目里,让TKmybatis支持可以手写sql的Mapper.xml文件

    SpringBoot项目通常配合TKMybatis或MyBatis-Plus来做数据的持久化. 对于单表的增删改查,TKMybatis优雅简洁,无需像传统mybatis那样在mapper.xml文件里 ...

  4. IDEA Mybatis 找不到映射器xml文件

    用IDEA新建了一个测试MyBatis工程,工程目录如下 其中config是MyBatis的配置文件,内容如下 <?xml version="1.0" encoding=&q ...

  5. mybatis 找不到映射器xml文件 (idea)

    原因是: idea不会编译src的java目录的xml文件 所以解决思路就是:将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹 具体操作方法就是:配置maven的 ...

  6. Could not find resource——mybatis 找不到映射器xml文件

    今天用IDEA写Mybatis的时候,测试报了如图所示的错,恶心死我了,后来解决了,总结一下,防止下回跳坑,当然,也是做一个分享,如果有朋友遇到这个错,希望有所帮助 Error parsing SQL ...

  7. ms sql server读取xml文件存储过程-sp_xml_preparedocument

    最近要在存储过程中读取xml中节点的值,然后进行sql操作: 要使用到的系统存储过程如下:sp_xml_preparedocument create procedure [dbo].[pro_Test ...

  8. 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  9. Mybatis 3.1中 Mapper XML 文件 的学习详解(转载)

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

随机推荐

  1. Redis学习笔记五:独立功能之事务

    Redis 事务提供了一种将多个命令请求打包,然后一次性.按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断,会将事务中的所以命令都执行完毕才去处理其他客户端的命令请求. 事务的实现 事务 ...

  2. 如何把其他用户创建的表,导入到自己数据库是,所有者owner改变为自己创建的用户

     1. 导出用户 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp2. 导入用户 impdp user2/pass2 directory=d ...

  3. Android快速开发系列 10个常用工具类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...

  4. 关于cin,getchar(),scanf()的注意事项(转)

      问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些 ...

  5. angularjs入门基础一

    app.controller('firstController',function($scope,$rootScope){ $scope.name='张三'; $rootScope.age='30'; ...

  6. jquery版瀑布流

    一个月前用jquery实现了瀑布流效果,看着当时的代码有点难过……今天抽时间稍微修改了一下.额,现在看起来不是那么难受了,就来和大家分享一下.废话不多说,开始正题~ 一.演示效果 二.html代码 & ...

  7. BZOJ 2084: [Poi2010]Antisymmetry

    Sol Manacher. \(O(n)\) Manacher很简单啊.改一改转移就可以了. 然后我WA了.一开始天真的认为id只会是奇数,然后就GG. 一组 Hack 数据 3 1 0 0 然后就跳 ...

  8. 13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  9. [CQOI2011]动态逆序对

    (又是一道树套树……自己真是玩疯了……) (题意略) 从网上也看过题解,好像解法很多……比如CDQ+树状数组,树状数组套主席树,树状数组套平衡树……我用的是树状数组套splay. (我会说是因为我不会 ...

  10. Android蓝牙连接以及数据接收发送

    1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...