1: resultMap标签
当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一一映射。
2:使用情况
2.1 简单查询
<resultMap id="这个resultMap的id" type="对应实体类的全限定类名"><id column="id" property="id"></id><result column="username" property="name"></result><result column="author" property="author"></result><result column="number" property="number"></result>.............colum对应数据库的字段,property对应实体类的属性</resultMap>
他表示对数据按照什么样的规则进行一一映射,如:
<!-- 根据编号查找书籍--><select id="SelectbooksByNumber" parameterType="String" resultMap="名字">select * from book where number=#{number};</select>
上面的查找结果按照你给的resultMap的对应规则进行映射。
2.2 一对一
需要注意的是你sql语句查出来的列名称是别名,那你就要填别名,就不是你数据库的列名称了。
返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型
<resultMap id="userMap" type="com.sweet.shiro.entry.User"><id column="uid" property="id"/><result column="username" property="username"/><!--角色信息--><!-- 一对一 --><association property="role" javaType="com.sweet.shiro.entry.Role"><id column="id" property="id"/><result column="rname" property="name"/></association>
2.3 一对多
同样和一对一 一样需要注意列名称。
返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型,
ofType指定的是 映射到list集合属性中pojo的类型
其中Role属性集合为List
<resultMap id="userMap" type="com.sweet.shiro.entry.User"><id column="uid" property="id"/><result column="username" property="username"/><!--角色信息--><collection property="roles" javaType="list" ofType="com.sweet.shiro.entry.Role"><id column="id" property="id"/><result column="rname" property="name"/></collection></resultMap><select id="findRolesByUserName" parameterType="String" resultMap="userMap">select u.id uid ,u.username,r.id,r.`name` rnamefrom t_user uLEFT JOIN t_user_role uron u.id = ur.roleIdLEFT JOIN t_role ron ur.roleId = r.idwhere u.username = #{username}</select>
pojo
public class User implements Serializable {private Integer id;private String username;private String password;private String salt;private Integer status; // 用户状态 0: 正常 1:禁用 2:锁定//角色集合private List<Role> roles;
role表
user表
user与role的映射表