一、web访问问题
先上图:
操作:直接在浏览器访问url,controller中只返回一个字符串。
问题:大概意思就是映射错误,实际就是没扫描到什么东西,我这个项目中呢,每个模块都是一个jar,所以应该是没有引入bean,service,controller以及mapper。
解决:上图
还有两步,一是在serviceImpl类上面加上@service,二就是要在web的pom.xml中添加依赖项目service和serviceImpl,两个不加任何一个都会出错,可以测试。
经过上面的操作,发现还是有错,那是因为没有index.html,如果是controller,他返回的是一个页面,把@Controller改成RestController,将返回字符串。
二、调用API问题
操作:调用该方法,报错是空指针,指示36行。
问题:扫描不到mapper.xml的配置文件(两个java类)。
解决:在上图启动方法中,加上“com.banry.pscm.tenant.persist.dao.config”,也就是上图被注释的那句。
@Configuration public class MyBatisConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource(){ return new org.apache.tomcat.jdbc.pool.DataSource(); } @Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:com/banry/pscm/tenant/persist/mapper/*.xml")); return sqlSessionFactoryBean.getObject(); } }
@Configuration @AutoConfigureAfter(MyBatisConfig.class) public class MyBatisMapperScannerConfig { public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); mapperScannerConfigurer.setBasePackage("com.banry.pscm.tenant.persist.dao"); return mapperScannerConfigurer; } }
三、xml里的sql无效问题
问题描述:测试controller,如果sql写在mapper.xml文件中的方法就说是绑定无效,如果sql是用注解写在mapper里的,就可以。
解决:第一步:选中web项目,右击Run As > Run Configurations,找到Spring Boot App下面运行的该项目,选择右侧classpath,如下图:
第二步:把mapper.xml在的那个包,复制一份到web中,就可以了。
最后:项目中的bean的名称最好和数据库相同,以及mapper.xml中import的bean名称要和项目中自动生成的bean相同。因为我遇到了,所以标注一句。
以上问题的解决办法只是粗略的解决,出现其他问题,还需具体分析,这只是我目前遇到的。