java之mybatis之一对多关联映射
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之一对多关联映射的更多相关文章
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- MyBatis 系列五 之 关联映射
MyBatis 系列五 之 关联映射 一对多的关联映射 一对多关联查询多表数据 1.1在MyBatis映射文件中做如下配置 <!--一对多单向的连接两表的查询--> <resultM ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- 1.4(Mybatis学习笔记)关联映射
一.一对一 mybatis处理一对一主要通过<resultMap>中的<association>元素来处理. <association>元素主要使用方方式有两种: ...
- Mybatis(四)关联映射
一. Mybatis关联映射 1 讲数据库中关联关系,主键表与外键表 一对多,多对一,主键表表示一 与外键表表示多 学生与学校的关系,工人与工厂,人员与部门的关系,.... 多 一 ...
- java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))
hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...
- mybatis之关联映射
###mybatis使用之一对一关联映射 1)分析并画ER图.(特别是一对一.一对多.多对多的情况) 2)启动终端数据库,并建库建表,在表中插入值和字段,并查看结果.(后期把navicat用上) 3) ...
- mybatis 一对一关联映射实例
在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...
- MyBatis学习(七)MyBatis关联映射之多对多映射
对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...
随机推荐
- html内获取当前文件路径,页面获取当前路径
function getRealPath(){ var curWwwPath = window.document.location.href; var pathName = window.docume ...
- noscript 标签介绍
noscript 标签介绍 一.总结 一句话总结: noscript 标签在不支持JavaScript 的浏览器中显示替代的内容. 1.noscript标签使用实例? html标签直接放在noscri ...
- C# 序列化与反序列化之Binary与Soap无法对泛型List<T>进行序列化的解决方案
C# 序列化与反序列化之Binary与Soap无法对泛型List<T>进行序列化的解决方案 新建Console控制台项目项目,然后添加Team和Person 这2个类,如下: Team和P ...
- SpatiaLite, load spatial extension first
- (转)Loadrunner教程--常用操做流程
1loadrunner压力测试一般使用流程 1.1loadrunner压力测试原理 本质就是在loadrunner上模拟多个用户同时按固定行为访问web站点.其中固定行为在loadrunner中是通过 ...
- SNF快速开发平台2019-权限管理模型实践-权限都在这里
其它权限实践系列文章: 1.角色.权限.账户的概念理解-非常全的理论讲解权限控制 https://www.cnblogs.com/spring_wang/p/10954370.html 2.权限管理模 ...
- RedHat 7关闭防火墙方法
1.在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop 2.RHEL7开始,使用systemctl工具来管理服务程序 ...
- 如何上传本地jar至远程仓库供其他项目使用
我们首先需要创建自己内部nexus私服仓库.这里假设你已经做好了. 其次我们要明白nexus上如下几个component的用处. maven-central:maven中央库,默认从https://r ...
- 对step文件进行信息抽取算法
任务描述:给定一个step文件,对该文件的字符串进行信息抽取,结构化的组织文件描述模型的数据.形成抽象化数据结构,存入计算机数据库.并能按照有条理结构把这些数据展示出来. 信息抽取的结果描述: 1 数 ...
- php-resque 队列简单使用
一.安装 php-resque 进入项目根目录,composer 安装 php-resque composer require chrisboulton/php-resque 二.常用方法 1.连接 ...