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 ...
随机推荐
- Yolov4性能分析(下)
Yolov4性能分析(下) 六. 权重更新 "darknet/src/detector.c"--train_detector()函数中: ...... /* 开始训练网络 */ f ...
- 将DataTable转成Json字符串
1 public string ToJson(DataTable tbl) 2 { 3 if (tbl.Rows.Count > 0) 4 { 5 DataRowCollection rows ...
- Springboot-Redis分布式锁 -----StringRedisTemplate
这里引用别人, 用来自己回忆 https://blog.csdn.net/jack_shuai/article/details/91986690 https://www.cnblogs.com/mox ...
- SpringBoot——配置类实现WebMvcConfigurer接口来配置拦截器、view-controller、视图解析器等
目的:为了保留SpringBoot对SpringMVC自动配置,另外我们还想要做一些自己拓展的功能 如何做扩展? 以配置view-controller实现跳转为例: 原先在SpringMvc中我们写v ...
- Java Spring boot 多商户入驻 外卖|跑腿|代驾 Uniapp版本
技术说明: 源码下载:https://www.yuanmahy.com/8357.html 开发环境:jdk1.8,mysql5.7,node 9.4,redis6.2,npm6.9 开发工具:前端使 ...
- 一文带你了解 Redis 的发布与订阅的底层原理
01.前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Ka ...
- 安装linux 报错(initramfs) Unable to find a medium containing a live file system
如题,linux 安装报错:(initramfs) Unable to find a medium containing a live file system 我是用UItraISO做的启动盘遇到这个 ...
- 12、windows定时备份数据库
12.1.删除指定目录中的内容: del /Q E:\DATABAK\* copy 1.txt bak\a.txt 12.2.可用的备份计划: 1.脚本: BakScripts @echo off R ...
- Vue 消除Token过期时刷新页面的重复提示
1.问题现象 页面长时间未操作,再刷新页面时,第一次弹出"token失效,请重新登录!"提示,然后跳转到登录页面,接下来又弹出了n个"Token已过期"的后 ...
- SDLC开发安全流程
2020年12月9日跟内部小伙伴分享SDLC流程及安全的一些思考,简单画了一个图,时间过得太快,记录一下 参考 https://blog.csdn.net/liqiuman180688/article ...