博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis表关联一对多
阅读量:6825 次
发布时间:2019-06-26

本文共 5390 字,大约阅读时间需要 17 分钟。

collection聚集

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称; 

不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载: 
1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活; 
2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

例如,一个班级有多个学生。 

首先定义班级中的学生列表属性:private List<StudentEntity> studentList;

使用select实现聚集 

用法和联合很类似,区别在于,这是一对多,所以一般映射过来的都是列表。所以这里需要定义javaType为ArrayList,还需要定义列表中对象的类型ofType,以及必须设置的select的语句名称(需要注意的是,这里的查询student的select语句条件必须是外键classID)。

 

mybatis表关联一对多

我们首先在创建一个 java 工程,,还需要创建两张表,它们分别是用户表 user,和帖子表 post,一个户用户可以有多个帖子。

user表的结构和数据:

-- ------------------------------ Table structure for `user`-- ----------------------------CREATE TABLE `user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `username` varchar(64) NOT NULL DEFAULT '',  `mobile` int(10) unsigned NOT NULL DEFAULT '0',  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'yiibai', '100', '2015-09-23 20:11:23');

  

帖子表 post 的结构和数据:

-- ------------------------------ Table structure for `post`-- ----------------------------CREATE TABLE `post` (  `post_id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `userid` int(10) unsigned NOT NULL,  `title` varchar(254) NOT NULL DEFAULT '',  `content` text,  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',  PRIMARY KEY (`post_id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of post-- ----------------------------INSERT INTO `post` VALUES ('1', '1', 'MyBatis关联数据查询', '在实际项目中,经常使用关联表的查询,比如:多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创建一个 post 表,并初始化数据.', '2015-09-23 21:40:17');INSERT INTO `post` VALUES ('2', '1', 'MyBatis开发环境搭建', '为了方便学习,这里直接建立java 工程,但一般都是开发 Web 项目。', '2015-09-23 21:42:14');INSERT INTO `post` VALUES ('3', '2', '这个是别人发的', 'content,内容...', '0000-00-00 00:00:00');

  

2、创建表对应的 JavaBean 对象

这个例子中,我们需要在包 com.muyang.pojo 下创建两个类,它们分别是: User.java 和 Post.java,我们一个一个地来看它们的代码,User.java 类的代码如下:

user

package com.muyang.pojo;import java.io.Serializable;import java.util.List;public class User implements Serializable {		private int id;	private String username;	private String mobile;	private List
posts; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public List
getPosts() { return posts; } public void setPosts(List
posts) { this.posts = posts; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", mobile=" + mobile + ", posts=" + posts + "]"; } }

  

 

post:

package com.muyang.pojo;import java.io.Serializable;public class Post implements Serializable {	private int id;	private User user;	private String title;	private String content;			public int getId() {		return id;	}		public void setId(int id) {		this.id = id;	}		public User getUser() {		return user;	}		public void setUser(User user) {		this.user = user;	}		public String getTitle() {		return title;	}		public void setTitle(String title) {		this.title = title;	}		public String getContent() {		return content;	}		public void setContent(String content) {		this.content = content;	}				}

  

conf.xml-mybatis配置文件

  

一对多userMapper查询映射xml

  

TEST测试文件

package com.muyang.test;import java.io.Reader;import java.util.List;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 com.muyang.pojo.Post;import com.muyang.pojo.User;public class Test {	private static SqlSessionFactory sqlSessionFactory;	//private static SqlSession sqlSession;	private static Reader reader;		static {		try {			reader = Resources.getResourceAsReader("conf.xml");			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);		}catch(Exception e)		{			e.printStackTrace();		}	}		public static SqlSessionFactory getSession()	{		return sqlSessionFactory;	}		public static void main(String args[])	{		SqlSession sqlSession = sqlSessionFactory.openSession();		try {			int userid=1;			User user = sqlSession.selectOne("com.muyang.dao.userDao.getUser", 1);			System.out.println("username:" + user.getUsername() + ",userid:"+user.getId());			List
posts = user.getPosts(); for(Post post: posts) { System.out.println("title:"+post.getTitle()); System.out.println("content:"+post.getContent()); System.out.println("------------------------------------>"); } }catch(Exception e) { sqlSession.close(); } } }

  

 

转载地址:http://nfrzl.baihongyu.com/

你可能感兴趣的文章
“光伏双反”与“201条款”有何差异?
查看>>
Android集成测试
查看>>
能源互联网将如何开拓光伏新市场?
查看>>
《Hadoop与大数据挖掘》一2.4.1 HDFS Java API操作
查看>>
《iOS App界面设计创意与实践》——iOS开发工具和资源
查看>>
Firefox OS 未死,这两款松下电视会搭载该系统
查看>>
AngularJS 1.3.0 正式发布,超光速发展!
查看>>
Chrome 将进一步削弱 Flash 内容
查看>>
《After Effects CC中文版超级学习手册》——导读
查看>>
Tor 项目弃用 obfs2,开发 obfs4
查看>>
Eclipse设置:背景与字体大小和xml文件中字体大小调整
查看>>
c++强制类型转换(总结)
查看>>
H3C S5500 配置范例
查看>>
工具05:XShell
查看>>
SQL分割字符串详解
查看>>
Apache+Resin整合搭建JSP环境
查看>>
【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强...
查看>>
【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
查看>>
通过python切换hosts文件
查看>>
iOS8新特性扩展(Extension)应用之四——自定义键盘控件
查看>>