MyBatis对多关系:显示该用户的所有角色
只要在一边的UserMapper.xml 配置好就可以了
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--需求:搜索该用户的所有角色和该用户的信息-->
<mapper namespace="mybatis.UserMapper">
<!--为返回的结果集和pojo属性,做对应关系 -->
<!--MyBatis中与hibernate不同的orm的地方,mybatis是返回的结果集映射到pojo中的属性,而不是在建立表的时候映射-->
<resultMap type="com.free.mybatis.domain.User" id="qwe">
<!--所以他需要column来定位具体的属性 -->
<id property="uid" column="UID"/>
<result property="user_name" column="USER_NAME"/>
<!--下面是根据sql返回的结果集依次设置到pojo,不写则无值-->
<!-- <result property="user_password" column="USER_PASSWORD"/>-->
<!-- <result property="user_desc" column="USER_DESC"/>-->
<!-- <result property="e_mail" column="E_MAIL"/>-->
<!-- <result property="phone" column="PHONE"/>-->
<!-- 配置关联(应该采用extends的方式) --> </resultMap> <resultMap type="com.free.mybatis.domain.User" id="rolemapper" extends="qwe">
<!--对多关系 collection -->
<!--对一关系 association-->
<collection property="roles" ofType="com.free.mybatis.domain.Role">
<id property="rid" column="RID"/>
<result property="name" column="NAME"/>
<result property="pid" column="PID"/>
<result property="isParent" column="ISPARENT"/>
<result property="checked" column="CHECKED"/>
</collection>
</resultMap> <select id="findUserRole" parameterType="map" resultMap="rolemapper">
SELECT u.*,r.*
FROM USER u
LEFT JOIN user_role ur
ON u.uid = ur.uid
LEFT JOIN role r
ON ur.rid = r.rid
<where>
<if test="username!=null">u.user_name=#{username}</if>
</where>
</select>
</mapper>
package com.free.mybatis.test; import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.free.mybatis.domain.Role;
import com.free.mybatis.domain.User;
@SuppressWarnings(value = { "unused" })
public class testDemo1 {
@Test
public void test1() throws IOException {
String resource="sqlMapConfig.xml";
// InputStream is = testDemo1.class.getClassLoader().getResourceAsStream(resource);
// resource.get
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sfb = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sfb.openSession();
Map<String,Object> map = new HashMap<String,Object>();
// map.put("username", "')
// new HashMap<>();
// map.put("username", "freedom");
List<User> list = sqlSession.selectList("mybatis.UserMapper.findUserRole", map);
for(User user : list) {
// System.out.println(user.getRoles());
System.out.println(user.toString());
// for(Role roles :user.getRoles())
// System.out.println(user.getUser_name()+":"+roles.getName());
}
// sqlSession.commit();
// System.out.println(list);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<!--datasource和transaction -->
<!--test/development-->
<environments default="test">
<!--可以有多个环境,测试和部署 -->
<environment id="test" >
<!-- 事务:JDBC/MANAGED jdbc默认事务部自动提交-->
<transactionManager type="JDBC">
</transactionManager>
<!-- 数据源:POOLED/UNPOOLED/JNDI -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/gyl" />
<property name="username" value="root" />
<property name="password" value="freedom2012" />
</dataSource>
</environment> <environment id="test" >
<!-- 事务:JDBC/MANAGED jdbc默认事务部自动提交-->
<transactionManager type="JDBC">
</transactionManager>
<!-- 数据源:POOLED/UNPOOLED/JNDI -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/gyl" />
<property name="username" value="root" />
<property name="password" value="freedom2012" />
</dataSource>
</environment>
</environments> <mappers>
<!--加载domain的映射 -->
<mapper resource="mybatis/UserMapper.xml"/>
</mappers>
</configuration>
MyBatis对多关系:显示该用户的所有角色的更多相关文章
- Android基于mAppWidget实现手绘地图(十二)–显示当前用户位置
若显示当前用户位置,你需要执行以下步骤: 1.添加ACCESS_COARSE_LOCATION 和ACCESS_FINE_LOCATION权限在AndroidManifest.xml中 2.用mapW ...
- 显示当前用户所拥有的表&当前用户可以访问的所有表&数据库中的所有表&当前用户信息&当前用户所能管理的用户&数据库中所拥有的用户
1)显示当前用户名称:show user或者show user; 2)显示当前用户信息(包括用户名之外还有其他信息):select * from user_users; 3)显示数据库中所含有的所有用 ...
- 在Mysql中如何显示所有用户?
这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将 ...
- Linux命令之env:显示当前用户的环境变量
Linux系统里的env命令可以显示当前用户的环境变量,还可以用来在指定环境变量下执行其他命令.下面来比较一下set,env和export命令的异同:set命令显示当前shell的变量,包括当前用户的 ...
- Linux基础命令---显示登录用户w
w 显示哪些用户登录,并且显示用户在干什么.报头按此顺序显示当前时间.系统运行时间.当前登录用户数以及过去1.5和15分钟的系统平均负载.接着为每个用户显示以下条目:登录名.TTY名称.远程主机.登录 ...
- Linux命令应用大词典-第14章 显示登录用户
14.1 w:详细查询已登录当前计算机的用户 14.2 who:显示已登录当前计算机用户的简单信息 14.3 whoami:显示与当前的有效ID相关联的用户名 14.4 logname:显示当前用户的 ...
- MSSQL2005数据库显示单一用户模式,无法进行任何操作
MSSQL2005数据库显示单一用户模式,无法进行任何操作 经查询,使用exec sp_who进行查看链接线程,发现仍然有链接不断进行请求,将链接踢出,然后通过命令修复即可恢复 处理步骤: exec ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_11-前端显示当前用户-前端请求jwt
前端代码 sessionStorage也是key/value的格式 页头显示当前用户 查询jwt nginx里面的配置 测试 开启认证服务 进行登陆 跳转到首页就应该立即请求查询. 跳转到首页 coo ...
- 项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据
1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据 2 菜单数据添加 2.1 使用c ...
随机推荐
- make cmake catkin_make
在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序. 一.GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件 ...
- lock关键字的用法
一直以来对于lock关键字的用法都存有疑惑,也从网上看到很多关于他的资料包括MSDN,无奈MSDN讲述的真是让人上火.今天决定小小研究一下 一直都知道lock是锁定某一变量从而实现对某一代码段的独占执 ...
- 对MySQL数据类型的认识
简述 良好的逻辑设计和物理设计是高性能系统的基石,比如反范式设计可以加快某些类型的查询同时也会影响另外一些类型的查询效率,所以我们必须重视Mysql对于数据库的设计(本文主要讲述表字段类型对于数据库性 ...
- SQL-ALTER-change和modify区别
ALTER 对于列的应用: 1.更改列名 格式:CHANGE old_col_name new_col_name column_definition 保留old和new列名 ...
- 20145201 实验四 Andoid开发基础
20145201 实验四 Andoid开发基础 AndroidStudio安装 首先设置环境变量: Windows环境下Android Studio v1.0安装: 安装完毕. 运行Andriod S ...
- 联合体union
1.一般而言,共用体类型实际占用存储空间为其最长的成员所占的存储空间: //4*7==282.若是该最长的存储空间对其他成员的元类型(如果是数组,取其类型的数据长度,例int a[5]为4)不满足整除 ...
- 华为S5700系列交换机AR配置静态IP双链路负载分担
适用于:有多个以太WAN口的机型. 业务需求: 运营商1分配的接口IP为100.100.1.2,子网掩码为255.255.255.252,网关IP为100.100.1.1. 运营商2分配的接口IP为2 ...
- System.load 和 System.loadLibrary详解
System.load 和 System.loadLibrary详解 1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件.在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI ...
- jvm-内存区域与内存溢出异常
内存区域与内存溢出异常 参考: http://www.cnblogs.com/ityouknow/p/5610232.html 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢? ...
- Makefile文件应用——complicated项目
学习资料 本文主要参考资料:驾驭Makefile(李云).pdf Complicated项目 需求: (1)object文件放到objs目录下 (2)可执行文件放到exes目录下 (3)增加头文件依赖 ...