Mybatis总体机制概括

概念说明

这里数据输入具体是指上层方法(例如Service方法)调用Mapper接口时,数据传入的形式。

  • 简单类型:只包含一个值的数据类型

基本数据类型:int、byte、short、double等
基本数据类型的包装类型:Integer、Character、Double等
字符串类型:String

  • 复杂类型:包含多个值的数据类型

实体类类型:Employee、Department等
集合类型:List、Set、Map等
数组类型:int[]、String[]等
复合类型:List、实体类中包含集合等

单个简单类型参数

①Mapper接口中抽象方法的声明

Employee selectEmployee(Integer empId);

②SQL语句

<select id="selectEmployee" resultType="com.zengchuiyu.mybatis.entity.Employee"><!-- Mybatis负责把SQL语句中的#{}部分替换成“?”占位符,在#{}内部还是要声明一个见名知意的名称 -->select emp_id empId,emp_name empName,emp_salary empSalaryfrom t_empwhere emp_id=#{empId}</select>

实体类类型参数

①Mapper接口中抽象方法的声明

int insertEmployee(Employee employee);

②SQL语句

<insert id="insertEmp">insert into t_emp(emp_name,emp_salary) values (#{empName},#{empSalary})</insert>

③对应关系

  • 现在在这条SQL语句中,#{}中的表达式需要被用来从Employee employee实体类中获取emp_name以及emp_salary的值
  • 我们从实体类中获取值通常都是调用getXxx()方法
    而getXxx()方法,setXxx()方法定义了实体类的属性
  • 定义属性的规则是:把get、set去掉,剩下的部分首字母小写
  • 所以我们在#{}使用getXxx()方法,setXxx()方法定义属性就行

④结论

Mybatis会根据#{}中传入的数据,加工成getXxx()方法,通过反射在实体类对象中调用这个方法,从而获取到对应的数据。填充到#{}这个位置。

零散的简单类型数据

使用@Param注解实现对零散的简单的数据类型的对应(也就是对应#{}里面的内容)

①Mapper接口中抽象方法的声明

int updateEmployee(@Param("empId") Integer empId,@Param("empSalary") Double empSalary);

②SQL语句

<update id="updateEmployee">update t_emp set emp_salary=#{empSalary} where emp_id=#{empId}
</update>

Map类型参数

map类型输入参数通过参数的key值跟SQL语句中#{}占位符对应

①Mapper接口中抽象方法的声明

int updateEmployeeByMap(Map<String, Object> paramMap);

②SQL语句

<update id="updateEmployeeByMap">update t_emp set emp_salary=#{empSalaryKey} where emp_id=#{empIdKey}
</update>

③junit测试

@Test
public void testUpdateEmpNameByMap() {SqlSession session = sessionFactory.openSession();EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);Map<String, Object> paramMap = new HashMap<>();paramMap.put("empSalaryKey", 999.99);paramMap.put("empIdKey", 5);int result = mapper.updateEmployeeByMap(paramMap);System.out.println("result = " + result);
}

④使用场景
有很多零散的参数需要传递,但是没有对应的实体类类型可以使用。使用@Param注解一个一个传入又太麻烦了。所以都封装到Map中。

mybatis数据输入相关推荐

  1. MyBatis之输入(parameterType)与输出(resultType、resultMap)映射

    MyBatis之输入(parameterType)与输出(resultType.resultMap)映射 2017/9/30 在MyBatis中,我们通过parameterType完成输入映射(指将值 ...

  2. C++ OJ 中多行数据输入(大小写转换、通过移位运算实现2的n次方、多组输入,每行输入数量不一样)

    1. 多组输入,输出每行最大值 while(cin>>a>>b) 主要解决的是两个为一组的多组数据输入,当一次只输入一个数据时就用 while(cin>>a) 输入 ...

  3. 一步步学习SPD2010--第十四章节--在Web页面使用控件(3)--验证用户数据输入

            通过使用验证控件,你可以验证用户输入到控件的数据.插入的控件可以是HTML标签或者标准ASP.NET控件.         在本次练习中,你创建数据输入表单,并使用RequiredFi ...

  4. c语言程序设计数据输入的,1.2 C语言的发展与特点免费阅读_C语言程序设计教程免费全文_百度阅读...

    3.2 数据的输入/输出 结构化程序设计过程中,确定输入数据是重要的步骤之一,在程序中如何实现数据的输入呢?C语言中数据及字符的输入.输出是由函数语句完成的,下面将介绍从标准输入设备--键盘上输入数据 ...

  5. Shiny平台构建与R包开发(二)——数据输入

    作为Shiny平台构建与R包开发教程的第二小节,本节向读者介绍如何利用Shiny server处理用户输入的各种信息.这些信息既包括用户向Shiny上传的数据集,也包括用户对Shiny页面的各种控件( ...

  6. Java学习笔记之[ 利用扫描仪Scanner进行数据输入 ]

    /*********数据的输入********/ /**利用扫描仪Scanner进行数据输入 怎么使用扫描仪Scanner *1.放在类声明之前,引入扫描仪 import java.util.Scan ...

  7. 屏幕输出语句_2.2 数据输入与输出

    戳蓝字"趣学C语言"关注我们哦!FOEREWORD引言 每当你满怀信心的准备尝试一件新事物时,冥冥之中,宇宙晦暗一处已经亮起一丝微弱的光芒,直径或许不过纳米级别,或是更小,却耀眼异 ...

  8. PyTorch中的数据输入和预处理

    文章目录 PyTorch中的数据输入和预处理 数据载入类 映射类型的数据集 torchvision工具包的使用 可迭代类型的数据集 总结 PyTorch中的数据输入和预处理 数据载入类 在使用PyTo ...

  9. Keras: 多输入及混合数据输入的神经网络模型

    目录 摘要 正文 什么是混合数据? Keras如何接受多个输入? 房价数据集 获取房价数据集 项目结构 加载数值和分类数据 加载图像数据集 定义多层感知器(MLP)和卷积神经网络(CNN) 使用Ker ...

  10. excel数据输入模型前的转换

    对于excel的数据输入神经网络前要进行数据类型转换,不然好像会有问题,如果能直接输入请指教.下面讲讲对excel数据的转换. 首先对原始数据进行解释一下:下图是部分训练数据,前20列是特征,第21列 ...

最新文章

  1. 有了它,AI甚至可以让你知道对方是否真的爱你?
  2. Bootstrap基础一 CSS 概览
  3. mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题
  4. ITK:自适应直方图均衡图像滤波器
  5. ubuntu下git服务器搭建过程
  6. python--*args和**kwargs可变参数
  7. 跟我一起来用C++写Web服务器吧
  8. 一百个你不应该继续用Dev C++的理由
  9. 万网域名转向指定URL地址
  10. html酷炫电子时钟效果,纯js实现电子时钟特效
  11. Tensorflow 笔记 Ⅱ——单变量线性回归
  12. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
  13. 基于多重继承与信息内容的知网词语相似度计算 - 论文及代码讲解
  14. android-ProGuard混淆
  15. 直线拟合c语言程序,ax+by+c=0 型直线拟合算法
  16. thinking in uml 大象 用例
  17. 初学者怎么学习Java
  18. 加入计算机网络协会申请书,大学生退出协会申请书
  19. 网络测试仪测试交换机的基本指标。
  20. GPT系列:Codex【使用GPT-3完成代码自动生成任务】

热门文章

  1. chatbot使用_使用Python设计ChatBot:一种改进的方法
  2. 张北草原和锡林郭勒草原区别_草原:比您不知道的恶魔还强
  3. 循环神经网络 递归神经网络_递归神经网络-第3部分
  4. pip:你真的熟悉怎么用了吗?
  5. 会做饭的机器人曰记_会做饭的机器人作文二百字
  6. 用c语言编写函数流程,C语言课程设计————写下流程图! 谢谢
  7. css 标签太长的时候隐藏为点点
  8. swift基础知识一
  9. JavaScript实现map
  10. Angular动态注册组件(controller,service...)