目录


select、update、delete、insert

设置参数类型以及取值

基本数据类型

对象数据类型

map数据类型

#{  } 和 ${  } 的区别

ResultMap

Auto-mapping

cache


select、update、delete、insert

  这分别对应有四个标签<select>、<update>、<delete>、<insert>,在绑定sql语句的时候,可以有很多的属性,属性可以见名知意,具体如下:

<select
id="selectPerson"
parameterType="int"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY"> <insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout="20"> <update
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20"> <delete
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">

  对于<select>、<insert>、<update>、<delete>,SqlSession分别有两个方法与之对应:

<select>
int SqlSession.select(String statement)
int SqlSession.select(String statement, Object parameter) <insert>
int SqlSession.insert(String statement)
int SqlSession.insert(String statement, Object parameter) <update>
int SqlSession.update(String statement)
int SqlSession.update(String statement, Object parameter) <delete>
int SqlSession.delete(String statement)
int SqlSession.delete(String statement, Object parameter)

  

设置参数类型以及取值

  设置参数类型,是通过设置parameterType的值,设置的类型不同,sql中取值的方式也有所区别。

  parameterType属性可以有下面几种取值:

  1、基本数据类型

    比如int、double,其实应该写为Integer、Double,但是有自动装箱功能,所以可以直接写基本数据类型。

    sql取值的方式:对于这种的参数,在接收传入的参数值时,可以使用#{index}来获取,注意,index从0开始计数,如果只有一个参数,那么index可以写成任意名称。

<mapper namespace="cn.ganlixin.mapper.PersonMapper">

	<select id="selectPersonById1" parameterType="int" resultType="cn.ganlixin.pojo.Person">
select * from person where id=#{0}
</select> <!-- 如果只有参数,可以将#{0} 写为任意名称 -->
<select id="selectPersonById2" parameterType="int" resultType="cn.ganlixin.pojo.Person">
select * from person where id=#{id}
</select>
</mapper>

  

  2、Object类型

    可以写实体类(如果没有配置alias,需要写全路径),比如cn.ganlixin.pojo.Person类。

    sql取值的方式:对于对象这种类型,可以使用#{property}去访问实体类中的property属性值,比如#{age},可以获取Person的age属性值。

<mapper namespace="cn.ganlixin.mapper.PersonMapper">
<select id="selectPersonByName"
parameterType="cn.ganlixin.pojo.Person"
resultType="cn.ganlixin.pojo.Person"> select * from person where name=#{name}
<!-- 相当于取Person.name的值 -->
</select>
</mapper>

    简单测试:

String method = "cn.ganlixin.mapper.PersonMapper.selectPersonByName";
Person person = new Person();
person.setName("aaaa");
person = (Person) session.selectOne(method, person);

  

  3、map类型

    将要传入一个数据,封装到一个map中,然后再传入即可。

    sql取值的方式:对于map的取值,和object的取值类似,使用#{key}即可获取map中key对应value。

<mapper namespace="cn.ganlixin.mapper.PersonMapper">
<select id="selectPersonByName" parameterType="map" resultType="cn.ganlixin.pojo.Person">
select * from person where name=#{name}
<!-- 相当于取map.get(name)的值 -->
</select>
</mapper>

    简单测试:

String method = "cn.ganlixin.mapper.PersonMapper.selectPersonByName";
Map<String, String> data = new HashMap<>();
data.put("name", "aaaa");
Person person = (Person) session.selectOne(method, data);

  

  4、#{  } 和 ${  } 的区别

  需要注意的是,sql中取值可以使用#{  } 和 ${  }两种方式,区别在于:

  1、#{  } 会使用预处理操作,而${  }不会进行预处理操作。

  2、${  } 只是很简单的使用字符串拼接

select * from person where name='${name}'
如果上面不适用引号将${name}括起来,那么就会将${name}的值当做字段名,而不是字段值 select * from person where name=${0}
上面这条sql语句,并不会使用传入的第1个参数,而是真的name=0

  

ResultMap

  关于resultMap的使用,可以查看:

  mybatis 使用resultMap实现表间关联

Auto-mapping

  关于auto-mapping的使用,可以查看:

  mybatis 使用auto mapping原理实现表间关联

cache

  mybatis中的缓存有两种,一级缓存和二级缓存。

  可以查看:mybatis 使用缓存策略

  

mybatis mapper映射文件全解的更多相关文章

  1. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  2. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  3. Mybatis Mapper 映射文件(xxxMapper.xml)

    什么是 Mapper 映射文件 Mapper 映射文件是 Mybatis 用于实现 ORM 映射规则的配置文件,Mybatis 通过映射文件可将数据库查询结构映射为 Java 对象. 创建 Mappe ...

  4. 框架学习系列 mybatis mapper映射文件之输出映射

    1: mapper映射文件输出映射(输入类型) 2:resultType的使用 3:resultMap的使用 3:总结&下节预告 本文是<凯哥陪你学系列-框架学习之mybatis框架学习 ...

  5. 笔记:MyBatis Mapper XML文件详解 - 映射和参数

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

  6. 笔记:MyBatis Mapper XML文件详解 - Cache

    缓存(Cache) 从数据库中加载的数据缓存到内存中,是很多应用程序为了提高性能而采取的一贯做法.MyBatis对通过映射的SELECT语句加载的查询结果提供了内建的缓存支持.默认情况下,启用一级缓存 ...

  7. 笔记:MyBatis Mapper XML文件详解 - Result Maps

    Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许 ...

  8. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  9. Mybatis学习(三)————— 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

随机推荐

  1. Mysql中Count函数的正确使用

    备注: 直接使用Count(*)或Count(1)这些大家基本都会,主要是Count函数还可以加满足表达式的统计:express 关于Count函数表达式的用法,目前个人只知道2种: a:使用:Cou ...

  2. 对多字段进行去重 ( Linq 方式 )

    优质参考资料:http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html

  3. .NET: 谈谈C#中的扩展方法

    扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的 ...

  4. .NET Http请求

    声明:本代码只是我使用的网络请求方式的封装,大家如果有其他的可以一起讨论讨论.    本代码可以在.NET 与.NET CORE的平台下无须做任何改动(除非手动加一些必要的引用,resharper会有 ...

  5. .NET WebAPI 利用特性捕捉异常

    声明:本方式及代码只使用与.NET Web API. 先创建类继承ExceptionFilterAttribute类型并复写OnException方法. 代码如下: using System; usi ...

  6. [PHP] strpos stripos strrpos strripos的区别

    stripos — 查找字符串首次出现的位置(不区分大小写),应使用 === 运算符来测试此函数的返回值 strpos 左边开始字符出现的第一个位置,区分大小写stripos 和上面一样,不区分大小写 ...

  7. .NET下对Web.config与App.Config的增删改操作的代码

    把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...

  8. centos服务器如何监控访问ip,并将非法ip通过防火墙禁用

    centos服务器如何监控访问ip,并将非法ip通过防火墙禁用 上周给朋友帮忙,上架了一款小游戏(年年有鱼),项目刚一上线,就遇到了ddos攻击,阿里云连续给出了6次ddos预警提示,服务器一度处于黑 ...

  9. Git - git clone - 将远端仓库克隆拷贝到本地

    索引: 目录索引 参看代码 GitHub: git.txt 一.示例: git clone https://github.com/liumeng0403/lm.solution.git 二.说明: 1 ...

  10. dotNet core 应用部署至 centos(超详解附截图)

    文章来源:公众号-智能化IT系统. 需要安装的插件以及支撑架构 1.dotnetSDK dotnet 相关命令是属于 .NET Core command-line (CLI) 的一部分,Microso ...