做pc端网站机构网站建设 网站制作
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 >=#{arg0} and teamId <=#{arg1}; 也可以,注意下表索引细节1:mybatis3.3版本之前:可以直接写#{0} #{1}从mybatis3.4开始:#{arg0} #{arg1}... 或者是 #{param1} #{param2}...细节2:sql语句中不能使用小于号,使用转移符号替换;大于号没有限制,也可以使用转义符号替换>--><select id="queryByRange1" resultType="com.lina.pojo.Team">select * from team where teamId >=#{param1} and teamId <=#{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 <= #{param2}; 不推荐,但是语法也是正确的,但是不能使用arg0,arg1......--><select id="queryByRange2" resultType="com.lina.pojo.Team">select * from team where teamId >=#{min} and teamId <= #{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 <= #{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<=#{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));}