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属性. 搭建开发 ...
随机推荐
- Android.Hacks.01_Centering views using weights
Android.Hacks读书笔记01 #1#权重布局之解析: LinearLayout ’s android:weightSum LinearLayout ’s child android ...
- css 一些常用属性总结
在项目中经常会用到一些很实用的css代码(*只做功能性记录,不追根究底,如有不合理的欢迎指正) css图片上下居中 /*图片上下居中代码*/ .imgvam { /*非IE的主流浏览器识别的垂直居中的 ...
- SQL Server 数据库的自动选项
自动选项影响SQL Server 可能会自动进行的操作,所有的这些都是bool值,值为on 或off 1. auto_close: 当这个为on 时.数据库在最后一个用户退出后完全关闭,这样数据库就不 ...
- Linux查看所有用户用什么命令1
用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可. 那么Linux操作系统里查看所有用户该怎么办呢?用命令.其实用命令 ...
- Visual Studio 2012 Update3 安装失败错误“正在关闭管道'
问题描述: Visual Studio 2012 update3 安装失败错误“ 正在关闭管道' 环境: Windows 7 SP1(x86和x64) Windows 8(x86和x64) Windo ...
- C/C++ 用libcurl库进行http通讯网络编程
C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...
- 解决 MySQL manager or server PID file could not be found! 的方法
[root@centos var]# service mysqld stop MySQL manager or server PID file could not be found! [F ...
- 50% 的财富 500 强企业使用 Windows Azure
在上周的北美TechEd大会上,我有幸见到了来自世界各地的客户.合作伙伴和分析师,其数量之多,让人震惊.没有什么比亲耳聆听使用 Windows Azure 来开创新天地的客户亲口讲述他们的故事更令人振 ...
- 确定比赛名次(map+邻接表 邻接表 拓扑结构 队列+邻接表)
确定比赛名次 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- checkbox和radio的样式美化问题
如果你下定决心要改变现有的默认的checkbox和radio的样式,那么我目前有两种办法: 1.自己动手写一个,也就是自己写代码实现将input的checkbox和radio默认的样式隐藏掉,使用绝对 ...