一、报错信息
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'distinct' in 'class com.uiotsoft.subsite.mybatis.model.TCmsSite'
二、出错原因
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属性
以上是目前想到的解决方案,后续有好的方案,再更新。欢迎大家提出新的思路哦~~~
完结!