-
sql语句是否正确
查看Mapper.xml文件中的sql语句是否不会出现语法错误:如
查:select * from 数据库表名 where x=#{}
select * from tb_name where··group by··;
增:insert into tb_name(id···)values(),(),();
删:delete from tb_name where id=3; <!--delete后面有"from"-->
改:update tb_name set ··(score=189) where ··(id=2)<!--update后面有"from"-->
- 相关Mapper.xml是否关联到对应的Mapper.java接口
<mapper namespace="com.bjpowernode.mybatis.mapper.ClazzMapper">
<!--namespace需要写全限定名称-->
- sql语句id是否与对应Mapper.java接口方法相同
<!--如果Mapper.java接口的方法名是selectById(Integer id),那么Mapper.xml的sql语句的id需要一一对应-->
<select id="selectById" resultType="xxx">
-
返回值类型是否正确
select语句是要在Mapper.xml确定返回类型的:如
<select id="selectxxx" resultType="Car"> <!--resultType中选择返回类型,一般是某个pojo类的全限定名称,可以使用别名-->
- 查看是否在核心配置文件(mybatis-config.xml)中开启驼峰命名自动映射
<settings><!--开启驼峰命名自动映射-->
<setting name="mapUnderscoreToCamelCase" value="ture"/>
</settings>
如果没有开启驼峰命名自动映射:
也可以使用as给列起别名(使sql字段名与相关pojo类对应的属性名相同)
也可以使用resultMap进行结果映射(什么是resultMap结果映射结尾补充)
- Mapper.xml是否和mapper在同一个包下(使用驼峰自动映射时)
- Mapper.xml映射到核心配置文件(mybatis.config.xml)是否书写正确
<mappers>
<!--下面三种方式任都可以,使用第二种是可以把鼠标放在CarMpper名上,可以看到对应哪个模块的-->
<mapper resource="com/bjpowernode/mybatis/mapper/CarMapper.xml"/>//到 .xml文件
<mapper class="com.bjpowernode.mybatis.mapper.CarMapper"/> //到 Mapper.java类(建议使用这种)
<package name="com.bjpowernode.mybatis.mapper"/>
</mappers>
- 在开启驼峰映射的基础上:查看pojo类属性名与数据库表中字段名是否对应
使用前提: 属性名遵循Java规范,数据库表列名遵循SQL的命名规范
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式
SQL命名规范:全部小写,单词之间用下划线分割
例:carNum car_num
10.一个项目有多个模块是,而不同模块下面存在相同的接口名称,那么可能在核心配置文件中映射到了其他模块接口(这是我遇到的BindingException异常)
比如:我在同一个项目中,存在A和B模块,而A和B模块存在相同的接口CarMapper,
在使用B模块时:可能会映射到了A模块的CarMapper接口
解决方法就是:在左边的Maven中右击鼠标选择:-Unlink Maven Projects(关闭Maven项目)
希望上面的内容可以帮助到大家!!!
下面内容与本专题无关
<!--专门定义一个结果集映射,在这个结果集映射当中指定数据库表的字段名和Java类的属性名的对应关系
1.type属性,用来指定POJO类的类名
2.id属性:指定resultMap的唯一标识,这个id将来要在select标签中使用
3.javaType="":返回的值在pojo类中的类型
4.jdbc="":返回的值在数据库表中的类型
-->
<resultMap id="carResultMap" type="Car">
<!--要全限定名称,起别名之后可以直接用类名/自己起的名-->
<!--建议配置一个id标签,这样可以提高效率,不是必须的-->
<id property="POJO类的属性名" column="数据库表的字段名(主键)"/>
<result property="POJO类的属性名" column="数据库表的字段名"/>
<result property="POJO类的属性名" column="数据库表的字段名"/>
....
</resultMap>
<!--resultMap属性值是,上面的resultMap的id-->
<select id="selectAllByResultMap" resultMap="carResultMap">
select * from t_car
</select>