现在开始连接数据库还有测试的踩坑之旅
mybatis生成数据
用mybatis生成entity和mapper和mapping的时候,重新生成了一遍那个client类,发现下面成功不是空指针的测试的时候有报错,resultmap already contains之类的,发现在那个xml文件里面有两个id为BaseResultMapper的resultMap,应该是生成的时候除了bug,不知道那个override属性有什么用
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
自行写测试的函数和sql,主要报错:autowired报引用的service是空指针,但是配置感觉没问题
Service模块的test文件夹下面创建测试类,
public class AppTest { @Autowired OrderMainOrderService orderMainOrderService; /** * Rigorous Test :-) */ @Test public void shouldAnswerWithTrue() { assertTrue( true ); } @Test public void orderListTest(){ System.out.println(orderMainOrderService.searchOrderList("2018-05-17 0:00:00","2018-05-23 0:00:00","赵四",1)); } }
直接报空指针异常,如果加上头上面的注解
直接挂红灯,因为那些配置文件在web层,web层依赖于Service,果断放弃。
在web层加了个test包(可能因为创模块的时候的问题,好像没有test目录)
测试报了错,还好不是空指针
继续踩坑 报了其他错:主项目build错误
网友说多模块的话需要build之后才能引用其他模块的东西,可能web是因为这样才不能获取service的
但是build报错 Error:java: Compilation failed: internal java compiler error
IntelliJ Idea编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8(可能是1.7但是项目是1.8的)
照着之前网上的说法去settings-compiler-java compiler-设置module的compiler,看到这里面的都是1.7什么的,改完了会自动退回
网友说的版本:https://blog.csdn.net/u013041642/article/details/78934157
新建的多模块maven项目,有时候会有个专门的module用来部署服务,各种配置文件几种在这里。配置spring的配置文件的时候,
component-scan想用来扫描其他module下的包,但却识别不了,因为要部署的module的pom中引了其他module的依赖以后,当前
项目中其他的module还没有打包,所以找不到。给整个工程编译打包一下就可以了。
想起之前学长配置了项目编译的java版本,在父项目的pom.xml里面设置build,这个跟dependencyManagement同级
<build> <finalName>ecar_parent</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
最后项目正常build:
继续报错java.lang.NoClassDefFoundError: javax/servlet/ServletContext
理解一下总之缺了dependency,然后意识到web层可能没有这个依赖,但是父项目的pom.xml是有的,暂时记住这个。
mybatis识别sql错误
如果传一个sql当作参数,需要在传入sql的时候写成:@Param(value="sql")String sql
在xml里面写成:
<select id="searchOrderList" resultMap="BaseResultMap" parameterType="java.lang.String">
${sql}
</select>
还有就是日期使用引号传入、or查询的时候加入小括号不然会先执行and然后再执行or 等小错误,最后都解决了。