Mybatis参数传递及返回类型

mybatis参数传递:


    单个参数:不做特殊处理
        #{参数名}:取出参数值
    多个参数:做特殊处理
        多个参数会被封装成一个map
            key:param1   ...   paramN
            value:传入的参数值
        #{}就是从map中获取指定的key值
        
        操作:
            方法:public Employee getEmployeeByNmaeAndPass(String name,String pass);
            取值:#{name},#{pass}

    命名参数:明确指定封装参数时map的key:@Param("id")
        多个参数会被封装成一个map
            key:使用@Param注解指定的值
            value:参数值
            #{指定的key}取出对应的参数值

    POJO:

    如果多个参数是业务模型中的数据,可以直接使用POJO:
            #{属性名}:取出传入的POJO 的属性值


    Map:

    如果多个参数不是业务模型中的数据,没有对应的POJO,为了方便,可以传入map
            #{key}:取出map中对应的值

    
    TO:
    如果多个参数不是业务模型中的数据,但是经常要是用,推荐来编写一个TO(Transfer Object)数据传输对象
    Page{
        int index;
        int size;
    }

示例:

1、public Employee getEmployee(@Param("name")String name,String pass);
    取值:name=====>#{name/param1}   pass=====>#{param2}

2、public Employee getEmployee(String name,@Param("emp")Employee employee);
    取值:name====>#{param1}      pass=====>#{emp.pass/param2.pass}

3、如果是Collection(List   Set)类型或者是数组型,也会特殊处理,
    也是把传入的list或者数组封装在map中
        key:Collection(collection),如果是List还可以使用这个key(list)
             数组(array)
    public Employee getEmpById(List<Integer> ids);
    取值:取出第一个id的值:#{list[0]}


mybatis处理参数:
总结:参数多时会封装map,未了不混乱,可以使用@Param来指定封装时使用的key;
#{key}就可以取出map中的值

(@Param("id")Integer id,@Param("name")String name);
ParamNameResolver解析参数封装的map:
    names:{0=id,1=name}
    1、获取每个标了param注解的参数的@Param的值:id,name:赋值给name
    2、每次解析一个参数给map中保存信息:(key:参数索引,value:name的值)
        name的值:
            标注了param注解:注解值
            没有标注:
            1、全局配置:userActualParam(jdk1.8):name=参数名
            2、name=map.size();相当于当前元素索引

mybatis参数值的获取
#{}:可以获取map中的值或者pojo对象属性的值
${}: 可以获取map中的值或者pojo对象属性的值
区别:
    #{}:是以预编译的形式,将参数设置到sql语句中:PreparedStatement;防止sql注入
    ${}:取出的值,直接拼接在sql语句中,会由安全问题;
    大多情况下,都会使用#{}
    当存在分表、排序:按照年份分表拆分
        原生jdbc不支持占位符的地方就可以使用${}进行取值
        select * from  ${year}_salary where xxxx;
        select * from tb_student order by ${name}
        
