栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis笔记(二)MyBatis参数传递详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis笔记(二)MyBatis参数传递详解

目录
    • 一、背景
    • 二、单个参数
    • 三、多个参数(官方不推荐)
    • 四、多个参数(注解方式)
    • 五、使用Map参数(不推荐)
    • 六、JavaBean对象(推荐)
    • 七、使用List参数
    • 结语

一、背景

  本文的主要介绍 MyBatis 参数的传递,如果对于MyBatis基本使用不了解的可以参考我上一篇文章:MyBatis笔记(一)Spring Boot整合MyBatis实现增删查改详解(入门版).

二、单个参数

  单个参数就很简单了,EmployeeMapper.java接口定义如下:

    
    EmployeeDto getById(String id);

  那么EmployeeMapper.xml里对应的配置如下:

    
		SELECT
			e.id,
			e.emp_name as name,
			e.age,
			e.salary,
			e.department,
			e.hire_date as hireDate
		FROM
			tb_inf_employee e
		WHERe
			e.id= #{id}
  	
  • 确保 namespace 配置正确和 select 标签的 id 值和接口定义的方法名一致
  • select语句后的字段列表要和EmployeeDto中的属性名一致, 如果不一致的可以使用 as 来补充
  • 只有一个参数时,#{}中的参数名与Mapper接口方法中的参数名不一样也是可以的,如果想保证一致就在方法定义时,加上 @Param(“id”) ,如下:
    EmployeeDto getById(@Param("id") String id);
三、多个参数(官方不推荐)

  当有多个参数时,如果EmployeeMapper.java接口定义如下:

    
    List getByDepartmentAndAgeGreaterThan(String department, int age);

  那么EmployeeMapper.xml里对应的配置如下:

	
	
		SELECT
			e.id,
			e.emp_name as name,
			e.age,
			e.salary,
			e.department,
			e.hire_date as hireDate
		FROM
			tb_inf_employee e
		WHERe
			e.department= #{department} and e.emp_name like CONCAt(#{name},'%')
  	
  • 确保 namespace 配置正确和 select 标签的 id 值和接口定义的方法名一致
  • select语句后的字段列表要和EmployeeDto中的属性名一致, 如果不一致的可以使用 as 来补充
  • 这种情况下的多参数就不需要写parameterType参数
  • 接口定义的时候增加注解 @Param(“value”),这个注解是 org.apache.ibatis.annotations.Param,相当于给参数弄了一个别名
  • 实际引用参数就是 #{value} 这个 value就是 @Param(“value”)里的 value
五、使用Map参数(不推荐)

  上面说到当有多个参数时,也可以使用Map来封装传递,EmployeeMapper.java接口定义如下:

    
    List getByDepartmentAndSalaryLessThan(Map map);

  那么EmployeeMapper.xml里对应的配置如下:

	
	
		SELECT
			e.id,
			e.emp_name as name,
			e.age,
			e.salary,
			e.department,
			e.hire_date as hireDate
		FROM
			tb_inf_employee e
		WHERe
			e.department= #{department} and e.hire_date between #{startDate} and #{endDate}
  	
  • 确保 namespace 配置正确和 select 标签的 id 值和接口定义的方法名一致
  • select语句后的字段列表要和EmployeeDto中的属性名一致, 如果不一致的可以使用 as 来补充
  • parameterType 指定为我们传入的别名,因为指定了别名的路径( type-aliases-package ),所以这里可以省略完整路径
  • 本文这里实际引用值就是取对象(QueryDto)的的属性即可,如果方法定义上加了 @Param(“queryDto”) ,那么使用就要改成 #{queryDto.属性}
七、使用List参数

  使用list传入参数,一般用于in操作的比较多,EmployeeMapper.java接口定义如下:

    
    List getByIdIn(@Param("idList") List idList);

  那么EmployeeMapper.xml里对应的配置如下:

	
	
  • 确保 namespace 配置正确和 select 标签的 id 值和接口定义的方法名一致
  • select语句后的字段列表要和EmployeeDto中的属性名一致, 如果不一致的可以使用 as 来补充
  • foreach 标签里的 collection 默认的值是 list ,如果你要像我这样使用idList,那么就得在接口中使用 @Param(“idList”)
结语

本文介绍了多种传递参数的方法,我这里只是一个简单类型,实际还可以是复杂的类型,但是用法都是一样的,现在对各种方法进行简单的总结

  • 单个参数 #{value} 要保证名称一致就加上 @Param(“value”)
  • 多个参数时,使用 #{下标} 方式官方也不是很推荐,希望用 @Param 来替代
  • 多个参数时,参数个数小于等于5个,建议使用 @Param 注解传递多个参数,更直观
  • 多个参数时,参数个数大于5时,建议使用用 Java Bean 更好,或者是组合的方式
  • map传参看起来是万能的,但是丧失了业务可读性,不是很推荐
  • List参数的解析建议加上 @Param(“value”) ,当有多个list时,可读性会更好
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号