今天讲讲mybaits传递参数的四种方式
1.通过顺序来传递参数
Mapper接口
User getuNameAnduAccount(String uAccount,String uName);
Mapper.xml文件
<!-- User getuNameAnduAccount(String uAccount,String uName); -->
<select id="getuNameAnduAccount" resultMap="UserResultMap2">
select * from user where user_account = #{param1} and user_name = #{param2}
</select>
或者这么写
<!-- User getuNameAnduAccount(String uAccount,String uName); -->
<select id="getuNameAnduAccount" resultMap="UserResultMap2">
select * from user where user_account = #{arg0} and user_name = #{arg1}
</select>
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
2.通过@Param注解来传递参数
Mapper接口
User getuNameAnduAccount(@Param("uAccount")String uAccount,@Param("uName")String uName);
Mapper.xml文件
<!-- User getuNameAnduAccount(String uAccount,String uName); -->
<select id="getuNameAnduAccount" resultMap="UserResultMap2">
select * from user where user_account = #{uAccount} and user_name = #{uName}
</select>
#{}里面的名称对应的是注解 @Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,推荐使用。
3.Java Bean 来传递参数
User实体类
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2742670276778081094L;
private Integer id;
private String uName;
private String uAccount;
private String uPassword;
private String uGender;
private Timestamp uCreateTime;
private Integer uState;
private Set<Role> roles;
public User() {
}
public User(String uName, String uAccount, String uPassword, String uGender, Timestamp uCreateTime,
Integer uState) {
this.uName = uName;
this.uAccount = uAccount;
this.uPassword = uPassword;
this.uGender = uGender;
this.uCreateTime = uCreateTime;
this.uState = uState;
}
public User(String uName, String uAccount, String uPassword, String uGender, Timestamp uCreateTime, Integer uState,
Set<Role> roles) {
this.uName = uName;
this.uAccount = uAccount;
this.uPassword = uPassword;
this.uGender = uGender;
this.uCreateTime = uCreateTime;
this.uState = uState;
this.roles = roles;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuAccount() {
return uAccount;
}
public void setuAccount(String uAccount) {
this.uAccount = uAccount;
}
public String getuPassword() {
return uPassword;
}
public void setuPassword(String uPassword) {
this.uPassword = uPassword;
}
public String getuGender() {
return uGender;
}
public void setuGender(String uGender) {
this.uGender = uGender;
}
public Timestamp getuCreateTime() {
return uCreateTime;
}
public void setuCreateTime(Timestamp uCreateTime) {
this.uCreateTime = uCreateTime;
}
public Integer getuState() {
return uState;
}
public void setuState(Integer uState) {
this.uState = uState;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "User [id=" + id + ", uName=" + uName + ", uAccount=" + uAccount + ", uPassword=" + uPassword
+ ", uGender=" + uGender + ", uCreateTime=" + uCreateTime + ", uState=" + uState + ", roles=" + roles
+ "]";
}
}
Mapper接口
User getuNameAnduAccount(User user);
Mapper.xml文件
<!-- User getuNameAnduAccount(User user);-->
<select id="getuNameAnduAccount" resultMap="UserResultMap2">
select * from user where user_account = #{uAccount} and user_name = #{uName}
</select>
#{}里面的名称对应的是 User类里面的成员属性
4.使用Map来传递参数
Mapper接口
User getuNameAnduAccount(Map<String, Object> map);
Mapper.xml文件
<!-- User getuNameAnduAccount(Map<String, Object> map);-->
<select id="getuNameAnduAccount" resultMap="UserResultMap2">
select * from user where user_account = #{uAccount} and user_name = #{uName}
</select>
#{}里面的名称对应的是 Map里面的key名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。