Mybatis第三篇:参数解析

  Mybatis的参数传递情况分为:一个参数、Map参数、javaBean参数、多个参数、Collection参数、List参数、Array数组参数。

一、一个参数

  Dao层的接口方法中传入的参数只有一个,XML文件中的取值变量可以任意写(#{value}可以写任意值)。

<select id="getUserByName" parameterType="string" resultMap="BaseResultMap">
  select * from t_user where `name` = #{value}
</select>

二、传入Map对象

  多个参数时,传递Map对象,以key作为参数名称,value作为参数值。

  1、map参数拼接

Map<String, Object> map = new HashMap<>();
map.put("id", 2L);
map.put("name", "啦啦啦");
List<TUser> users = userDao.getUserByMap(map);

  2、sql获取参数

<select id="getUserByMap" parameterType="map" resultMap="BaseResultMap">
    select * from t_user where `id` = #{id} OR `name` = #{name}
</select>

三、传入javaBean对象

  参数传递依靠javaBean的字段属性来区分。取值与Map集合相似,传参受到javaBean的字段类型类型限制。

  1、javaBean对象创建

UserDto dto = UserDto.builder().id(1L).name("啦啦啦").build();
List<TUser> users = userDao.getUserByDtoBean(dto);

  2、sql参数获取

<select id="getUserByDtoBean" parameterType="entity.UserDto" resultMap="BaseResultMap">
    select * from t_user where `id` = #{id} OR `name` = #{name}
</select>

四、多个参数传参

  dao层方法需要多个参数时,若是没有使用mybatis的@Param注解,直接调用方法,Mybatis解析XML文件时会将参数名称解析为arg1, arg0..., param1, param2....

这样的参数名,sql的xml文件使用与dao层方法一样的名称是无法解析的。需要在dao层方法上增加@Param注解,指定解析时应该映射成的参数名。

  1、dao层接口方法,未加@Param注解

List<TUser> getUserByParams(Long id, String name);

  2、sal参数获取

<select id="getUserByParams" resultMap="BaseResultMap">
    select * from t_user where `id` = #{id} OR `name` = #{name}
</select>

  3、执行结果报错

### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id‘ not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id‘ not found. Available parameters are [arg1, arg0, param1, param2]

  4、调整dao层的接口方法,增加注解@Param

List<TUser> getUserByParams(@Param("id") Long id, @Param("name") String name);

五、传递List集合

  dao层接口中若是没有使用@Param注解,XML文件的sql直接使用list进行判断,若是使用了@Param注解对参数进行命名,要严格按照@Param注解的命名来。

  1、dao层方法

List<TUser> getUserByList( List idlist);

  2、参数拼接

List<Long> ids = Arrays.asList(1L, 2L);
List<TUser> users = userDao.getUserByList(ids);

  3、sql参数获取

<select id="getUserByList" parameterType="list" resultMap="BaseResultMap">
    select * from t_user where
    <if test="list != null and list.size() > 0">
      `id` IN
      <foreach collection="list" index="index" close=")" open="(" item="id" separator=",">
        #{id}
      </foreach>
    </if>

六、参数解析的相关源码

  。。。。。

原文地址:https://www.cnblogs.com/8593l/p/12680571.html

时间: 2024-08-25 02:26:36

Mybatis第三篇:参数解析的相关文章

C#4.0语法糖之第三篇: 参数默认值和命名参数 对象初始化器与集合初始化器

今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完善以及自我提高,给各位园友们带来更好,更高效的文章. 废话就说到这里,下面正式进入我们的今天的C#4.0语法糖,今天给大家分享一下参数默认值.命名参数.对象初始化器和集合初始化器. 参数默认值和命名参数:方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合

第三篇:解析库之re、beautifulsoup、pyquery(转)

一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.你可能在寻找 Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发,官网推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4 #安装 Beautiful Soup pip install beautifulsoup

爬虫学习(三)——参数解析

解析参数使用urllib.parse import urllib.parse # 在百度搜索"中国"关键字,得到的得到的url如下:string= "https://www.baidu.com/s?ie=utf-8&word=%E4%B8%AD%E5%9B%BD&tn=98537121_hao_pg" #unquote()反应用,解析参数,将二进制转成我们能看懂的中文形式 string = urllib.parse.unquote(string) p

mybatis 学习三 关键文件解析

1:  mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <

Python命令行选项参数解析策略

概述 在Python的项目开发过程中,我们有时需要为程序提供一些可以通过命令行进行调用的接口.不过,并不是直接使用 command + 当前文件 就ok的,我们需要对其设置可选的各种各样的操作类型.所以,这种情况下我们就有必要对传入的参数进行解析操作.下面就此问题提出几种不同的解决策略,希望于你有益. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga 发表日期: 2016年3月18日 链接:http://blog.csdn.net/l

Mybatis 实用篇(三)参数处理

Mybatis 实用篇(三)参数处理 sql 语句中的参数 parameterType 可以省略不写. 一.参数封装 1.1 单个参数处理 public interface UserMapper { User getUser(int id); } sql 中 #{} 的值可以随意,mybatis 不做任何处理,eg: <select id="getUser" parameterType="int" resultType="User">

深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)[转]

上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)>我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties.typeAliases.plugins.objectFactory.objectWrapperFactory.settings.environments.databaseIdProvider.typeHandlers.mappers这些节点.那么本次,就会先介绍prope

Mybatis入门学习篇(三)之模糊查询的两种写法

在上一讲(Mybatis入门学习篇(二)之基于注解的增删改查)中,需要用到模糊查询,比如我想查找所有含有'zjh'的Student的信息.如果是在数据库中,那么我们可以方便的使用通配符%:select * from student where name like '%zjh%' .但是如果在mybatis中直接像sql中那样,就会报错.遂百度,无果,偶然在一篇帖子中看到,遂记录下来,以备后用. 方法一: 在要查询的字符串合适位置加上%,如这里的'zjh'就应该为'%zjh%'.这是一个很管用的方

MyBatis 源码分析 - 配置文件解析过程

* 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAliases和typeHandlers等,本文的篇幅也主要在对这三个配置解析过程的分析上.下面,我们来一起看一下本篇文章的目录结构. 从目录上可以看出,2.3节.2.5节和2.8节的内容比较多.其中2.3节是关于settings配置解析过程的分析,除了对常规的 XML 解析过程分析,本节额外的分析了元