abel533 / MyBatis-Spring-Boot

Spring Boot集成MyBatis的基础项目
3.37k stars 1.59k forks source link

抽取通用Dao层,Dao Bean无法被扫描到 #42

Closed pi408637535 closed 7 years ago

pi408637535 commented 7 years ago

image

想抽取给通用Dao层,这样防止以后想买不用Mybatis。但是发现Dao 下面的Bean无法被扫描到。想问这个是为什么

abel533 commented 7 years ago

说的有点乱,不是很明白你的意思。

huan208050 commented 7 years ago

我也发现这个问题,不过找到解决办法,重点是,在dao上面,标注@Mapper,不过这个Mapper是org.apache.ibatis.annotations.Mapper,跟继承的那个Mapper(tk.mybatis.mapper.common.Mapper)不一样 import com.twisin.web.push_wsb.domain.auth.User; import tk.mybatis.mapper.common.Mapper;

@org.apache.ibatis.annotations.Mapper public interface IUserDao extends Mapper{

}

abel533 commented 7 years ago

@huan208050 你可以自己建个接口(MyMapper)继承Mapper,然后在用别的接口继承MyMapper。

huan208050 commented 7 years ago

@abel533 您好,谢谢您的回复。我尝试去创建自己的MyMapper,然后继承Mapper,之后我自己的接口,继承MyMapper,传入泛型 , 但自己创建的MyMapper就报错,代码如下,报错也列出: 1.BaseMapper

@org.apache.ibatis.annotations.Mapper
public interface BaseMapper<T> extends Mapper<T>{
}

2.mapper

public interface UserMapper extends BaseMapper<User> {
}

3.BaseService

@Service
public abstract class BaseService<T> {
    @Autowired
    protected BaseMapper<T> mapper;
    public int save(T entity){
        return mapper.insert(entity);
    }
}

然后,启动就会报错(springboot环境):

tk.mybatis.mapper.MapperException: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

我尝试着,去按照前面的一个解决方案,在resource目录下,创建META-INF 目录,并创建spring-devtools.properties,然后使用了输入

restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

,然后并没有效果......目前不知道往哪个方向去查找问题了,能给个方案或者方向吗?谢谢您!!!

abel533 commented 7 years ago

不能扫描到通用接口。

huan208050 commented 7 years ago

@abel533 十分感谢,我把BaseMapper放在了外层,不在mapper包里面,这样就可以正常工作了,也不用在每个自定义mapper上面添加mybatis的@Mapper注解了,谢谢!!!