前言: 由于目前接手过的项目都是在Mapper层继承了一个公司框架师包装好的OTCMapper,就实现了可以不用写sql,进行增删改查的功能。我看了下包装的OTCMapper里面继承了mybatis通用的BaseMapper, ConditionMapper, IdsMapper, InsertListMapper,所以想着在自己搭建的项目里面也看看,具体是怎么使用的。
1、在依赖中心https://mvnrepository.com/ 获取需要的mybatis依赖
我取的1.1.3版本的
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
注:原来用的1.1.3版本,在使用selectAll通用查询时会报这个错误:Cause: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider. 后面找了很多方法,发现1.1.3版本和2.0.3版本比少了mapper-spring-1.0.4.jar包,这个包里面才有tk.mybatis.spring.annotation.MapperScan。
2、封装了一个公用mapper接口继承了上面说的四个通用mapper,后续别的接口如果想直接使用通用mapper可以直接继承公用mapper
Mapper:
import tk.mybatis.mapper.common.BaseMapper;
import tk.mybatis.mapper.common.ConditionMapper;
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
public interface Mapper<T> extends BaseMapper<T>, ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T>{
}
TestMapper:
import com.cmf.demo.orm.UserEntity;
import org.apache.ibatis.annotations.Param;
@org.apache.ibatis.annotations.Mapper
public interface TestMapper extends Mapper<UserEntity> {
UserEntity queryUser(@Param("id") String id);
}
这样在注入TestMapper时就可以直接使用通用的增删改查操作了,但是这样我调getUser()查询的时候报错了,由于没有任何日志记录半天也没发现问题在哪,控制台日志数据下篇在讲吧。
代码如下:
service:
@Service
public class TestService {
@Autowired
private TestMapper testMapper;
public UserEntity getUser(String id){
Condition condition = new Condition(UserEntity.class);
condition.createCriteria().andEqualTo("userId",id);
List<UserEntity> entity= testMapper.selectByCondition(condition);
return entity.get(0);
}
}
UserEntity:
@Getter
@Setter
@ToString
@Table(name = "Tuser") //指定表名
public class UserEntity {
@Column(name = "user_id") //指定表字段
private String userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_status")
private String userStatus;
}
3、server这么写运行也没有报错,但是查询出来数据一直为空且数据库里面确实是有数据,只能说明我的使用还是存在问题;
后面尝试了几种方法,还是根据平常公司项目的配置加了下面几行配置后,报selectByIds的entity类必须要有@Id注解,我在UserEntity的userId上加了@Id注解后变调用成功了;
yml配置文件:
mapper:
mappers: com.cmf.demo.mapper.Mapper //这是我写的通用Mapper的具体路径
entity:
@Getter
@Setter
@ToString
@Table(name = "Tuser")
public class UserEntity {
@Id //因为Mapper继承了IdsMapper且TestMapper泛型是这个实体类,所以需要加这个注解
@Column(name = "user_id")
private String userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_status")
private String userStatus;
}
加上这个后增删改查通用Mapper就可以正常使用了。