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 ...
随机推荐
- 视频处理器为电池供电的设计提供4K视频编码
视频处理器为电池供电的设计提供4K视频编码 Video processor enables 4K video coding for battery-powered designs OmniVision ...
- algorithm头文件下的常用函数
algorithm头文件常用高效函数 max() max(a, b)返回a和b中的最大值,参数必须是两个(可以是浮点型). 1 #include <iostream> 2 #include ...
- Java 将PPT幻灯片转为HTML
本文以Java程序代码为例展示如何通过格式转换的方式将PPT幻灯片文档转为HTML文件.这里的PPT幻灯片可以是.ppt/.pptx/.pps/.ppsx/.potx等格式. 代码实现思路:[加载PP ...
- 【SQLite】教程03-SQLite语法
注释: sqlite>.help -- 这是一个简单的注释 SQLite ANALYZE 语句: 收集有关表和索引的统计信息,并将收集的信息存储在数据库的内部表中 ANALYZE; or ANA ...
- Git操作文档
Git 操作文档 Git 是一个十分流行的版本控制系统,Git 和 SVN 区别在于,SVN使用增量文件系统,存储每次提交之间的差异.而 git 使用全量文件系统,存储每次提交的文件的全部内容(sna ...
- 有了Java8的“+”真的可以不要StringBuilder了吗
最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,"+"会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要 ...
- Android系统编程入门系列之应用初始化Application
在上一篇文章中我们了解到Android系统启动应用的时候,会首先加载AndroidManifest.xml清单文件中的一系列信息,在清单文件中如果不指定<application></ ...
- 『无为则无心』Python基础 — 10、Python字符串的格式化输出
目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...
- 4.2 万 Star!开发 Web 和移动端应用的全栈平台
[导语]:Meteor 是一个用 JS 开发现代 Web 应用程序的平台.它是开源的,在 GitHub 上有 4.2 万 Star. Meteor 是什么? 官方文档是这样描述 Meteor 的:Me ...
- 重新整理 .net core 实践篇————熔断与限流[三十五]
前言 简单整理一下熔断与限流,跟上一节息息相关. 正文 polly 的策略类型分为两类: 被动策略(异常处理.结果处理) 主动策略(超时处理.断路器.舱壁隔离.缓存) 熔断和限流通过下面主动策略来实现 ...