mybatis级联查询

用户表:

CREATE TABLE `sys_user` (
  `userid` varchar(50) NOT NULL,
  `roleid` int(11) NOT NULL,
  `username` varchar(50) DEFAULT NULL COMMENT '用户名',
  `password` varchar(50) NOT NULL,
  `sex` tinyint(6) DEFAULT NULL COMMENT '性别',
  `idcard` varchar(50) DEFAULT NULL COMMENT '身份证号',
  `phone` varchar(20) DEFAULT NULL COMMENT '联系方式',
  `email` varchar(320) DEFAULT NULL COMMENT '邮箱',
  `islocked` tinyint(4) DEFAULT NULL COMMENT '是否锁定。0表示锁定,1表示未锁定。',
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

角色表:

CREATE TABLE `sys_role` (
  `roleid` int(11) NOT NULL AUTO_INCREMENT,
  `rolename` varchar(20) DEFAULT NULL COMMENT '角色名',
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`roleid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

资源菜单表:

CREATE TABLE `sys_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(50) NOT NULL COMMENT '菜单名',
  `icon` varchar(255) DEFAULT NULL COMMENT '菜单图标',
  `url` varchar(255) DEFAULT NULL COMMENT '模块地址',
  `level` int(11) NOT NULL COMMENT '菜单等级',
  `parentid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

角色与资源菜单关系表:

CREATE TABLE `role_menu` (
  `roleid` int(11) NOT NULL,
  `menuid` int(11) NOT NULL,
  `authz` tinyint(4) DEFAULT 0 COMMENT '操作权限类型,0表示all,1表示C,2表示U,3表示R,4表示D。但此方法保存其操作权限位运算',
  PRIMARY KEY (`roleid`,`menuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1、一对多

此例子中可以为通过角色查找用户,也可以通过父级菜单查找子孙级子菜单(自身级联)。
菜单查找中的自身级联查询:

<resultMap id="BaseResultMenu" type="java.util.Map" >
  <id column="id" property="id" jdbcType="INTEGER" />
  <result column="text" property="text" jdbcType="VARCHAR" />
  <result column="icon" property="icon" jdbcType="VARCHAR" />
  <result column="url" property="url" jdbcType="VARCHAR" />
  <result column="level" property="icon" jdbcType="INTEGER" />
  <result column="parentid" property="parentid" jdbcType="INTEGER" />
  <collection property="children" ofType="java.util.Map" column="id" select="selRoleMenu"/>
</resultMap>

<select id="selMenu" resultMap="BaseResultMenu" parameterType="java.util.Map">
	select
	id,text,icon,parentid,level,url
	from sys_menu sm where parentid=#{id,javaType=INTEGER}
</select>

通过用户类型查找用户的一对多级联查询:

<resultMap id="BaseResultMap" type="com.xxx.model.UserType" >
	<id column="utid" property="utid" jdbcType="INTEGER" />
	<result column="utname" property="utname" jdbcType="VARCHAR" />
	<!-- 新增,用作级联查询。适用于多对多级联查询或多对一的一方级联查询(PS:一是特殊的多)。这里的column="utid"值对应查询参数 -->
	<collection property="users" column="utid" select="selectUsers" ></collection>
</resultMap>

<!-- 新增,辅助级联查询 -->
<resultMap id="userResultMap" type="com.xxx.model.UserInfo" >
	<id column="usid" property="usid" jdbcType="INTEGER" />
	<result column="usname" property="usname" jdbcType="VARCHAR" />
	<result column="sex" property="sex" jdbcType="INTEGER" />
	<result column="age" property="age" jdbcType="INTEGER" />
	<result column="remark" property="remark" jdbcType="VARCHAR" />
</resultMap>

<sql id="Base_Column_List" >
	utid, utname
</sql>

<sql id="user_Column_List" ><!-- 级联辅助新增 -->
	usid, utid, usname, sex, age, remark
</sql>

<!-- 级联查询新增方法 -->
<select id="selectUsers" resultMap="userResultMap">
	select
	<include refid="user_Column_List"/>
	from UserInfo where utid=#{utid}
</select>

<select id="select" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
	select 
	<include refid="Base_Column_List" />
	from usertype
	where utid = #{utid,jdbcType=INTEGER}
</select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值