mybatis级联查询
Posted 第三眼的思绪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于mybatis级联查询的主要内容,如果未能解决你的问题,请参考以下文章