Association joint select uses places that are prone to travel problems
mapper configuration:
- <resultMap type="com.demo.sys.entity.Menu" id="menuMap">
- <id property="id" column="id" />
- <result property="name" column="menu_name" />
- <result property="url" column="url" />
- <result property="active" column="isactive" />
- <result property="createDate" column="createdate" />
- <result property="updateDate" column="updatedate" />
- <result property="bak1" column="bak1" />
- <result property="bak2" column="bak2" />
- <result property="bak3" column="bak3" />
- <result property="locale" column="locale" />
- <result property="orderNum" column="ordernum" />
- <association property="module" column="module_id" resultMap="moduleMap" select="queryModule">
- </association>
- </resultMap>
- <resultMap type="com.demo.sys.entity.Module" id="moduleMap">
- <id property="id" column="id" />
- <result property="name" column="module_name" />
- <result property="remark" column="remark" />
- <result property="createDate" column="createdate" />
- <result property="updateDate" column="updatedate" />
- </resultMap>
- <select id="queryModule" resultMap="moduleMap" >
- select * from sys_module where id =#{id}
- </select>
This configuration causes problems:
Many of the properties of Menu.module are null, except that the id is not empty.
After debugging, it was found that the problem lies in:
- <association property="module" column="module_id" resultMap="moduleMap" select="queryModule">
- </association>
去掉resultMap,修改为:
- <association property="module" column="module_id" select="queryModule">
- </association>
结果Menu.module的属性可以正确被mybaties设置进去,都有值了。
Association联合select使用值得注意的细节地方:
这是我使用mybatis的Association联合select使用存着问题的地方,
- <association property="module" column="module_id" select="queryModule">
- </association>
mybatis will push into the SQL input parameter where select is queryModule according to the value similar to resultSet.getInt("module_id").
- <select id="queryModule" resultMap="moduleMap" >
- select * from sys_module where id =#{id}
- </select>
I've been struggling with whether #{id} refers to Menu.id or the module's primary key or foreign key id attribute.
The SQL input parameter of select as queryModule can be given any name, as long as the input parameter is of the same type as the value pushed in, it can be written as:
- select * from sys_module where id =#{jjjasdasdid}
Regardless of the input parameter names, mybatis will eventually execute:
效果为:select * from sys_module where id =resultSet.getInt("module_id");