Mybatis中Mapper传入复杂性参数

前言

近期自学了Mybatis框架,学完之后也正在着手写了一个SSM项目,在项目中使用Mybatis持久层框架时,对Mapper.XML传参数时遇到了一些小小的问题,于是在此做个笔记,加深印象。

Mybatis简介

持久层框架,是apache下的一个开源项目,使用映射方式,半自动化(需要程序员自己编写Sql语句),相比Hibernate而言学习难度小,上手快。

Mybatis传参类型

  • 基本数据类型:int,String,Dete等
  • 复杂数据类型:Bean实体类,map

传参属性

Mybatis中的parameterType属性

本文主要记录传入复杂型参数中的Map

传入Map(一)

Mapper.XML配置

1
2
3
4
5
<!--parameterType传入的类型为Map,resultType返回为一个实体类-->
<select id="selectUser" parameterType="java.util.Map" resultType="AdminUser">
<!--#{name}花括号中的值为Map集合中的Key-->
SELECT * FROM USER WHERE username = #{name} AND sex =#{sex}
</select>

Mapper接口

1
2
//参数类型为Map,与Mapper.xml中的parameterType参数类型一致
public AdminUser selectUser(Map<String, Object> map) throws Exception;

测试类

1
2
3
4
5
6
//定义Map集合
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "张小明");
map.put("sex", "1");
//调用dao接口,并传入Map集合
对象.selectUser(map);

测试结果截图

可见已经查询出了该条数据

传入Map(二)

1
2
3
4
5
<!--parameterType传入的类型为Map,resultType返回为一个实体类-->
<select id="selectUser" parameterType="java.util.Map" resultType="AdminUser">
<!--#{user.username}花括号中的值为User实体类中属性-->
SELECT * FROM USER WHERE username = #{user.username} AND sex =#{user.sex}
</select>

Mapper接口

1
2
//参数类型为User实体类,使用@Param注解的作用是给参数命名
public AdminUser selectUser((@Param("user")AdminUser adminUser) throws Exception;

测试类

1
2
3
4
5
6
//定义实体类对象
AdminUser u = new AdminUser();
u.setSex("1");
u.setUname("张小明");
//调用接口,传入实体类对象
对象.selectUser(u);

测试结果截图

可见已经查询出了该条数据

结言

总体来说Mybatis的使用还是比较方便的,但需要对Sql语句有一定的掌握,当然也可以使用generator逆向工程生成Mapper,不过生成的代码也需要自己能够理解能够看懂,但在看懂的前提下,还是需要懂得sql语句,万变不离其宗。