这个问题是自己尝试用使用mybatisplus时报错,最后原因是我自己把spring-boot-starter-jdbc给排除掉了至于为什么排除掉会报这个错误可以参考感觉人家写的不错
一、先看下自己使用springboot去整合mybatisplus
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<!-- 引入mybatisplus start -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
BmsMybatisPlusConfig 配置类
@Configuration
@MapperScan(basePackages = "com.pingfan.dao.bms",
sqlSessionFactoryRef = "bmsSqlSessionFactory",sqlSessionTemplateRef = "bmsSqlSessionTemplate")
public class BmsMybatisPlusConfig {
@Bean(name = "bmsSqlSessionFactory")
public SqlSessionFactory bmsSqlSessionFactory(@Qualifier("bmsSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
MybatisConfiguration configuration=new MybatisConfiguration();
//匹配驼峰映射
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
// set datasource
factoryBean.setDataSource(dataSource);
// 实体类路径
factoryBean.setTypeAliasesPackage("com.pingfan.entity.bms");
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/bms/*.xml"));
return factoryBean.getObject();
}
@Bean("bmsSqlSessionTemplate")
public SqlSessionTemplate bmsSqlSessionTemplate(
@Qualifier("bmsSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
DruidDataSourceConfig 数据源配置类
@Configuration
public class DruidDataSourceConfig {
@Bean("bmsSource")
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl("jdbc:mysql://localhost:3306/bms_test");
druidDataSource.setUsername("root");
druidDataSource.setPassword("3306");
//druidDataSource.setDbType(DbType.mysql);
druidDataSource.setDriverClassName("");//如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
return druidDataSource;
}
}
dao 层
public interface UserDao extends BaseMapper<UserEntity> {
}
entity
@TableName(value = "users")
@Data
public class UserEntity {
private Long id;
private String name;
private String email;
private String password;
private Date createdAt;
private Date updatedAt;
}
测试
@RunWith(SpringRunner.class)//Test测试类要使用注入的类 不然会报空指针异常
@SpringBootTest
public class MyBatisPlusBootTest {
@Autowired
private UserDao userDao;
@Test
public void userTest(){
UserEntity userEntity = userDao.selectById(20);
System.out.println(userEntity);
}
}
另外自己的数据源是自己配置的所以不需要druid-spring-boot-starter来自动配置
可以用
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
总结:这种错误还真不容易找,如果是自己普通的maven项目的话,还真不容易找到这个问题。因为mybatis-plus-boot-starter里面有jdbc依赖,自己是因为报错把那个排除了造成这个问题。也试了一下普通maven项目 引入mybatis-plus还得引入spring-jdbc项目才跑起来了。