欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis学习5之多表查询 OneToMany

程序员文章站 2022-07-12 17:57:38
...

接着上一篇博客OnToOne继续探讨mybatis多表查询

OneToMany,在t_group表中一个组对应多个人员信息,根据一个组去查询该组下的所有人员信息

1、修改sql映射文件GroupPersonUserMapper.xml

         <select id="findGroupAndPersonByGID" resultMap="GroupAndPerson">
	 	select g.id,g.group_name,g.description, 	
		p.gid,p.id pid,p.name,p.telphone,p.address,p.email
		from t_group g left join t_person  p on g.id = p.gid
		where g.id = #{id}
	 </select>
	 <resultMap type="com.zlt.mybatis.model.Group" id="group">
		 <id property="id" column="id"/>
	 	 <result property="groupName" column="group_name"/>
	 	 <result property="description" column="description" />
	 </resultMap>
	 <resultMap type="com.zlt.mybatis.model.Group" id="GroupAndPerson" extends="group">
	 	<collection property="persons" column="gid" ofType="com.zlt.mybatis.model.Person">
	 		<id property="id" column="pid"/>
	 		<result property="name" column="name"/>
	 		<result property="telphone" column="telphone"/>
	 		<result property="address" column="address"/>
	 		<result property="email" column="email"/>
	 		<result property="gid" column="gid"/>
		</collection>
	 </resultMap>

 2、单元测试用例

 

public void testOneToMany(){
		SqlSession session = null;
		try{
				session = sqlSessionFactory.openSession();
				String statement = "com.zlt.mybatis.model.Group.findGroupAndPersonByGID";
				//List<Group> groups = session.selectList(statement, 1);
				Group group = session.selectOne(statement, 1);
				if(null != group) {
						StringBuffer sb = new StringBuffer();
						sb.append("id:" + group.getId() + "\t")
						  .append("groupName:" + group.getGroupName() +"\t")
						  .append("description:" + group.getDescription() +"\t");
						String len = sb.toString(); 
						List<Person> persons = group.getPersons();
						for (Person person : persons) {
							sb.append("id:" + person.getId() + "\t")
							.append("name:" + person.getName() + "\t")
							.append("telphone:" + person.getTelphone() + "\t")
							.append("address:" +person.getAddress() + "\t")
							.append("email:" + person.getEmail() + "\t")
							.append("gid:" + person.getGid() + "\t");
							System.out.println(sb.toString());
							sb.delete(len.length(), sb.length());
						}
				}
			}finally{
			if(null != session) session.close();
		}
	}

 3、测试结果

 

 

id:1	groupName:Java开发部	description:Java项目组开发	id:1	name:张三	telphone:10086	address:浦东新区广兰路	email:zhangsan@163.com	gid:1	
id:1	groupName:Java开发部	description:Java项目组开发	id:2	name:李四	telphone:10000	address:浦东新区广兰路	email:lisi@163.com	gid:1	

 ManyToOne

 

1、修改SQL映射文件

 

<select id="findGroupAndPersonByGID2" resultMap="GroupAndPerson2">
	 	select p.id id,p.name,p.telphone,p.address,p.email,p.gid,
	 	g.id gid,g.group_name,g.description	
		from t_person p left join t_group  g on p.gid = g.id
		where p.id = #{id}
	 </select>
	 <resultMap type="com.zlt.mybatis.model.Person" id="GroupAndPerson2">
 		<id property="id" column="id"/>
 		<result property="name" column="name"/>
 		<result property="telphone" column="telphone"/>
 		<result property="address" column="address"/>
 		<result property="email" column="email"/>
 		<result property="gid" column="gid"/>
	 	<association property="group" javaType="com.zlt.mybatis.model.Group">
	 		<id property="id" column="gid"/>
	 		<result property="groupName" column="group_name"/>
	 		<result property="description" column="description" />
		</association>
	 </resultMap> 

 2、单元测试

 

 

public void testManyToOne(){
		SqlSession session = null;
		try{
				session = sqlSessionFactory.openSession();
				String statement = "com.zlt.mybatis.model.Group.findGroupAndPersonByGID2";
				Person person = session.selectOne(statement, 2);
				if(null != person) {
						StringBuffer sb = new StringBuffer();
							sb.append("id:" + person.getId() + "\t")
							.append("name:" + person.getName() + "\t")
							.append("telphone:" + person.getTelphone() + "\t")
							.append("address:" +person.getAddress() + "\t")
							.append("email:" + person.getEmail() + "\t")
							.append("gid:" + person.getGid() + "\t");
							Group group = person.getGroup();
							sb.append("group-id:" + group.getId() + "\t")
							  .append("groupName:" + group.getGroupName() +"\t")
							  .append("description:" + group.getDescription() +"\t");
						
							System.out.println(sb.toString());
				}
			}finally{
			if(null != session) session.close();
		}
	}

 3、测试结果

 

 

id:2	name:李四	telphone:10000	address:浦东新区广兰路	email:lisi@163.com	gid:1	group-id:1	groupName:Java开发部	description:Java项目组开发	

 

 

相关标签: mybatis OneTwoMany