mybatis中,association select性能分析
<resultMap id="UserAndRoleResultMap" type="com.example.shiro_demo.entity.UserAndRole">
<association property="sysUser" javaType="com.example.shiro_demo.entity.SysUser"
column="user_id"
select="com.example.shiro_demo.dao.SysUserDAO.selectByPrimaryKey">
</association>
<association property="sysRole" javaType="com.example.shiro_demo.entity.SysRole"
column="role_id"
select="com.example.shiro_demo.dao.SysRoleDAO.selectByPrimaryKey">
</association>
</resultMap>
<select id="selectAll" resultMap="UserAndRoleResultMap">
select * from sys_user_role
</select>
实际上使用这种方式,相当于查询了三次,只是代码层次的联表查询,甚至不算是联表查询,结构上重用了代码而已。
如果注重性能建议还是使用下面这种方式
<resultMap id="UserAndRoleResultMap" type="com.example.shiro_demo.entity.UserAndRole">
<association property="sysUser" javaType="com.example.shiro_demo.entity.SysUser">
<id column="user_id" jdbcType="BIGINT" property="userId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="full_name" jdbcType="VARCHAR" property="fullName" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="salt" jdbcType="VARCHAR" property="salt" />
</association>
<association property="sysRole" javaType="com.example.shiro_demo.entity.SysRole">
<id column="role_id" jdbcType="BIGINT" property="roleId" />
<result column="role_name" jdbcType="VARCHAR" property="roleName" />
</association>
</resultMap>
<select id="selectAll" resultMap="UserAndRoleResultMap">
select * from sys_user_role as ur join sys_user as u on ur.user_id = u.user_id join sys_role as r on r.role_id = ur.role_id
</select>