mybatis的mapper映射配置文件详解

Posted currystar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis的mapper映射配置文件详解相关的知识,希望对你有一定的参考价值。

一、标签介绍

insert,update,delete,select,sql,resultMap

sql:可被其它语句引用的可重用语句块;

resultMap:确定实体类属性与表中字段对应关系;

二、namespace的作用

 在MyBatis中,Mapper中的namespace用于绑定Dao接口的,即面向接口编程。

它的好处在于当使用了namespace之后就可以不用写接口实现类,业务逻辑会直接通过这个绑定寻找到相对应的SQL语句进行对应的数据处理

三、parametetType属性

在<insert>,<update>,<select>,<delete>标签中,可以通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。

parameterType属性是可以省略的.MyBatis框架可以根据SqlSession接口中方法的参数

来判断输入参数的实际数据类型.

四、#{参数名}

1、含义、#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?

2、使用#{参数名},将参数的内容添加到sql语句中指定位置.

 如果当前sql语句中只有一个参数,此时参数名称可以随意定义

    但是,如果当前sql语句有多个参数,此时参数名称应该是与当前表关联[实体类的属性名]或者[Map集合关键字]

2.1:读取对象属性

2.2:读取map关键字

技术图片

 

 技术图片

3.#{}和${}区别

    在MyBatis中提供了两种方式读取参数的内容到SQL语句中,分别是

#{参数名} :实体类对象或则Map集合读取内容

${参数名} :实体类对象或则Map集合读取内容

 

 #{} : 采用预编译方式,可以防止SQL注入

 ${}:  采用直接赋值方式,无法阻止SQL注入攻击

 

 在大多数情况下,我们都是采用#{}读取参数内容.但是在一些特殊的情况下,我们还是需要使用${}读取参数的.

比如 有两张表,分别是emp_2017 和 emp_2018 .如果需要在查询语句中动态指定表名,就只能使用${}

<select>

      select *  from emp_${year}

<select>

再比如.需要动态的指定查询中的排序字段,此时也只能使用${}

<select>

       select  *  from dept order by ${name}

</select>

简单来说,在JDBC不支持使用占位符的地方,都可以使用${}

 

五、resultType属性

4.1、resultType属性存在<select>标签.负责将查询结果进行映射.

4.2、resultType属性可以指定一个基本类型也可以是一个实体类类型

4.3、使用resultType属性为实体类类型时,只有查询出来的列名和实体类中的属性名一致,才可以映射成功. 如果查询出来的列名和pojo中的属性名全部不一致,就不会创建实体类对象.但是只要查询出来的列名和实体类中的属性有一个一致,就会创建实体类对象

4.4、resultType属性无法与resultMap属性同时出现.

 

5、resultMap

MyBatis框架中是根据表中字段名到实体类定位同名属性的.如果出现了实体类属性名与表中字段名不一致的情况,则无法自动进行对应.此时可以使用resultMap来重新建立实体类与字段名之间对应关系.

 技术图片

六.sql标签

技术图片

 

以上是关于mybatis的mapper映射配置文件详解的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis 映射文件配置详解

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

mybatis 详解------通过mapper接口加载映射文件

mybatis 详解------通过mapper接口加载映射文件

MyBatis之Mapper XML 文件详解-缓存配置

MyBatis 输入映射配置详解