“myabtis的.xml文件中有些字段(变量)的数据可以查出来,有些字段(变量)的数据查询不出来。”刚学springboot+myabtis的同学经常有这样的疑问。
看完此篇,你就可以完全掌握解决办法了。记得点赞哦!鼓励一下博主。
现在的.xml文件几乎都使用mybatis-gennerator插件自动生成所需要的dao、bean、mapper xml文件。那么自动生成后的bean中的变量名和数据库的表中的字段名是完全对应的。
private int id;
private String userName;
private String hashedPassword;
生成的实体类是这样的。不过表中带有下划线的字段 自动生成的实体类变量 不会带有下划线。这时候在.xml文件中select语句加上resultType=“com.***.***.Student”是获取不到userName和hashedPassword的值(可以获取id的值)。因为加上resultType查询的结果中USER_NAME对应不上实体类中userName(hashedPassword也是一样)。如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个 基本的 SQL 特性)来匹配标签。
<select id="selectStudents" resultType="com.***.***.Student">
select *
from STUDENT
</select>
<!--使用别名解决字段和变量的对应问题-->
<select id="selectStudents" resultType="com.***.***.Student">
select ID, USER_NAME AS userName, HASHED_PASSWORD AS hashedPassword
from STUDENT
</select>
但是取别名指标不治本,每次select时都要写别名就很麻烦了。不过麻烦的事情,大神们早就想好了解决办法,不然mybatis怎么能越来越流行。
在自动生成.xml时文件中会生成resultMap代码。
<resultMap id="BaseResultMap" type="com.ax.ams.entity.DcBaseInfoCompanyGis" >
<id column="ID" property="id" jdbcType="INT" />
<result column="USER_NAME" property="userName" jdbcType="VARCHAR" />
<result column=HASHEDPASSWORD" property="hashedPassword" jdbcType="VARCHAR" />
</resultMap>
<!--resultMap可以轻松解决字段对应的问题-->
<select id="selectStudents" resultMap="BaseResultMap">
select *
from STUDENT
</select>
resultMap中的column一定跟数据库的表中字段完全一致,property一定要和实体类的变量完全一致。