#{}:
    可以规定参数的一些规则:
    JavaType、jdbcType、mode(存储过程)、numeriScale、resultMap、typeHandler、jdbcTypeName

    jdbcType通常需要在某种特定的条件下呗被设置:
        在数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。
        比如:Oracle(报错)
        insert into student(id,name,age) values(null,'test',null)
        oracle不能识别对null的操作,报错。因为mybatis对所有的null都映射的是原生jdbc的other类型。
        但是MySQL可以识别对null的操作,若想解决此问题,则使用以下添加语句;
        
        1、insert into student(id,name,age) values(#{id},#{name},#{age,jdbcType=NULL})
    
        2、由于全局配置中,jdbcTypeForNull=OTHER:oracle不支持
            <setting name="jdbcTypeForNull" value="NULL">
            此配置对使用MySQL数据库时的影响。

返回参数类型:
List型:
    resultType:返回的是一个集合,要写集合中元素的类型

Map型:
    resultType=“map”:返回一条记录
    key:就是列名    value:对应的值
    mybatis对用到的部分类进行了封装,可直接使用封装类型。

    返回多条记录封装一个map:
    1、resultType:要写集合中元素的类型。
        Map<Integer,Employee>:
                键是这条记录的主键,值是记录封装后的JavaBean
    2、在对应的方法上添加@MapKey("id") 告诉mybatis封装这个map的时候使用哪个属性作为map的key
   

转载于:https://www.cnblogs.com/staticking/p/7001091.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络html代码是什么问题,html代码问题

html代码问题來源:互聯網 2010-03-22 10:35:57 評論分類: 電腦/網絡 >> 程序設計 >> 其他編程語言問題描述:这三种链接格式我都试了&#xff0c;都不行&#xff0c;请高手指点下。。。。。注意&#xff1a;我要的是代码&#xff0c;不是操作方法&#xff0c;因为…

spring mvc 文件上传

spring mvc 文件上传 一、单文件上传 配置步骤&#xff1a; 步骤一、在配置文件中配置包扫描器&#xff08;暂且这样配&#xff0c;会出问题&#xff0c;我们下面说解决方案&#xff09; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns…

使用工厂模式解决设计问题

工厂设计模式是面向对象环境中最常用的模式之一。 再次来自“创意设计”模式类别&#xff0c;即有关对象创建的所有信息。 在某些情况下&#xff0c;对象的创建很复杂&#xff0c;可能需要某种程度的抽象&#xff0c;以便客户端代码无法意识到这些复杂性和内部实现细节。 在某些…

103. Binary Tree Zigzag Level Order Traversal

二刷。 BFS&#xff0c;基本习惯上用Iterative的做法来做&#xff0c;就是QUEUE。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ public class Solution…

java多线程系列13 设计模式 Future 模式

Future 模式 类似于ajax请求 页面异步的进行后台请求 用户无需等待请求的结果 就可以继续浏览或者操作 核心就是&#xff1a;去除了主函数的等待时间&#xff0c;并使得原本需要等待的时间段可以用于处理其他业务逻辑 JDK内置实现Future模式演示一下 public class RealData im…

lodop转到其他html页面,Lodop实现打印功能

思路&#xff1a;1、在 html 页面引入 LodopFuncs.js 文件&#xff0c;并用 object 标签和 embed 标签获取 lodop 对象2、在 js 中获取 html 页面中的 object 和 embed 对象&#xff0c;并使用getLodop() 方法得到 lodop 对象3、实现打印功能&#xff0c;以下三步是必需的初始化…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

Primefaces AutoComplete&#xff0c;JSF转换器 这篇文章从第一部分和第二部分继续。 JSF拥有Converter工具&#xff0c;可以帮助我们从用户视图中获取一些数据并将其转换为从数据库或缓存中加载的对象。 在“ com.converter”包中&#xff0c;创建以下类&#xff1a; packa…

html5首屏加载乐山暴雨,发布前端项目时因chunk-vendors过大导致首屏加载太慢,Vue Build时chunk-vendors的优化方案...

这个优化是两方面的&#xff0c;前端将文件打包成.gz文件&#xff0c;然后通过nginx的配置&#xff0c;让浏览器直接解析.gz文件。1、compression-webpack-plugin插件打包.gz文件安装插件npm install --save-dev compression-webpack-plugin或者yarn add compression-webpack-p…

width:100vh与min-height:calc(100vh + 51px)

vh:相对于视窗的高度&#xff0c;那么vw:则是相对于视窗的高度。 “视区”所指为浏览器内部的可视区域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任务栏标题栏以及底部工具栏的浏览器区域大小。 详细vh的用法&#xff0c;大家可以参考http…

XML配置文件中的Spring配置文件

我的上一个博客非常简单&#xff0c;因为它涵盖了我从Spring 3.0.x到Spring 3.1.x的轻松升级&#xff0c;最后我提到可以将Spring模式升级到3.1&#xff0c;以利用Spring的最新功能。 在今天的博客中&#xff0c;我将介绍这些功能中最酷的功能之一&#xff1a;Spring配置文件。…

交大计算机专业怎样,计算机专业高校实力排名,上海交大第五,清华第二,第一毫无争议...

原标题&#xff1a;计算机专业高校实力排名&#xff0c;上海交大第五&#xff0c;清华第二&#xff0c;第一毫无争议计算机专业在近几年可谓是“大热”&#xff0c;众多考生抢破头也想当码农&#xff0c;背后的原因其实不难理解。互联网时代的到来&#xff0c;计算机早已渗透到…

python_day7 绑定方法与非绑定方法

在类中定义函数如果 不加装饰器 则默认 为对象作为绑定方法 如果增加 classmethod 是 以 类 作为绑定方法 增加 classmethod 是 非绑定方法&#xff0c;就是不将函数 绑定 ##################### class Foo: def func(self): print(self) classmethod def func…

Spring Security使用Hibernate实现自定义UserDetails

大多数时候&#xff0c;我们将需要在Web应用程序中配置自己的安全访问角色。 这在Spring Security中很容易实现。 在本文中&#xff0c;我们将看到最简单的方法。 首先&#xff0c;我们将在数据库中需要以下表格&#xff1a; CREATE TABLE IF NOT EXISTS mydb.security_role (…

python之路-面向对象

编程范式 编程是 程序 员 用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 &#xff0c; 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合&#xff0c;正所谓条条大路通罗马&#xff0c;实现一个任务的方式有很多种不同的方式&#xff0c; 对这…

西安邮电大学计算机科学与技术有专硕吗,2020年西安邮电大学计算机学院考研拟录取名单及排名!...

20考研复试调剂群&#xff1a;4197552812020年西安邮电大学计算机学院硕士研究生招生复试成绩及综合排名各位考生&#xff1a;现将我院2020年硕士研究生招生复试成绩及综合排名公布(最终录取名单及新生学籍注册均以“全国硕士研究生招生信息公开平台”备案信息为准)&#xff0c…

用Java排序的五种有用方法

Java排序快速概述&#xff1a; 正常的列表&#xff1a; private static List VEGETABLES Arrays.asList("apple", "cocumbers", "blackberry");Collections.sort(VEGETABLES);output: apple, blackberry, cocumbers反向排序&#xff1a; pri…

[python]-数据科学库Numpy学习

一、Numpy简介&#xff1a; Python中用列表(list)保存一组值&#xff0c;可以用来当作数组使用&#xff0c;不过由于列表的元素可以是任何对象&#xff0c;因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3]&#xff0c;需要有3个指针和三个整数对象。对于数值运…

检测一个点, 是否在一个半圆之内的方法

demo: http://jsbin.com/lihiwigaso 需求: 一个圆分成分部分, 鼠标滑上不同的区域显示不同的颜色 思路: 先判断这个点是否在圆之内, 再判断是否在所在的三角形之内就可以了 所需要的全部源码: <!DOCTYPE html> <html> <head><meta charset"utf-8&quo…

计算机网络设备接地规范,网络机房防雷接地的四种方式及静电要求

编辑----河南新时代防雷由于计算机网络系统的核心设备都放置在网络机房内&#xff0c;因而网络机房防雷接地有了较高的环境要求&#xff0c;良好的接地系统是保证机房计算机及网络设备安全运行&#xff0c;以及工作人员人身安全的重要措施。直流地的接法通常采用网格地&#xf…

抓住尾部的StackOverFlowError

使用Java程序时可能要处理的一种更烦人的情况是StackOverFlowError&#xff0c;如果您有一个很好的可生产的测试用例&#xff0c;那么关于使用堆栈大小或设置条件断点/某种痕迹 。 但是&#xff0c;如果您有一个测试案例可能一次失败100次&#xff0c;或者像我的案例一样在AWTM…