Mapper映射文件

映射文件的Mapper标签包含标签

1、CDUS增删改查

2、参数处理

(1)直接传入参数

  • 单个参数
//传入当个参数
public Employee getEmployeeById(int id);
  • 多个参数

多个参数会被封装成一个Map对象,但是:map里的键是param1和param2...而不是id和lastName等等

//传入多个参数
//太过麻烦一般不用,用命名参数取代
public Employee getEmployeeByNameId(int id,String lastName);
  • 命名参数(@Param注解)

常用

//命名参数
//明确指出哪些参数的键名是什么
public Employee getEmployeeByNameById(@Param("id")int id,@Param("lastName")String lastName);

(2)传入POJO和Map

POJO概念:我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。

如果多个参数正好是我们业务逻辑的数据逻辑,我们可以直接传入POJO

​ #{属性名}:取出传入的pojo的属性值

但如果多个参数不是我们业务逻辑的数据逻辑,我们可以直接传入一个HashMap<String,Object>

​ 注意点:键一定是String

如果传入多个参数,且经常需要使用,推荐编写一个TO(Tranfer Object)来达到目的

​ 比如:Page{int index;int size}

特殊思考

源码分析

(3)${}取值和#{}取值的区别

  • ${}:直接在sql语句中注入内容,有一定安全问题

  • {}:类似于JDBC的?占位符,

  • 虽然${}有安全问题,但是有一些地方JDBC是不能使用占位符的,这个时候就需要我们用到${}

    比如:我们有很多薪水表,每个都以年份为标注,这个时候我们的#{}就起不了作用了,就需要用${}

    insert into ${year}_salary (last_name,gender,email) values (#{lastName},#{gender},#{email});

(4)#{}规定参数规则

  • javaType、jdbcType、mode、numericScale、 resultMap、typeHandler、jdbcTypeName、expression

  • 一般使用 jdbcType,

    如:当接入数据库为Oracle时,我们传入的数据时null时,JDBC会转成OTHER,但Oracle是不能识别OTHER的,所以我们需要对传入的数据进行处理,#{email,jdbcType=NULL};强调当传入的参数为null时,JDBC传出的参数类型也为nul

  • 在全局配置的setting中也可以配置,

    <settings>
    <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>

3、select元素

Select元素来定义查询操作。

  • Id:唯一标识符。用来引用这条语句,需要和接口的方法名一致
  • parameterType:参数类型。可以不传,MyBatis会根据TypeHandler自动推断,复杂的数据类型还是需要传入
  • resultType:返回值类型。别名或者全类名,如果返回的是集合,定义集合中元素的类型。不能和resultMap同时使用

4、resultMap

数据库中的字段和bean类中的属性不一致解决方法?

1、给字段起别名

2、在全局配置文件中的setting板块开启自动驼峰命名法

3、就是使用resultMap

解决字段和属性不一致问题

sql影射文件

<resultMap id="EmployeeMap" type="Employee">
<!--id为主键:定义id为主键在后台会有优化-->
<id column="id" property="id"/>
<!--result定义普通封装-->
<result column="last_name" property="lastName"/>
<!--下面这些其实可以不写,但一般我们需要把全部都写下来-->
<result column="gender" property="gender"/>
<result column="email" property="email"/>
</resultMap>

mybatis-4-Mapper映射文件的更多相关文章

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

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

  2. mybatis的mapper映射文件

    1概述1.1应用架构     mybatis框架用于支持对关系数据库的操作,该体系的应用架构如下图所示: 在mybatis框架体系中,主要的组件是:SqlSessionFactoryBean和Mapp ...

  3. xml 文件不给提示(以mybatis 的 mapper映射文件为例)

    在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ...

  4. Mybatis将mapper映射文件配置到recources下

    关于为什么要将Mybatis的mappers.xml文件配置到resources目录下的粗浅看法: (1).使文件目录更加清晰.resources文件目录下通常为配置文件,所以将Mappers.xml ...

  5. Mybatis学习系列(二)Mapper映射文件

    Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<upd ...

  6. MyBatis 体系结构、根配置文件、Mapper映射文件

    一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...

  7. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  8. 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete

    上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置>简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介 ...

  9. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  10. IDEA maven项目下测试mybatis例子,使用mappper class或package引入mapper映射文件,总是报错Invalid bound statement(所有配置完全正确)

    困扰几个小时,终于查到解决办法及原因(可以直接到最后看解决方案) 环境就是用IDEA搭建的maven项目,主要jar包引入配置如下 <dependencies> <dependenc ...

随机推荐

  1. 视频处理器为电池供电的设计提供4K视频编码

    视频处理器为电池供电的设计提供4K视频编码 Video processor enables 4K video coding for battery-powered designs OmniVision ...

  2. algorithm头文件下的常用函数

    algorithm头文件常用高效函数 max() max(a, b)返回a和b中的最大值,参数必须是两个(可以是浮点型). 1 #include <iostream> 2 #include ...

  3. Java 将PPT幻灯片转为HTML

    本文以Java程序代码为例展示如何通过格式转换的方式将PPT幻灯片文档转为HTML文件.这里的PPT幻灯片可以是.ppt/.pptx/.pps/.ppsx/.potx等格式. 代码实现思路:[加载PP ...

  4. 【SQLite】教程03-SQLite语法

    注释: sqlite>.help -- 这是一个简单的注释 SQLite ANALYZE 语句: 收集有关表和索引的统计信息,并将收集的信息存储在数据库的内部表中 ANALYZE; or ANA ...

  5. Git操作文档

    Git 操作文档 Git 是一个十分流行的版本控制系统,Git 和 SVN 区别在于,SVN使用增量文件系统,存储每次提交之间的差异.而 git 使用全量文件系统,存储每次提交的文件的全部内容(sna ...

  6. 有了Java8的“+”真的可以不要StringBuilder了吗

    最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,"+"会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要 ...

  7. Android系统编程入门系列之应用初始化Application

    在上一篇文章中我们了解到Android系统启动应用的时候,会首先加载AndroidManifest.xml清单文件中的一系列信息,在清单文件中如果不指定<application></ ...

  8. 『无为则无心』Python基础 — 10、Python字符串的格式化输出

    目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...

  9. 4.2 万 Star!开发 Web 和移动端应用的全栈平台

    [导语]:Meteor 是一个用 JS 开发现代 Web 应用程序的平台.它是开源的,在 GitHub 上有 4.2 万 Star. Meteor 是什么? 官方文档是这样描述 Meteor 的:Me ...

  10. 重新整理 .net core 实践篇————熔断与限流[三十五]

    前言 简单整理一下熔断与限流,跟上一节息息相关. 正文 polly 的策略类型分为两类: 被动策略(异常处理.结果处理) 主动策略(超时处理.断路器.舱壁隔离.缓存) 熔断和限流通过下面主动策略来实现 ...