MyBatis基础⑤

网友投稿 704 2022-11-10

MyBatis基础⑤

MyBatis基础⑤

文章目录

​​MyBatis中的参数传递​​

​​多个参数​​​​单个参数​​

​​注解开发​​

MyBatis中的参数传递

Mybatis 接口方法中可以接收各种各样的参数,如下:

多个参数单个参数:单个参数又可以是如下类型

POJO 类型Map 集合类型Collection 集合类型List 集合类型Array 类型其他类型

多个参数

如下面的代码,就是接收两个参数,而接收多个参数需要使用 ​​@Param​​ 注解,那么为什么要加该注解呢?这个问题要弄明白就必须来研究Mybatis 底层对于这些参数是如何处理的。

User select(@Param("username") String username,@Param("password") String password);

我们在接口方法中定义多个参数,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​​ 接口中定义如下方法

User select(String username,String password);

在​​UserMapper.xml​​ 映射配置文件中定义SQL

或者

运行代码结果如下

在映射配合文件的SQL语句中使用用 ​​arg​​​ 开头的和 ​​param​​​ 书写,代码的可读性会变的特别差,此时可以使用 ​​@Param​​ 注解。

在接口方法参数上使用 ​​@Param​​​ 注解,Mybatis 会将 ​​arg​​ 开头的键名替换为对应注解的属性值。

代码验证:

在​​UserMapper​​​ 接口中定义如下方法,在​​username​​​ 参数前加上​​@Param​​ 注解

User select(@Param("username") String username, String password);

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类型,​​​参数占位符名称​​ 叫什么都可以。尽量做到见名知意

注解开发

使用注解开发会比配置文件开发更加方便。如下就是使用注解进行开发

@Select(value = "select * from tb_user where id = #{id}")public User select(int id);

注意:注解是用来替换映射配置文件方式配置的,所以使用了注解,就不需要再映射配置文件中书写对应的​​statement​​

Mybatis 针对 CURD 操作都提供了对应的注解,已经做到见名知意。如下:

查询 :@Select添加 :@Insert修改 :@Update删除 :@Delete

接下来我们做一个案例来使用 Mybatis 的注解开发

代码实现:

将之前案例中​​UserMapper.xml​​​ 中的 根据id查询数据 的​​statement​​ 注释掉

在​​UserMapper​​​ 接口的​​selectById​​ 方法上添加注解

运行测试程序也能正常查询到数据

注意:在官方文档中 ​​入门​​ 中有这样的一段话:

所以,注解完成简单功能,配置文件完成复杂功能。

而我们之前写的动态 SQL 就是复杂的功能,如果用注解使用的话,就需要使用到 Mybatis 提供的SQL构建器来完成,而对应的代码如下:

上述代码将java代码和SQL语句融到了一块,使得代码的可读性大幅度降低。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:前后端的身份认证①(Session认证机制)
下一篇:DOM事件高级③(阻止事件冒泡、事件委托)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~