只要在一边的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对多关系:显示该用户的所有角色的更多相关文章

  1. Android基于mAppWidget实现手绘地图(十二)–显示当前用户位置

    若显示当前用户位置,你需要执行以下步骤: 1.添加ACCESS_COARSE_LOCATION 和ACCESS_FINE_LOCATION权限在AndroidManifest.xml中 2.用mapW ...

  2. 显示当前用户所拥有的表&当前用户可以访问的所有表&数据库中的所有表&当前用户信息&当前用户所能管理的用户&数据库中所拥有的用户

    1)显示当前用户名称:show user或者show user; 2)显示当前用户信息(包括用户名之外还有其他信息):select * from user_users; 3)显示数据库中所含有的所有用 ...

  3. 在Mysql中如何显示所有用户?

    这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将 ...

  4. Linux命令之env:显示当前用户的环境变量

    Linux系统里的env命令可以显示当前用户的环境变量,还可以用来在指定环境变量下执行其他命令.下面来比较一下set,env和export命令的异同:set命令显示当前shell的变量,包括当前用户的 ...

  5. Linux基础命令---显示登录用户w

    w 显示哪些用户登录,并且显示用户在干什么.报头按此顺序显示当前时间.系统运行时间.当前登录用户数以及过去1.5和15分钟的系统平均负载.接着为每个用户显示以下条目:登录名.TTY名称.远程主机.登录 ...

  6. Linux命令应用大词典-第14章 显示登录用户

    14.1 w:详细查询已登录当前计算机的用户 14.2 who:显示已登录当前计算机用户的简单信息 14.3 whoami:显示与当前的有效ID相关联的用户名 14.4 logname:显示当前用户的 ...

  7. MSSQL2005数据库显示单一用户模式,无法进行任何操作

    MSSQL2005数据库显示单一用户模式,无法进行任何操作 经查询,使用exec sp_who进行查看链接线程,发现仍然有链接不断进行请求,将链接踢出,然后通过命令修复即可恢复 处理步骤: exec ...

  8. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_11-前端显示当前用户-前端请求jwt

    前端代码 sessionStorage也是key/value的格式 页头显示当前用户 查询jwt nginx里面的配置 测试 开启认证服务 进行登陆 跳转到首页就应该立即请求查询. 跳转到首页 coo ...

  9. 项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据

    1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据         2 菜单数据添加 2.1 使用c ...

随机推荐

  1. ZOJ - 3593 One Person Game (扩展欧几里得)

    题意:一个人在坐标A,要前往坐标B的位置.可以往左或往右走a,b,a+b个单位,求到达B的最小步数. 分析:扩展欧几里得算法求解线性方程的套路不变.令C=fabs(A-B),c = a+b, 扩展gc ...

  2. Visual Studio各版本区别

    Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务.智能设备应用程 ...

  3. c#基础-自动内存管理

    1.自动垃圾回收是什么?     在非托管环境下程序员要自已管理内存,由疏忽的原因,通常会犯两种错误,请求内存后在不使用时忘记释放,或使用已经释放了的内存.但在托管环境下,程序员不用担心这两个问题,C ...

  4. poj2996

    /*排序函数要写对,优先级:K,Q,R,B,N,P 白色的:如果优先级一样,那么按照行数大的优先,如果行数一样,那么列数小的优先 黑色的:如果优先级一样,那么按照行数小的优先,如果行数一样,那么列数小 ...

  5. 20145201《Java程序设计》第十周学习总结

    教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...

  6. C++ string 用法总结

    string查找替换.分割字符串.比较.截取.类型转换.排序等功能都提供了强大的处理函数,可以代替字符数组来使用. 熟练掌握好string的各种使用方法,能极大的提高编程效率哦 ^_^. #inclu ...

  7. linux驱动调试--修改系统时钟终端来定位僵死问题【转】

    本文转载自:http://blog.chinaunix.net/uid-20671208-id-4940381.html 原文地址:linux驱动调试--修改系统时钟终端来定位僵死问题 作者:枫露清愁 ...

  8. SpringBoot 通用Error设计

    在项目中需要设计统一的错误消息,通常使用枚举类定义"错误码"与"错误消息": 并且也可以做错误消息自定义. 定义通过错误接口类:CommonError publ ...

  9. Asp.net Core, 基于 claims 实现权限验证 - 引导篇

    什么是Claims? 这个直接阅读其他大神些的文章吧,解释得更好. 相关文章阅读: http://www.cnblogs.com/JustRun1983/p/4708176.html http://w ...

  10. Merge-Sort(归并排序)

    Merge-Sort(归并排序) 思想 利用分治的思想,具体实现也就是递归,不断的将问题话分为更小的子问题,当子问题中规模为1的时候,认为数组已经有序了,然后再将子问题求得的结果不断的合并.也就是将长 ...