Mybatis高级映射结果集---xml配置---(一对多,多对一)
2017-11-24 11:37
471 查看
理论的知识我就不说了 官方文档 http://www.mybatis.org/mybatis-3/zh/
直接来案例
多个学生存在一个班级 ====》多对一
一个班级存在多个学生====》一对多
先在数据库中创建一个学生表 一个班级表 班级表中的主键是学生表中的外键
创建学生表的实例
创建班级表的实例
创建mybatis的核心配置文件
班级接口
学生接口
映射学生xml文件 StudentMapper.xml
直接来案例
多个学生存在一个班级 ====》多对一
一个班级存在多个学生====》一对多
先在数据库中创建一个学生表 一个班级表 班级表中的主键是学生表中的外键
创建学生表的实例
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 nam 4000 e="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()); } } }
相关文章推荐
- MyBatis中的结果集映射---xml配置文件
- Mybatis高级映射结果集---注解---(一对多,多对一)
- MyBatis 官方文档学习3---XML 映射配置文件
- 在eclipse中给mybatis的config.xml以及映射xml文件配置自动提示
- 六 mybatis高级映射(一对一,一对多,多对多)
- mybatis映射 一对一、一对多、多对多高级映射
- Mybatis高级映射(一对一的查询以及一对多)
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- MyBatis XML 映射配置文件
- Mybatis实战(五)Mapper配置文件高级映射
- mapper.xml映射文件配置 mybatis
- MyBatis之使用XML配置SQL映射(一)
- (八)mybatis学习之高级映射(一对一、一对多、多对多)
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- mybatis源码学习之执行过程分析(2)——config.xml配置文件和mapper.xml映射文件解析过程
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
- mybatis的高级结果集映射
- 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多
- MyBatis mapper.xml配置一对一关系映射的几种方式整理