本文目录

一、报错信息

二、出错原因

三、解决方案

方案1:无条件的

 方案2:添加条件的

四、distinct属性


一、报错信息

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'distinct' in 'class com.uiotsoft.subsite.mybatis.model.TCmsSite'

【Java异常】使用通用Mapper ,报There is no getter for property named ‘distinct‘ in ‘class 错_java

二、出错原因

selectByExample()方法传递的参数错误,应该传example类型,而不是实体类。(开源中国开发者们提供)

最近在项目中使用通用Mapper的时候,有一个方法mapper.selectByExample() ,我当时传入的参数类型为T (泛型),就报了这个错。具体如代码所示:selectByExample()方法里面传递的是具体的实体类:

public TCmsSite findByDomain(String domain) {

    TCmsSite site = new TCmsSite();
    site.setDomain(domain);

    List<TCmsSite> tCmsSites = siteMapper.selectByExample(site);

    if (tCmsSites.size() > 0){
        site = tCmsSites.get(0);
    }

    return site;
}

三、解决方案

目前有两种解决方案:两种方案其实大同小异,写在这里只是想提供更多的思路,对于每个项目,可选择具体的方案。

方案1:无条件的

修改selectByExample()方法传递的参数类型,传入Example类型参数,对于我的项目而言,具体的代码修改方法如下:

public TCmsSite findByDomain(String domain) {

    TCmsSite site = new TCmsSite();

    Example example = new Example(TCmsSite.class);
    List<TCmsSite> tCmsSites = siteMapper.selectByExample(example);

    if (tCmsSites.size() > 0){
        site = tCmsSites.get(0);
    }

    return site;
}

 方案2:添加条件的

public TCmsSite findByDomain(String domain) {

    TCmsSite site = new TCmsSite();

    Example example = new Example(TCmsSite.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andEqualTo("domain", domain);

    List<TCmsSite> tCmsSites = siteMapper.selectByExample(example);

    if (tCmsSites.size() > 0){
        site = tCmsSites.get(0);
    }

    return site;
}

四、distinct属性

【Java异常】使用通用Mapper ,报There is no getter for property named ‘distinct‘ in ‘class 错_mybatis_02

 

 

以上是目前想到的解决方案,后续有好的方案,再更新。欢迎大家提出新的思路哦~~~

 

完结!