Mybatis高级映射结果集---xml配置---(一对多,多对一)

理论的知识我就不说了 官方文档 http://www.mybatis.org/mybatis-3/zh/

直接来案例

多个学生存在一个班级 ====》多对一

一个班级存在多个学生====》一对多


先在数据库中创建一个学生表 一个班级表  班级表中的主键是学生表中的外键

创建学生表的实例

package cn.easytop.lesson03.resultMap.xml;

//多对一
public class Student {
	private int sid;
	private String sname;
	//查询学生带出班级
	private Grade grade;
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade grade) {
		this.grade = grade;
	}
}


创建班级表的实例

package cn.easytop.lesson03.resultMap.xml;

import java.util.ArrayList;
import java.util.List;

public class Grade {
	private int gid;
	private String gname1;
	//查出班级带出学生
	List<Student> studentList=new ArrayList<Student>();
	public int getGid() {
		return gid;
	}
	public void setGid(int gid) {
		this.gid = gid;
	}
	
	public String getGname1() {
		return gname1;
	}
	public void setGname1(String gname1) {
		this.gname1 = gname1;
	}
	
	
	
	public List<Student> getStudentList() {
		return studentList;
	}
	public void setStudentList(List<Student> studentList) {
		this.studentList = studentList;
	}
	@Override
	public String toString() {
		return "Grade [gid=" + gid + ", gname1=" + gname1 + "]";
	}
	
	
	
}
 

创建mybatis的核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- mybatis的核心配置文件
		1.数据库的连接的信息(连接池)
	 -->
	<properties resource="oracle.properties"></properties>
	<!-- 取别名 -->
	<typeAliases>
		<!-- 给此包下的所有的类取别名    默认别名为类名的首字母小写 -->
		<package name="cn.easytop.lesson03.resultMap.xml"/>
	</typeAliases>
  <environments default="development">
    <environment id="development">
    <!-- 事务管理器  默认使用jdbc事务 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username1}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  	<mapper resource="cn/easytop/lesson03/resultMap/xml/GradeMapper.xml"/>
  	<mapper resource="cn/easytop/lesson03/resultMap/xml/StudentMapper.xml"/>
  </mappers>
</configuration>

班级接口

package cn.easytop.lesson03.resultMap.xml;

import java.util.List;

public interface GradeMapper {
	//常规查询
	public List queryAllGrade();
	
	
	//查询班级
	public Grade queryGrade(String gid);
	
	
	//学生带出班级
	public Grade queryGradeByGid(String gid);
}

学生接口

package cn.easytop.lesson03.resultMap.xml;

import java.util.List;

public interface StudentMapper {
	
	//查询学生
	public Student queryStudent(String sid);
	
	
	//班级带出学生
	public List<Student> queryStudentByGid(String gid);
}
映射班级xml文件 GradeMapper.xml

<?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="cn.easytop.lesson03.resultMap.xml.GradeMapper">
<!-- 简单的结果集映射:
		数据库的列名和实体类的属性名如果不一致 需要建立列名和属性名的映射关系
		结果集映射返回的结果是相同的都是grade
 -->
 	<!-- 
 		autoMapping="true"  默然是自动映射   属性名和列名一致
 		列和属性的关系  主键使用id标签   非主键使用result
 	 -->
 	<resultMap type="grade" id="gradeMap" autoMapping="true">
 		<id column="gid" property="gid"></id>
 		<result column="gname" property="gname1"/>
 	</resultMap>
 	<select id="queryAllGrade" resultMap="gradeMap">
		select * from grade
	</select>
 	
 	<resultMap type="grade" id="gradeOne" autoMapping="true">
 		<id column="gid" property="gid"></id>
 		<result column="gname" property="gname1"/>
 		<!-- 
 			resultMap="gradeOne" 查询出来的gid与数据库中的列名 column="gid" 自动映射(属性名与数据库名一致)
 				把gid传入select="cn.easytop.lesson03.resultMap.xml.StudentMapper.queryStudentByGid"
 					此方法中查询出结果与Student中的property="studentList"映射   并指定映射的类型 javaType="list"
 		 -->
 		<collection property="studentList" column="gid" javaType="list" 
 					select="cn.easytop.lesson03.resultMap.xml.StudentMapper.queryStudentByGid">
 		</collection>
 	</resultMap>
 	
 	<!-- 
 		resultMap="gradeOne"  与标签<resultMap>中的id="gradeOne"映射
 	 -->
 	 <select id="queryGrade" resultMap="gradeOne">
 	 	select * from grade where gid=#{gid}
 	 </select>
 	
 	
	<!-- 
		多对一
		学生带出班级
	 -->
 	<select id="queryGradeByGid" resultMap="gradeMap">
 		select * from grade where gid=#{gid}
 	</select>
</mapper>


映射学生xml文件 StudentMapper.xml
<?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">

<!-- 
	namespace="cn.easytop.lesson03.resultMap.xml.StudentMapper" 与接口绑定 

-->
<mapper namespace="cn.easytop.lesson03.resultMap.xml.StudentMapper">
 	<!-- 
 		多对一的映射结果集
 		autoMapping="true" 属性名与数据库中的列名一致自动映射
 		<id column="sid" property="sid"></id>   如果属性名是数据库中的主键 使用id标签
 	 -->
 	<resultMap type="student" id="studentMap" autoMapping="true">
 		<id column="sid" property="sid"></id>
 		<!-- 
 			 把 resultMap="studentMap" 的查询结果gid与数据库中的column="gid"映射(属性名与列名一致自动映射)
 			 	把gid传入到select="cn.easytop.lesson03.resultMap.xml.GradeMapper.queryGradeByGid"> 
 			 		此方法中查询出结果与Student中的grade映射
 		 -->
 		<association property="grade" column="gid" select="cn.easytop.lesson03.resultMap.xml.GradeMapper.queryGradeByGid"></association>
 	</resultMap>
 	
 	<!-- 
 		resultMap="studentMap"  与<resultMap>标签中的id="studentMap"映射
 	 -->
 	<select id="queryStudent" resultMap="studentMap">
 		select * from student where sid=#{0}
 	</select>
 	
 	
 	<!-- 
 		一对多
 		班级带出学生
 	 -->
 	<select id="queryStudentByGid" resultType="student">
 		select * from student where gid=#{0}
 	</select>
</mapper>
Test测试类
package cn.easytop.lesson03.resultMap.xml;

import java.io.IOException;
import java.io.InputStream;
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;


public class Test {
	public static SqlSession getSession() throws IOException{
		String resource = "cn/easytop/lesson03/resultMap/xml/mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//工厂类
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession openSession = sqlSessionFactory.openSession();
		//session操作的是 指向sql语句的一个唯一表示符
		return openSession;
	}
	//常规查询
	@org.junit.Test
	public void testXmlInterface() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		GradeMapper fm=session.getMapper(GradeMapper.class);
		List<Grade> queryFood = fm.queryAllGrade();
		System.out.println(queryFood);
	}
	
	
	/*
	 * 多对一 查询出学生带出班级
	 * 
	 */
	@org.junit.Test
	public void testManyToOne() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		StudentMapper fm=session.getMapper(StudentMapper.class);
		Student student = fm.queryStudent("1");
		System.out.println(student.getSname()+"======="+student.getGrade().getGname1());
	}
	
	/*
	 * 一对多 查询出班级带出学生
	 * 
	 */
	@org.junit.Test
	public void testOneToMany() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		GradeMapper fm=session.getMapper(GradeMapper.class);
		Grade queryFood = fm.queryGrade("1");
		for(Student s:queryFood.getStudentList()){
			System.out.println(s.getSname());
		}
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值