最近尝试mybatis的使用,遇到了各种坑,仿佛让我遇到了所有能出现的错,现将主要的坑记录下来,供大家吐槽和批评指正:
本问题使用的是IDEA+maven+mybatis。
- java.io.IOException: Could not find resource SqlMapConfig.xml
InputStream inputStream =
Resources.getResourceAsStream("SqlMapConfig.xml");//需要将配置文件放在classes里面
直接这么写报的错,因为我是创建了单独的资源文件resource,把配置文件是放在resource里面的,试了各种路径写法,绝对路径都不行,就是这么拽。
最后试了可以用的解决办法:
a 第一种亲自测试可行
InputStream inputStream = new FileInputStream("src/SqlMapConfig.xml"); // 相对路径,项目下的路径
b第二种 将配置文件拷贝到项目文件下的target/classes,这种一点都不爽,可能自己用IDEA和mybatis不熟,求拍醒。
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.ssm.mapper.UserMapper.selectByExample
这种也是tmd不爽,主要是不清楚配置详情。
解决办法需要将UserMapper.xml类似的配置文件放在接口同一目录下,是同一目录...也就是
a、xml文件所在的package名称要和interface对应的package名称对应;
b、xml文件的namespace要和xml文件的package名称一一对应;
c、检查函数名称能否对应上。
光这些还不够,还需要在pom.xml文件的build下加入:
<resources>
<resource>
<directory>src/main/java/</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/resources</directory>
</resource>
</resources>
这样问题就解决了。真尼玛坑爹啊...
- Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.XXX.BaseResultMap
因为我是用的mybatis-generator-core生成的接口、实体和xml配置文件,这个问题本以为是那儿配置的问题,但是研究来研究去,在读xml文件的时候发现生成的代码的resultMap(mybatis标签)有多个,并且id名称是一样的,因此报的错误。我将重名的id全部删除就可以了,生成的代码很多很复杂也很冗余,也是尼玛的坑。
<resultMap id="BaseResultMap" type="cn.ssm.po.User">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="birthday" jdbcType="DATE" property="birthday" />
<result column="sex" jdbcType="CHAR" property="sex" />
<result column="address" jdbcType="VARCHAR" property="address" />
</resultMap>
这三个是尝试遇到的比较难解决的问题,还有其他各种idea的小问题这里就不做书写了。