当前位置: 首页 > news >正文

MyBatis输入映射

1 parameterType

parameterType:接口中方法参数的类型,类型必须是完全限定名或别名(稍后讲别名)。该属性非必须,因为Mybatis框架能自行判断具体传入语句的参数,默认值为未设置(unset)。<select>,<insert>,<update>,<delete>都可以使用 parameterType 指定参数类型。

2 传递单个参数

当接口中的方法只有一个参数的时候,直接使用#{任意名称}传参即可,#{}中的名称与方法中的参数名称无关。

3 传递多个参数

当接口中方法有多个参数的时候,有以下方式传参:

3.1 通过参数下标索引

接口正常书写,映射文件中SQL语句的占位符必须用 arg0 agr1…,或param1 param2…

注意:mybatis-3.3 之前的版本使用#{0},#{1}方式, 从 mybatis3.4 开始使用#{arg0}方式。

TeamMapper接口添加如下内容:

 List<Team> queryByRange1(Integer min, Integer max);

TeamMapper.xml配置文件中添加如下:

<!--多个参数:标签中不需要parameterType属性方式1:通过下标索引的方式,还有两种方式(太难记了,可以忽略,看看演示就好啦)select * from team where teamId &gt;=#{arg0} and teamId &lt;=#{arg1}; 也可以,注意下表索引细节1:mybatis3.3版本之前:可以直接写#{0} #{1}从mybatis3.4开始:#{arg0} #{arg1}... 或者是 #{param1} #{param2}...细节2:sql语句中不能使用小于号,使用转移符号替换;大于号没有限制,也可以使用转义符号替换&gt;--><select id="queryByRange1" resultType="com.lina.pojo.Team">select * from team where teamId >=#{param1} and teamId &lt;=#{param2};</select>

测试类添加方法:

/*** ClassName: TestTeamMapperArg* 测试输入映射:多个参数* @author wanglina* @version 1.0*/
public class TestTeamMapperArg {private TeamMapper teamMapper= MybatisUtil.getSqlSession().getMapper(TeamMapper.class);@Testpublic void test01(){List<Team> teams = teamMapper.queryByRange1(1004, 1010);teams.forEach(team -> System.out.println(team));}
}

3.2 通过@Param注解

在方法的形参前面加入@Param("自定义参数名称"),mapper文件中使用#{自定义参数名称}的方式传参。

TeamMapper接口添加如下内容:

List<Team> queryByRange2(@Param("min") Integer min, @Param("max") Integer max);

TeamMapper.xml配置文件中添加如下:

    <!--方式2:通过注解的方式:#{}中的名称必须与接口的方法中的参数注解@Param()保持一致select * from team where teamId >=#{param1} and teamId &lt;= #{param2}; 不推荐,但是语法也是正确的,但是不能使用arg0,arg1......--><select id="queryByRange2" resultType="com.lina.pojo.Team">select * from team where teamId >=#{min} and teamId &lt;= #{max};</select>

测试类添加方法:

    @Testpublic void test02(){List<Team> teams = teamMapper.queryByRange2(1005, 1011);teams.forEach(team -> System.out.println(team));}

3.3 通过map来传递多个参数

Map 集合可以存储多个值,使用Map向 mapper 文件一次传入多个参数。Map 集合使用 String的 key,Object 类型的值存储参数。 mapper 文件使用 # { key } 引用参数值

TeamMapper接口添加如下内容:

List<Team> queryByRange3(Map<String,Object> map);

TeamMapper.xml配置文件中添加如下:

<!--方式3:通过map来传递多个参数:映射文件中的参数占位符必须和map中的String类型的字段名称一样--><select id="queryByRange3" resultType="com.lina.pojo.Team">select * from team where teamId >=#{min} and teamId &lt;= #{max};</select>

测试类添加方法:

@Testpublic void test03(){TeamMapper teamDao= sqlSession.getMapper(TeamMapper.class);       Map<String, Object> map=new HashMap<>();map.put("min",1001);map.put("max",2000);List<Team> teamList3 = teamDao.queryByRange3(map);for (Team team : teamList3) {System.out.println(team);}}

3.4 通过pojo类传递多个参数

与map传递多个参数类似,要求映射文件中的参数占位符必须和pojo类中的属性完全一致。

实体类:

/*** ClassName: QueryVO* 自己封装的查询条件* @author wanglina* @version 1.0*/
public class QueryVO {private String name;private Integer min;private Integer max;private String location;//省略set get
}
​

TeamMapper接口添加如下内容:

List<Team> queryByCondition(QueryVO vo);

TeamMapper.xml配置文件中添加如下:

<!--方式4:通过pojo类传递多个参数:映射文件中的参数占位符必须和pojo类中的字段完全一致-->
<select id="queryByCondition" resultType="com.lina.pojo.Team">select * from teamwhere teamId>=#{min} and teamId&lt;=#{max}and teamName like #{name} and location=#{location}</select>

测试类添加方法:

@Testpublic void test04(){QueryVO vo=new QueryVO();vo.setLocation("洛杉矶");vo.setName("%球队%");vo.setMin(1001);vo.setMax(1111);List<Team> teams = teamMapper.queryByCondition(vo);teams.forEach(team -> System.out.println(team));}
http://www.lryc.cn/news/335040.html

相关文章:

  • 金三银四,程序员求职季
  • [react优化] 避免组件或数据多次渲染/计算
  • 「意」起出发 丨意大利OXO城市展厅盛大启幕,成都设计圈共襄盛举
  • 你不知道的JavaScript---深入理解 JavaScript 作用域
  • FPGA(Verilog)实现按键消抖
  • 第十二届蓝桥杯大赛软件赛省赛C/C++大学B组
  • 面了钉钉搜广增算法岗(暑期实习),秒挂。。。。
  • 前端实现流文件下载的完整指南
  • Kotlin:常用标准库函数(let、run、with、apply、also)
  • 雷军给年轻人的五点建议
  • Unity DOTS物理引擎的核心分析与详解
  • C++ //练习 12.4 在我们的check函数中,没有检查i是否大于0。为什么可以忽略这个检查?
  • 达梦备份与恢复
  • iOS App Store审核要求与Flutter应用的兼容性分析
  • javaScript常见对象方法总结
  • 使用Java流API构建树形结构数据
  • 蓝桥杯备考
  • Linux云计算之Linux基础1——操作系统理论基础
  • 大模型从入门到应用——OpenAI基础调用
  • 前端学习<三>CSS进阶——0102-CSS布局样式
  • 关于51单片机TMOD定时器的安全配置
  • Unity 主线程和其他线程之间的数据访问
  • 电商系列之风控安全
  • 计算机网络针对交换机的配置
  • Python爬虫之分布式爬虫
  • 服务器硬件基础知识解析
  • 【芯片设计- RTL 数字逻辑设计入门 1.1 -- Verdi 使用入门介绍 1】
  • ssm034学生请假系统+jsp
  • Leetcode 165. 比较版本号
  • LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】