只要在一边的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. C++模板专门化与重载

    最近在复习C++有关知识,又重新看<<Effective C++>>,收获颇丰.原来以前看这边书,好多地方都是浅尝辄止.<<Effective C++>> ...

  2. NoSQL2

    系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性.这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去.尽管NoSQL运动并没有给分布式数据 ...

  3. 对Java 注解的一些理解

    转载自https://blog.csdn.net/javazejian/article/details/71860633 引入 注解最简单的使用方式 Java注解与普通修饰符(public\stati ...

  4. 笔记——Springboot response、ServletOutputStream、图形验证码显示慢

    今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右. 根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页 ...

  5. qt打包问题。启动失败:Application failed to start because platform plugin “windows” is missing

    qt打包启动失败:Application failed to start because platform plugin “windows” is missing 通常的原因是因为没有platform ...

  6. Recurrent Neural Networks vs LSTM

    Recurrent Neural Network RNN擅长处理序列问题.下面我们就来看看RNN的原理. 可以这样描述:如上图所述,网络的每一个output都会对应一个memory单元用于存储这一时刻 ...

  7. Jquery 动态生成的元素绑定事件

    使用 on方法 $("#id1").on("click","#id2",function(){}) 这里要注意的是#id1必须是原来就存在的 ...

  8. 因磁盘爆满而导致NameNode HA无法启动

    场景回顾: 测试集群节点分配:35,36是namenode且开启HA,37,38,39即作为datanode,又作为journalnode. 某时间 38节点磁盘爆满,集群中hdfs及依赖的服务全部宕 ...

  9. npm和git代理

    npm 删除代理设置:npm config delete proxynpm config delete https-proxynpm 设置代理:npm config set proxy http:// ...

  10. python学习笔记(datetime、字符串转换)

    datetime对象与字符串可以互相转化 代码如下: from datetime import datetime def datetime_string(time): return time.strf ...