前言
最近备战秋招,尝试学习开发个人项目的时候遇到一些问题,写博客记录一下。本文针对SpringBoot整合MyBatis后,对数据的查询方法。
主要问题:数据库表的字段命名规范和Java实体类属性的命名规范不同,比如:
所以在Mapper.xml中写查询语句偷懒的话,会出现以下情况:
因为查询出来的值对应的是数据库的字段dish_id
,就不会赋值给Dish
对象的dishId
字段。
摸索之后,总结了几种解决办法。
1. 用别名 + XML
<select id="selectAll" resultType="Dish">
select dish_id as dishId, name, time, difficulty from dish_table
</select>
2. 配置ResultMap
<select id="selectAll" resultMap="dishResultMap">
select dish_id, name, time, difficulty from dish_table
</select>
<resultMap id="dishResultMap" type="Dish">
<id property="dishId" column="dish_id" />
<result property="name" column="name"/>
<result property="time" column="time"/>
<result property="difficulty" column="difficulty"/>
</resultMap>
3. 注解 + 别名
@Mapper
public interface DishMapper{
@Select("select dish_id as dishId, name, time, difficulty from dish_table where dish_id = #{dish_id}")
Dish selectById(@Param("dish_id") Integer id);
}
以上三种方法都可以解决
总结
一些博客说推荐用xml进行开发,因为注解只适用于简单sql,所以个人先摒弃第三种方法。
对于使用xml文件的两种方法,我认为数据库表中,如果有下划线的字段较多,ResultMap是个更好的选择,比较清晰;用别名的方法唯一好处就是偷懒,方便。所以更建议第二种方法,做个学院派的开发者。