Mybatis的几种传参方式详解
在Mybatis中,SQL语句的传参方式有多种,这里将对常用的几种传参方式进行详细讲解。
1. 基本类型传参
基本类型包括字符串、数字、布尔类型等,这些类型可以直接作为SQL语句的参数。
1.1. 传入单个参数
使用#
符号将参数占位,例如:
SELECT * FROM user WHERE name = #{name}
在使用时,可以在方法中传入对应类型的参数,例如:
@Select("SELECT * FROM user WHERE name = #{name}")
User getUserByName(String name);
1.2. 传入多个参数
如果需要传入多个参数,可以在SQL语句中使用${}
符号,例如:
SELECT * FROM user WHERE name = #{name} AND age > ${minAge}
在使用时,可以在方法中传入多个参数,例如:
@Select("SELECT * FROM user WHERE name = #{name} AND age > ${minAge}")
List<User> getUserList(String name, int minAge);
2. 对象类型传参
当传入的参数较多时,可以将参数封装成一个对象,传入一个对象类型参数。在SQL语句中使用#{}
符号,引用对象中的属性,例如:
SELECT * FROM user WHERE name = #{name} AND age > #{minAge}
在使用时,可以传入对应的对象类型参数,例如:
public class UserQuery {
private String name;
private int minAge;
// Getter、Setter、toString省略...
}
@Select("SELECT * FROM user WHERE name = #{name} AND age > #{minAge}")
List<User> getUserList(UserQuery query);
3. Map类型传参
使用Map类型传参可以在不确定参数数量或者动态参数的情况下,对参数进行传递。在SQL语句中使用#{}
符号,以Map的键值对形式引用参数,例如:
SELECT * FROM user WHERE name = #{name} AND age > #{minAge}
在使用时,可以传入一个Map类型参数,例如:
@Select("SELECT * FROM user WHERE name = #{name} AND age > #{minAge}")
List<User> getUserList(Map<String, Object> params);
4. POJO类型传参
使用POJO(Plain Old Java Object)类型传参是一种灵活性高的方式,将传递的参数都封装在一个POJO对象中,可以直接在参数列表中使用对象,例如:
public class User {
private Long id;
private String name;
private Integer age;
// Getter、Setter、toString省略...
}
@Select("SELECT * FROM user WHERE name = #{name} AND age > #{minAge}")
List<User> getUserList(User param);
5. 数组类型传参
数组类型传参适用于需要传输多个值到SQL语句的查询条件中的情况。在SQL语句中使用$
符号,引用数组中每个元素,例如:
SELECT * FROM user WHERE name IN
<foreach collection="arr" item="item" open="(" separator="," close=")">
#{item}
</foreach>
在使用时,可以传入一个数组类型参数,例如:
@Select("SELECT * FROM user WHERE name IN ${nameArr}")
List<User> getUserList(String[] nameArr);
6. List类型传参
使用List类型传参也可以实现上述数组类型传参的功能。在SQL语句中使用$
符号,引用List中每个元素,例如:
SELECT * FROM user WHERE name IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
在使用时,可以传入一个List类型参数,例如:
@Select("SELECT * FROM user WHERE name IN ${nameList}")
List<User> getUserList(List<String> nameList);
到这里为止,就完成了Mybatis的几种传参方式详解的讲解。
示例说明
示例1:使用对象类型传参
public class UserQuery {
private String name;
private int minAge;
// Getter、Setter、toString省略...
}
@Select("SELECT * FROM user WHERE name = #{name} AND age > #{minAge}")
List<User> getUserList(UserQuery query);
在使用时,可以这样传参:
UserQuery query = new UserQuery();
query.setName("张三");
query.setMinAge(18);
getUserList(query);
示例2:使用数组类型传参
SELECT * FROM user WHERE name IN
<foreach collection="arr" item="item" open="(" separator="," close=")">
#{item}
</foreach>
在使用时,可以这样传参:
String[] names = {"张三", "李四", "王五"};
getUserList(names);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis的几种传参方式详解 - Python技术站