MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)
MyBitis(iBitis)系列随笔之一:MyBitis入门实例
MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)
MyBitis(iBitis)系列随笔之三:简单实现CRUD
MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)
MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)
MyBitis(iBitis)系列随笔之六:mybitis与spring集成
这篇博文介绍的是多表中的一对多表关联查询
还是按照上一篇的步骤,先做一些准备工作;创建两张表:一张是用户,一张是用户所对应的移动手机,一户用户可以有部移动手机。
这是用户t_user表
这是移动电话t_mobile表
在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合使用,稍后会做详细配置介绍
创建表对应的JavaBean对象
Mobile Bean
- public class Mobile {
- private int id;
- private String telnumber;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getTelnumber() {
- return telnumber;
- }
- public void setTelnumber(String telnumber) {
- this.telnumber = telnumber;
- }
- }
User Bean
- package com.jefry;
- import java.util.List;
- public class User {
- private int id;
- private String userName;
- private String password;
- private List<Mobile> mobiles; //这里也可以是Set集合
- public List<Mobile> getMobiles() {
- return mobiles;
- }
- public void setMobiles(List<Mobile> mobiles) {
- this.mobiles = mobiles;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- }
在上一篇的基础上改写映射文件:
- <?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="user">
- <resultMap id="userResultMap" type="User">
- <id property="id" column="id" javaType="int" jdbcType="INTEGER" />
- <result property="userName" column="name" javaType="string" jdbcType="VARCHAR"/>
- <result property="password" column="pass" javaType="string" jdbcType="VARCHAR"/>
- <collection property="mobiles" column="userid" ofType="Mobile">
- <id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
- <result property="telnumber" column="telnumber" javaType="string" jdbcType="VARCHAR"/>
- </collection>
- </resultMap>
- <!--多表查询操作-->
- <select id="selectUser" parameterType="int" resultMap="userResultMap" >
- <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->
- select m.id m_id,m.telnumber,u.id u_id,u.name,u.pass from t_mobile m,t_user u where m.userid = u.id and u.id = #{id}
- </select>
- </mapper>
最后,通过测试OK
- public class Test {
- static String resource = "mybatis-config.xml";
- public static void main(String[] args) throws IOException {
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- SqlSession session = sqlSessionFactory.openSession();
- try {
- User user = session.selectOne("user.selectUser", 1);
- List<Mobile> mobiles = user.getMobiles();
- for(Mobile mobile : mobiles) {
- System.out.println("user:" + user.getUserName() + ",tel:" + mobile.getTelnumber());
- }
- } finally {
- session.close();
- }
- }
- }
源码下载:http://download.csdn.net/detail/jefry_xdz/5229451
http://blog.csdn.net/jefry_xdz/article/details/8767358
http://www.cnblogs.com/yinkh/p/5564033.html
MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)的更多相关文章
- MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)
前面几篇博客介绍的都是单表映射的一些操作,然而在我们的实际项目中往往是用到多表映射.至于多表映射的关键要用到mybitis的association来加以实现. 这篇介绍的是多表中 ...
- MyBitis(iBitis)系列随笔之三:简单实现CRUD
Mybitis(iBitis)实现对对象增删改查操作要借助<select/>查询,<insert/>增加,<update/>更新,<delete/>删除 ...
- MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)
类型别名(typeAliases): 作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度. 类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...
- MyBitis(iBitis)系列随笔之六:mybitis与spring集成
目前Spring官方还没有出整合Mybatis的特性,但是mybitis比较给力,开发了一个mybatis-spring插件,达到与Spring的完美整合目的. 在与Spring集成前,一方面我们需要 ...
- MyBitis(iBitis)系列随笔之一:MyBitis入门实例
MyBits前身是iBitis,相对于Hibernate而言,它是半自动化ORM框架.本着分享和学习的目的,笔者将陆续把学习笔记与代码贴出,希望对想学习mybitis的同窗们有所帮助. ...
- MyBatis初级实战之六:一对多关联查询
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 7.mybatis一对多关联查询
和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...
- [转]NHibernate之旅(10):探索父子(一对多)关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
随机推荐
- 解决chrome下上传文件 返回值带 <pre style="word-wrap:break-word;white-space:prewrap;"></pre>
解决办法:后台 response.setContentType("text/html");
- linux dd命令
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 1. 命令简介 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数 ...
- 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误
有次不小心设置了一下virtualbox里面的一些配置,然后启动系统时出现了如下提示 在网上找了一些资料尝试了一些方法偶然有一次成功 原来是自己把那个cpu个数设置成了2,改成1就好了,不知道为什么做 ...
- Codeforces 241B
因为博客园的公式编辑有点坑,所以-- 原题
- BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)
3237: [Ahoi2013]连通图 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 106 Solved: 31 [ Submit][ St ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- STL的移动算法
要在自己定义类型中使用移动算法.须要在元素中提供移动赋值运算符.移动赋值运算符和std::move()详见<c++高级编程>第9章 class mystring { public: str ...
- c#常见操作
1. StreamWriter - 文件写入类StreamWriter s = new StreamWriter(address + "/Menu.ini", true);s.Wr ...
- ServiceStack 入门(一)
本文主要介绍ServiceStack的安装,与第一个项目的创建. 详细了解ServiceStack,可参考官方网站: https://servicestack.net/ , Github上Servic ...
- R语言初涉
R语言简单的函数的使用: “<-”表示赋值,也可以用“=”. c()为连接函数,连接中间的数据表示向量,连接中间的数据表示向量,X1 <- c()表示用一组数据为变量X1赋值. mean( ...