文章目录
- 注解开发
MyBatis中的参数传递
Mybatis 接口方法中可以接收各种各样的参数,如下:
- 多个参数
- 单个参数:单个参数又可以是如下类型
- POJO 类型
- Map 集合类型
- Collection 集合类型
- List 集合类型
- Array 类型
- 其他类型
多个参数
如下面的代码,就是接收两个参数,而接收多个参数需要使用 @Param
注解,那么为什么要加该注解呢?这个问题要弄明白就必须来研究Mybatis 底层对于这些参数是如何处理的。
我们在接口方法中定义多个参数,Mybatis 会将这些参数封装成 Map 集合对象,值就是参数值,而键在没有使用 @Param
注解时有以下命名规则:
- 以 arg 开头 :第一个参数就叫 arg0,第二个参数就叫 arg1,以此类推。如:
map.put(“arg0”,参数值1);
map.put(“arg1”,参数值2);
- 以 param 开头 : 第一个参数就叫 param1,第二个参数就叫 param2,依次类推。如:
map.put(“param1”,参数值1);
map.put(“param2”,参数值2);
代码验证:
- 在
UserMapper
接口中定义如下方法
- 在
UserMapper.xml
映射配置文件中定义SQL
或者
- 运行代码结果如下
在映射配合文件的SQL语句中使用用 arg
开头的和 param
书写,代码的可读性会变的特别差,此时可以使用 @Param
注解。
在接口方法参数上使用 @Param
注解,Mybatis 会将 arg
开头的键名替换为对应注解的属性值。
代码验证:
- 在
UserMapper
接口中定义如下方法,在username
参数前加上@Param
注解
Mybatis 在封装 Map 集合时,键名就会变成如下:
map.put(“username”,参数值1);
map.put(“arg1”,参数值2);
map.put(“param1”,参数值1);
map.put(“param2”,参数值2);
- 在
UserMapper.xml
映射配置文件中定义SQL
- 运行程序结果没有报错。而如果将
#{}
中的username
还是写成arg0
- 运行程序则可以看到错误
结论:以后接口参数是多个时,在每个参数上都使用 @Param
注解。这样代码的可读性更高。
单个参数
- POJO 类型
直接使用。要求属性名
和参数占位符名称
一致 - Map 集合类型
直接使用。要求map集合的键名
和参数占位符名称
一致 - Collection 集合类型
Mybatis 会将集合封装到 map 集合中,如下:
map.put(“arg0”,collection集合);
map.put(“collection”,collection集合;
- 可以使用
@Param
注解替换map集合中默认的 arg 键名。 - List 集合类型
Mybatis 会将集合封装到 map 集合中,如下:
map.put(“arg0”,list集合);
map.put(“collection”,list集合);
map.put(“list”,list集合);
- 可以使用
@Param
注解替换map集合中默认的 arg 键名。 - Array 类型
Mybatis 会将集合封装到 map 集合中,如下:
map.put(“arg0”,数组);
map.put(“array”,数组);
- 可以使用
@Param
注解替换map集合中默认的 arg 键名。 - 其他类型
比如int类型,参数占位符名称
叫什么都可以。尽量做到见名知意
注解开发
使用注解开发会比配置文件开发更加方便。如下就是使用注解进行开发
注意:
- 注解是用来替换映射配置文件方式配置的,所以使用了注解,就不需要再映射配置文件中书写对应的
statement
Mybatis 针对 CURD 操作都提供了对应的注解,已经做到见名知意。如下:
- 查询 :@Select
- 添加 :@Insert
- 修改 :@Update
- 删除 :@Delete
接下来我们做一个案例来使用 Mybatis 的注解开发
代码实现:
- 将之前案例中
UserMapper.xml
中的 根据id查询数据 的statement
注释掉
- 在
UserMapper
接口的selectById
方法上添加注解
- 运行测试程序也能正常查询到数据
注意:在官方文档中 入门
中有这样的一段话:
所以,注解完成简单功能,配置文件完成复杂功能。
而我们之前写的动态 SQL 就是复杂的功能,如果用注解使用的话,就需要使用到 Mybatis 提供的SQL构建器来完成,而对应的代码如下:
上述代码将java代码和SQL语句融到了一块,使得代码的可读性大幅度降低。