Mybatis 的参数深入

parameterType 配置参数 

用于指定传入参数的类型,如果传入一个类的对象,所以类型就写类的全限定名称。

该属性的取值可以 是基本类型引用类型(例如:String 类型)、还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类。

 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名, 而我们的是实体类并没有注册别名,所以必须写全限定类名。

在 mybatis 的官方文档也是可以查看的:

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
ineger Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal

包装对象作为参数 

需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中。 

如下:

public class QueryVo implements Serializable { 
 private User user; 
 public User getUser() {
   return user; 
 } 
 public void setUser(User user) {  
     this.user = user;  
    }
} 

在接口中:

public interface IUserDao {   
  List<User> findByVo(QueryVo vo);
} 
<selectid="findByVo"resultType="com.YCy.domain.User"parameterType="com.Ycy.domain.QueryVo">  
    select * from user where username like #{user.username}; 
</select> 

ognl 表达式:   
       它是 apache 提供的一种表达式语言,
       全称是:   Object Graphic Navigation Language  
       对象图导航语言   
       它是按照一定的语法格式来获取数据的。  
       语法格式就是使用  #{对象.对象}的方式 
       #{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用 getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user. 而直接写 username。

如果直接是一般的属性,如User类中有一个username属性,我们把User作为对象传入参数,我们直接使用,#{username},

因为parameterType已经提供了属性所属的类,就不需要在使用对象名


 

猜你喜欢

转载自blog.csdn.net/weixin_43725517/article/details/108918856