mybatis-4-Mapper映射文件
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映射文件的更多相关文章
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- mybatis的mapper映射文件
1概述1.1应用架构 mybatis框架用于支持对关系数据库的操作,该体系的应用架构如下图所示: 在mybatis框架体系中,主要的组件是:SqlSessionFactoryBean和Mapp ...
- xml 文件不给提示(以mybatis 的 mapper映射文件为例)
在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ...
- Mybatis将mapper映射文件配置到recources下
关于为什么要将Mybatis的mappers.xml文件配置到resources目录下的粗浅看法: (1).使文件目录更加清晰.resources文件目录下通常为配置文件,所以将Mappers.xml ...
- Mybatis学习系列(二)Mapper映射文件
Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<upd ...
- MyBatis 体系结构、根配置文件、Mapper映射文件
一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置>简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介 ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- IDEA maven项目下测试mybatis例子,使用mappper class或package引入mapper映射文件,总是报错Invalid bound statement(所有配置完全正确)
困扰几个小时,终于查到解决办法及原因(可以直接到最后看解决方案) 环境就是用IDEA搭建的maven项目,主要jar包引入配置如下 <dependencies> <dependenc ...
随机推荐
- 大规模数据处理Apache Spark开发
大规模数据处理Apache Spark开发 Spark是用于大规模数据处理的统一分析引擎.它提供了Scala.Java.Python和R的高级api,以及一个支持用于数据分析的通用计算图的优化引擎.它 ...
- 将DataTable转成Json字符串
1 public string ToJson(DataTable tbl) 2 { 3 if (tbl.Rows.Count > 0) 4 { 5 DataRowCollection rows ...
- 二、Nginx 服务器升级
1,编译新版本的nginx 软件 [root@client lnmp_soft]# tar -xf nginx-1.12.2.tar.gz -C .. [root@client lnmp_soft ...
- JAVA微服务应用(1)--SpringBoot中的REST API调用(学习笔记)
好长时间没有写学习小结了,最近宁正好看了小马哥的微服务系列之<Spring Boot>系列,颇有收获,并且公司也布置一个课题就是关于Spring中的REST API调用.于是乎回归本行,再 ...
- MySQL 最佳实践 —— 高效插入数据
当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法. MySQL 文档中有些值得一读的 INSERT 优化技巧. 在这篇文章里,我将 ...
- Spring事务管理详解
事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...
- NOIP模拟测试3「序列·熟练剖分·建造游乐园(play)」
---恢复内容开始--- 序列 刚调出来样例就A了,假装是水题. 因为是乱序,我们要求出来每两项之间最小公比,而不是直接比 求出来每两项之间最小公比,然后扫一遍就完了.(还要注意重复情况) 那么问题就 ...
- Qt:报文接收不完成,产生分帧的处理方法
最近在设备的测试工装时,通过串口,向设备发送自定义规约,其报文的枕结构已经编写,使用串口助手调试,设备可正常回复,但是通过工装,接收报文会不完整,导致解析失败.使用qDebug打印出来却发现数据被分成 ...
- 基于 Electron 实现 uTools 的超级面板
前言 为了进一步提高开发工作效率,最近我们基于 electron 开发了一款媲美 uTools 的开源工具箱 rubick.该工具箱不仅仅开源,最重要的是可以使用 uTools 生态内所有开源插件!这 ...
- 21、nginx之ngx_http_proxy_module模块
Nginx 的代理功能是通过 ngx_http_proxy_module 模块来实现的.默认在安装 Nginx 时已经安装了ngx_http_proxy_module模 块,因此可直接使用 ngx_h ...