一、Sql公共块
Sql标签作用:可被其他语句引用的可重用语句块。
<sql id="sysuser_fields">
uid,uname,uphone,user_address
</sql>
<select id="selectUserById" parameterType="int" resultMap="sysuserResultMap">
select <include refid="sysuser_fields"></include> from sysuser where uid=#{uid}
</select>
二、ResultMap标签
1、最复杂也是最强大最常用的,用来对实体对象的属性与数据库字段名做映射,同时提供子标签做对象之间的关系映射,进行级联查询操作。
2、数据是多对多,比如一个用户拥有多个角色,一个角色拥有多个用户,但表现上是一对N
示例:
private List userList;
public class Sysrole {
private Integer rid;
private String rname;
private List<Sysuser> userList;//角色对象聚合了用户对象}
<resultMap id="roleAndUsersResultMap" type="sysrole">
<id column="rid" property="rid"></id><!--主键列映射-->
<result column="role_name" property="rname"></result><!--非主键列映射-->
<!--ofType:集合的泛型类型, public List<Sysuser> selectUsersByRoleid(int rid);//根据角色id查询该角色下所有用户-->
<collection property="userList" column="rid" ofType="Sysuser" select="com.javasm.sys.mapper.SysuserMapper.selectUsersByRoleid"></collection>
</resultMap>
<select id="selectRoleAndUsersByRID" parameterType="int" resultMap="roleAndUsersResultMap">
select * from sysrole where rid = #{rid}
</select>
private Sysrole srole;
public class Sysuser {
private Integer uid;
private String uname;
private String upwd;
private String uphone;
private String uemail;
private String createTime;
private String updateTime;
private Integer rid;
private Sysrole srole;//用户持有角色}
<resultMap id="roleAndUsersResultMap2" type="sysrole">
<id column="rid" property="rid"></id><!--主键列映射-->
<result column="role_name" property="rname"></result><!--非主键列映射-->
<!--ofType:集合的泛型类型,-->
<collection property="userList" ofType="Sysuser">
<id column="uid" property="uid"></id>
<result column="uname" property="uname"></result>
<result column="upwd" property="upwd"></result>
<result column="uphone" property="uphone"></result>
<result column="uemail" property="uemail"></result>
<result column="create_time" property="createTime"></result>
<result column="update_time" property="updateTime"></result>
</collection>
</resultMap>
<select id="selectRoleAndUsersByRID2" parameterType="int" resultMap="roleAndUsersResultMap2">
select u.*,r.role_name from sysuser u,sysrole r where u.rid=r.rid and r.rid=#{rid}
</select>
改:
<resultMap id="userResultMap" type="Sysuser">
<id column="uid" property="uid"></id>
<result column="uname" property="uname"></result>
<result column="rid" property="rid"></result>
<!--association:column:外键列,javaType:成员变量的类型(类名),select:二次查询的位置-->
<association property="srole" javaType="Sysrole" column="rid" select="com.javasm.sys.mapper.SysroleMapper.selectRoleByID"></association>
</resultMap>
本文介绍了MyBatis Mapper文件中的Sql公共块和ResultMap标签。Sql标签用于创建可重用的语句块,提高代码复用率。ResultMap标签则是最复杂且强大的,用于实体对象与数据库字段的映射,支持级联查询,尤其在处理一对多、多对多关系映射时非常有用。

267

被折叠的 条评论
为什么被折叠?



