1.在一对多的关联映射中,表结构如下

2.实体类结构

User.java

public class User implements Serializable{
private int id;
private String name;
private int age;
private int roleId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", roleId=" + roleId + "]";
}
}

Role.java

public class Role {
private int id;
private String name;
private List<User> users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "Role [id=" + id + ", name=" + name + "]";
}
}

3.映射文件

<mapper namespace="cn.sxt.vo.RoleMapper">
<select id="findById" resultMap="RoleMap">
select u.id as uid,u.name as uname,u.age as uage,
roleId,r.name as rname from t_user u,t_role r
where u.roleId=r.id and r.id=#{id}
</select>
<resultMap type="Role" id="RoleMap">
<id property="id" column="roleId"/>
<result property="name" column="rname"/>
<collection property="users" ofType="User">
<id property="id" column="uid"/>
<result property="name" column="uname"/>
<result property="age" column="uage"/>
<result property="roleId" column="roleId"/>
</collection>
</resultMap>
</mapper>

4.测试

  @Test
public void testFindById() throws IOException{
SqlSession session = MybatisUtil.getSqlSession();
Role role = (Role)session.selectOne("cn.sxt.vo.RoleMapper.findById",2);
System.out.println(role.getId()+"-----"+role.getName());
for(User u:role.getUsers()){
System.out.println(u);
}
session.close();
}

5.使用2个映射语句实现映射

RoleMapper.xml

<select id="findById" resultMap="RoleMap">
select * from t_role where id=#{id}
</select>
<resultMap type="Role" id="RoleMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- javaType指property的类型 不要忘了写column-->
<collection property="users" column="id" javaType="list"
ofType="User" select="cn.sxt.vo.UserMapper.findUserByRoleId"
></collection>
</resultMap>

UserMapper.xml

<mapper namespace="cn.sxt.vo.UserMapper">
<select id="findUserByRoleId" resultType="User">
select * from t_user where roleId=#{roleId}
</select>
</mapper>

java之mybatis之一对多关联映射的更多相关文章

  1. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

  2. MyBatis 系列五 之 关联映射

    MyBatis 系列五 之 关联映射 一对多的关联映射 一对多关联查询多表数据 1.1在MyBatis映射文件中做如下配置 <!--一对多单向的连接两表的查询--> <resultM ...

  3. SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射

    前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...

  4. 1.4(Mybatis学习笔记)关联映射

    一.一对一 mybatis处理一对一主要通过<resultMap>中的<association>元素来处理. <association>元素主要使用方方式有两种: ...

  5. Mybatis(四)关联映射

    一. Mybatis关联映射 1 讲数据库中关联关系,主键表与外键表 一对多,多对一,主键表表示一 与外键表表示多 学生与学校的关系,工人与工厂,人员与部门的关系,.... 多        一    ...

  6. java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))

      hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

  7. mybatis之关联映射

    ###mybatis使用之一对一关联映射 1)分析并画ER图.(特别是一对一.一对多.多对多的情况) 2)启动终端数据库,并建库建表,在表中插入值和字段,并查看结果.(后期把navicat用上) 3) ...

  8. mybatis 一对一关联映射实例

    在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...

  9. MyBatis学习(七)MyBatis关联映射之多对多映射

    对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...

随机推荐

  1. mysql(五)执行计划

    参考文档 http://blog.itpub.net/12679300/viewspace-1394985/

  2. 使用List中remove方法时需要注意的问题

    String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...

  3. SpringCache

    官方文档:https://docs.spring.io/spring/docs/4.3.13.RELEASE/spring-framework-reference/htmlsingle/#cache ...

  4. golang字节数组拷贝BlockCopy函数实现

    在C#中,Buffer.BlockCopy(Array, Int32, Array, Int32, Int32) 函数使用比较广泛,其含义: 将指定数目的字节从起始于特定偏移量的源数组复制到起始于特定 ...

  5. 冰多多团队-第八次Scrum例会

    冰多多团队-第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj debug, IAT debug, IAT 牛雅哲 将语音部分迁移到IatDemo上,去将科大讯飞的语音听写dem ...

  6. Salt Highstate数据结构定义

    作者言 这篇文档详细解释了SLS文件中,每个部分的名称与含义,以及SLS中的数据处理后的数据结构. 我只是SaltStack的初学者,如果文中有错误的地方,请不吝赐教.在学习的过程,我做了一些实验,犯 ...

  7. Composer教程

    介绍   PHP程序的包管理器   负责, 配置需要的项目, 项目需要的项目. 解决, 项目的依赖问题.   当前的PHP项目, 当作一个软件包去看待.   思路: 将软件集中在统一的软件源中. 安装 ...

  8. openwrt的shell下如何访问寄存器的内容?

    答:通过devmem工具(在openwrt的make menuconfig中可以使能该工具) $ busybox devmem 0x123456

  9. redis创建集群至少需要几个节点?至少需要几个master节点?

    描述: 这也算个思考吧,通过redis-trib.rb可创建redis集群,然后通过--replicas后面接的数字,表示1个主节点对应几个从节点,那么我就做了如下的测试,想要达到的效果就是有6个节点 ...

  10. Algorithm测试

    Algorithm测试 #include <algorithm> #include <vector> #include <iostream> using names ...