SQL 映射的 XML 文件
MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。 对于所有的力量, SQL
映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会
发现映射文件节省了大约 95%的代码量。 MyBatis 的构建就是聚焦于 SQL 的,使其远离于
普通的方式。
cache - 配置给定命名空间的缓存。
cache-ref – 从其他命名空间引用缓存配置。
resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
- select
- <select id=”selectPerson” parameterType=”int” resultType=”hashmap”>
- SELECT * FROM PERSON WHERE ID = #{id}
- </select>
- <select
- id=”selectPerson” <!--在命名空间中唯一的标识符,可以被用来引用这条语句。-->
- parameterType=”int” <!--将会传入这条语句的参数类的完全限定名或别名。-->
- parameterMap=”deprecated”
- resultType=”hashmap” <!--返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集
- 合本身。使用 resultType 或 resultMap,但不能同时使用>
- resultMap=”personResultMap” <!--命名引用外部的 resultMap。返回 map 是 MyBatis 最具力量的特性,对其有一个很好的理解的话,许
- 多复杂映射的情形就能被解决了。使用 resultMap 或 resultType,但不能同时使用。-->
- flushCache=”false” <!--将其设置为 true, 无论语句什么时候被调用,都会导致缓存被清空。默认值: false。-->
- useCache=”true” <!--将其设置为 true,将会导致本条语句的结果被缓存。默认值: true。>
- timeout=”10000” <!--这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。
- 默认不设置(驱动自行处理)。-->
- fetchSize=”256” <!--这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)。-->
- statementType=”PREPARED” <!--STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement,
- PreparedStatement 或 CallableStatement。默认值: PREPARED。-->
- resultSetType=”FORWARD_ONLY” <!--FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。
- 默认是不设置(驱动自行处理)。-->
- >
数据修改语句 insert, update 和 delete 在它们的实现中非常相似:
- <insert id="insertAuthor" parameterType="domain.blog.Author" flushCache="true"
- statementType="PREPARED" keyProperty="" useGeneratedKeys="" timeout="20000">
- <insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys=”true” keyProperty=”id”>
- insert into Author (username,password,email,bio)
- values (#{username},#{password},#{email},#{bio})
- </insert>
- <insert id="insertAuthor" parameterType="domain.blog.Author">
- <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>
设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
- <sql id=”userColumns”> id,username,password </sql>
这个 SQL 片段可以被包含在其他语句中,例如:
- <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
- select <include refid=”userColumns”/>from some_table where id = #{id}
- </select>
默认情况下,使用#{}格式的语法会导致 MyBatis 创建预处理语句属性并以它为背景设
置安全的值(比如?)。这样做很安全,很迅速, 也是首选的做法,有时你只是想直接在 SQL
语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里 MyBatis 不会修改或转义字符串。
重要: 接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会
导致潜在的 SQL 注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
- <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
- select id, username, hashedPassword from some_table where id = #{id}
- </select>
- <select id=”selectUsers” parameterType=”int” resultType=”com.someapp.model.User”>
- select id, username, hashedPasswordfrom some_tablewhere id = #{id}
- </select>
- <!-- 在XML配置文件中-->
- <typeAlias type=”com.someapp.model.User” alias=”User”/>
- <!-- 在SQL映射的XML文件中-->
- <select id=”selectUsers” parameterType=”int” resultType=”User”>
- select id, username, hashedPassword from some_table where id = #{id}
- </select>
标准的 SQL 特性)来匹配标签
- <select id=”selectUsers” parameterType=”int” resultType=” User”>
- select user_id as “id”, user_name as “userName”, hashed_password as “hashedPassword”
- from some_table where id = #{id}
- </select>
- <resultMap id="userResultMap" type="User">
- <id property="id" column="user_id" />
- <result property="username" column="user_name"/>
- <result property="password" column="hashed_password"/>
- </resultMap>
引用它的语句使用 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如:
- <select id=”selectUsers” parameterType=”int” resultMap=”userResultMap”>
- select user_id, user_name, hashed_password from some_table where id = #{id}
- </select>
SQL 映射的 XML 文件的更多相关文章
- 五、SQL映射的XML文件
MyBatis真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL映射的XML文件是相当的简单.当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大约95%的代码 ...
- MyBatis学习(四)XML配置文件之SQL映射的XML文件
SQL映射文件常用的元素: 1.select 查询语句是MyBatis最常用的语句之一. 执行简单查询的select元素是非常简单的: <select id="selectUser&q ...
- SpringBoot项目里,让TKmybatis支持可以手写sql的Mapper.xml文件
SpringBoot项目通常配合TKMybatis或MyBatis-Plus来做数据的持久化. 对于单表的增删改查,TKMybatis优雅简洁,无需像传统mybatis那样在mapper.xml文件里 ...
- IDEA Mybatis 找不到映射器xml文件
用IDEA新建了一个测试MyBatis工程,工程目录如下 其中config是MyBatis的配置文件,内容如下 <?xml version="1.0" encoding=&q ...
- mybatis 找不到映射器xml文件 (idea)
原因是: idea不会编译src的java目录的xml文件 所以解决思路就是:将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹 具体操作方法就是:配置maven的 ...
- Could not find resource——mybatis 找不到映射器xml文件
今天用IDEA写Mybatis的时候,测试报了如图所示的错,恶心死我了,后来解决了,总结一下,防止下回跳坑,当然,也是做一个分享,如果有朋友遇到这个错,希望有所帮助 Error parsing SQL ...
- ms sql server读取xml文件存储过程-sp_xml_preparedocument
最近要在存储过程中读取xml中节点的值,然后进行sql操作: 要使用到的系统存储过程如下:sp_xml_preparedocument create procedure [dbo].[pro_Test ...
- 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
- Mybatis 3.1中 Mapper XML 文件 的学习详解(转载)
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
随机推荐
- Redis学习笔记五:独立功能之事务
Redis 事务提供了一种将多个命令请求打包,然后一次性.按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断,会将事务中的所以命令都执行完毕才去处理其他客户端的命令请求. 事务的实现 事务 ...
- 如何把其他用户创建的表,导入到自己数据库是,所有者owner改变为自己创建的用户
1. 导出用户 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp2. 导入用户 impdp user2/pass2 directory=d ...
- Android快速开发系列 10个常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
- 关于cin,getchar(),scanf()的注意事项(转)
问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些 ...
- angularjs入门基础一
app.controller('firstController',function($scope,$rootScope){ $scope.name='张三'; $rootScope.age='30'; ...
- jquery版瀑布流
一个月前用jquery实现了瀑布流效果,看着当时的代码有点难过……今天抽时间稍微修改了一下.额,现在看起来不是那么难受了,就来和大家分享一下.废话不多说,开始正题~ 一.演示效果 二.html代码 & ...
- BZOJ 2084: [Poi2010]Antisymmetry
Sol Manacher. \(O(n)\) Manacher很简单啊.改一改转移就可以了. 然后我WA了.一开始天真的认为id只会是奇数,然后就GG. 一组 Hack 数据 3 1 0 0 然后就跳 ...
- 13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- [CQOI2011]动态逆序对
(又是一道树套树……自己真是玩疯了……) (题意略) 从网上也看过题解,好像解法很多……比如CDQ+树状数组,树状数组套主席树,树状数组套平衡树……我用的是树状数组套splay. (我会说是因为我不会 ...
- Android蓝牙连接以及数据接收发送
1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...