引言
这篇文章主要记录后端开发中遇到的关于mybatis框架的一些问题
问题
1、head_url与headUrl
对实体进行建表的时候,对于实体的属性常常不会使用 ‘_’ 符号来命名,多采用小驼峰的方式
ublic class User {
@JsonProperty("head_url")
@Schema(name = "head_url", description = "头像", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String headUrl;
}
但是在json数据中多采用 ‘_’ 符号来分割两个名词
前端发来的数据是以`head_url`的形式而后端user对象的属性是`headUrl`,使用JsonProperty来告诉Jackson序列化库在将对象转换为JSON时,使用`head_url`;
<insert id="addUser" parameterType="com.cloud.dto.entity.user.User"> INSERT INTO user (username, password, name, phone, head_url) VALUES ( #{username}, #{password}, #{name}, #{phone}, #{headUrl} ) </insert>
上面的例子时一个插入sql,user后面的括号中需要使用head_url来匹配user实体中的注解,而#{headUrl}则对应的是user实体中的get/set headUrl方法。
2、根据id删除多条记录
在mysql数据库中,可以通过sql语句中的`in`来对操作多条记录
DELETE
FROM
`user`
WHERE `user`.id IN (18, 19)
但使用mybatis就需要用到一个特殊的语法—foreach
<delete id="deleteUser" parameterType="java.util.List">
DELETE
FROM user
WHERE user.id IN
<foreach collection="userIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
将传给mybatis的参数使用collection接收,使用open、separator以及close解构集合数据,最后再通过foreach遍历
3、Invalid bound statement (not found):com.cloud.mapper.evaluate.ProgramMapper. getProgramList
这个问题大概的意思是mybatis无法mapper.xml文件,按照以下的顺序进行查看。
1、查看文件结构是否正确,两个mapper目录中的组织形式要一致
2、查看mapper中的函数名与mapper.xml中的id是否一致
3、查看mapper、service、controller是否正确添加注释,分别没@Mapper、@Service、@RestController
4、查看mapper.xml中的namespace是否与其本身的位置一致,我就是因为第一次创建xml文件的时候,将其放在了错误的位置,于是namespace中就是错误的路径,当调整xml文件的存放位置后,namespace并不会更改。