表名: hr |
字段: id (用户HR的id) |
表名hr_role |
字段:hrid (关联的是hr表的id字段) |
字段:rid (关联的是role表的id字段) |
表名role |
字段 id (角色id) |
字段 nameZh ((角色职能) |
现在要根据上面结构查询对所有HR的个人信息以及所对应的角色职能,
很明显这是一个一对多的查询,一个HR角色可以拥有多个角色职能,然后通过hr_role表将HR用户表和role角色职能表关联了起来.
第一步:在选主体
选择Hr为主体对象.然后在Hr.java的POJO中添加 List<Role> roles 字段,并添加对应的getter/setter.
第二步:编写对应的Controller,Service,Mapper
在HrMapper.xml中,需要添加一个resultMap的映射关系.
Hr.java和mysql中HR表格的对应映射关系
<resultMap id="BaseResultMap" type="com.bitk.model.Hr" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="CHAR" />
<result column="telephone" property="telephone" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
<result column="enabled" property="enabled" jdbcType="BIT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="userface" property="userface" jdbcType="VARCHAR" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
</resultMap>
在这里配置一对多的映射关系
column填写数据库表的字段名. property填写的是java定义实体的属性名
<resultMap id="HrWithRole" type="com.bitk.model.Hr" extends="BaseResultMap" >
<collection property="roles" ofType="com.bitk.model.Role">
<id column="id" property="id" javaType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="nameZh" property="nameZh" jdbcType="VARCHAR" />
</collection>
</resultMap>
<!--查询HR信息以及他的角色信息 一对多查询-->
<select id="getAllHrs" resultMap="HrWithRole">
SELECT
*
FROM
hr,
hr_role,
role
where
hr_role.rid=role.id and
hr.id=hr_role.hrid
ORDER BY
hr.id,role.`nameZh`
</select>