mybatis 框架 的应用之四(一对一 与 一对多)
2017-02-15 00:32 甘雨路 阅读(271) 评论(0) 编辑 收藏 举报lf-driver=com.mysql.jdbc.Driver lf-url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8 lf-user=LF lf-password=LF
<?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.zr.mybatismore.mapper.ClassTeamMapper"> <!-- 一对多 通过班名字查询班里学生的信息 --> <resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classInfo"> <id column="classid" property="classid"/> <result column="classname" property="classname"/> <collection property="students" ofType="cn.zr.mybatismore.entity.Student"> <id column="idnum" property="idnum"/> <result column="name" property="name"/> <result column="age" property="age"/> <result column="classid" property="classid"/> </collection> </resultMap> <select id="queryStudetsByClassname" parameterType="java.lang.String" resultMap="classInfo"> SELECT c.classid,c.classname,s.idnum,s.name,s.age FROM class c INNER JOIN student s ON s.classid = c.classid WHERE c.classname = #{classname} </select> <!-- 一对多 通过多条查询语句来实现 --> <resultMap type="cn.zr.mybatismore.entity.ClassTeam" id="classTeamInfo"> <id column="classid" property="classid"/> <result column="classname" property="classname"/> <collection property="students" ofType="cn.zr.mybatismore.entity.Student" column="classid" select="queryStudents"> <id column="idnum" property="idnum"/> <result column="name" property="name"/> <result column="age" property="age"/> <result column="classid" property="classid"/> </collection> </resultMap> <select id="queryInfoByclassname" parameterType="java.lang.String" resultMap="classTeamInfo"> SELECT classid,classname FROM class WHERE classname=#{classname} </select> <select id="queryStudents" parameterType="int" resultType="cn.zr.mybatismore.entity.Student"> SELECT idnum,name,age,classid FROM student WHERE classid = #{classid} </select> <!-- END 一对多 通过多条查询语句来实现 --> </mapper>
<?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.zr.mybatismore.mapper.StudentMapper"> <!-- 一对一 关系映射 --> <resultMap type="cn.zr.mybatismore.entity.Student" id="studentInfo"> <id column="idnum" property="idnum"/> <result column="name" property="name"/> <result column="age" property="age"/> <result column="classid" property="classid"/> <association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam"> <id column="classid" property="classid"/> <result column="classname" property="classname"/> </association> </resultMap> <!-- 一对一(根据idnum查询学生的信息以及他所在的班级) --> <select id="queryStudentById" parameterType="int" resultMap="studentInfo"> SELECT s.idnum,s.name,s.age,s.classid,c.classname FROM student s INNER JOIN class c ON s.classid = c.classid WHERE s.idnum = #{idnum} </select> <!-- 通过多查询来实现 一对一的效果 --> <resultMap type="cn.zr.mybatismore.entity.Student" id="stuInfo"> <id column="idnum" property="idnum"/> <result column="name" property="name"/> <result column="age" property="age"/> <result column="classid" property="classid"/> <association property="classTeam" javaType="cn.zr.mybatismore.entity.ClassTeam" column="classid" select="queryClassByClassId"> <id column="classid" property="classid"/> <result column="classname" property="classname"/> </association> </resultMap> <select id="queryStuById" parameterType="int" resultMap="stuInfo"> SELECT idnum,name,age,classid FROM student WHERE idnum = #{idnum} </select> <select id="queryClassByClassId" parameterType="int" resultType="cn.zr.mybatismore.entity.ClassTeam"> SELECT classid,classname FROM class WHERE classid = #{classid} </select> <!-- END 通过多查询来实现 一对一的效果 --> </mapper>
<?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> <properties resource="mybatis/config/db.properties"></properties> <!-- 配置环境 --> <environments default="development"> <environment id="development"> <!-- 配置事务管理器的类型 --> <transactionManager type="JDBC"/> <!-- 配置数据源相关的属性 --> <dataSource type="UNPOOLED"> <property name="driver" value="${lf-driver}"/> <property name="url" value="${lf-url}"/> <property name="username" value="${lf-user}"/> <property name="password" value="${lf-password}"/> </dataSource> </environment> </environments> <!--END 配置环境 --> <!-- 配置映射路径 --> <mappers> <mapper resource="mybatis/config/mapper/StudentMapper.xml"/> <mapper resource="mybatis/config/mapper/ClassTeamMapper.xml" /> </mappers> <!-- END 配置映射路径 --> </configuration>
package cn.zr.mybatismore.entity; import java.util.List; public class ClassTeam { private int classid; private String classname; private List<Student> students; public int getClassid() { return classid; } public void setClassid(int classid) { this.classid = classid; } public String getName() { return classname; } public void setClassname(String classname) { this.classname = classname; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } public ClassTeam() { } public ClassTeam(int classid, String classname, List<Student> students) { this.classid = classid; this.classname = classname; this.students = students; } @Override public String toString() { return "ClassTeam [classid=" + classid + ", classname=" + classname + ", students=" + students + "]"; } }
package cn.zr.mybatismore.entity; public class Student { private int idnum; private String name; private int age; private int classid; private ClassTeam classTeam; public ClassTeam getClassTeam() { return classTeam; } public void setClassTeam(ClassTeam classTeam) { this.classTeam = classTeam; } public int getIdnum() { return idnum; } public void setIdnum(int idnum) { this.idnum = idnum; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getClassid() { return classid; } public void setClassid(int classid) { this.classid = classid; } public Student() { } public Student(int idnum, String name, int age, int classid, ClassTeam classTeam) { this.idnum = idnum; this.name = name; this.age = age; this.classid = classid; this.classTeam = classTeam; } @Override public String toString() { return "student [idnum=" + idnum + ", name=" + name + ", age=" + age + ", classid=" + classid + ", classTeam=" + classTeam + "]"; } }
package cn.zr.mybatismore.mapper; import java.util.List; import cn.zr.mybatismore.entity.ClassTeam; public interface ClassTeamMapper { /** * 根据班名查询班里学生的相关信息 */ List<ClassTeam> queryStudetsByClassname(String string); /** * 根据班名查询班里学生的相关信息(多语句来实现) */ List<ClassTeam> queryInfoByclassname(String string); }
package cn.zr.mybatismore.mapper; import cn.zr.mybatismore.entity.Student; public interface StudentMapper { /** * 通过id来查询学生信息以及所在班级 */ Student queryStudentById(int i); /** * 通过id来查询学生信息以及所在班级 (多查询) */ Student queryStuById(int i); }
package cn.zr.mybatismore.utils; import java.io.IOException; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionManager; import cn.zr.mybatismore.entity.ClassTeam; import cn.zr.mybatismore.entity.Student; import cn.zr.mybatismore.mapper.ClassTeamMapper; import cn.zr.mybatismore.mapper.StudentMapper; public class TestMore { public static void main(String[] args) { TestMore testMore = new TestMore(); // testMore.queryStudentById(); // testMore.queryStuById(); // testMore.queryStudetsByClassname(); testMore.queryInfoByclassname(); } private static SqlSessionManager sqlSessionManager ; private static StudentMapper studentMapper ; private static ClassTeamMapper classTeamMapper; //通过代码块来读取配置文件 static{ String resource = "mybatis/config/mybatis-config.xml"; try { Reader reader = Resources.getResourceAsReader(resource); sqlSessionManager = SqlSessionManager.newInstance(reader); studentMapper = sqlSessionManager.getMapper(StudentMapper.class); classTeamMapper = sqlSessionManager.getMapper(ClassTeamMapper.class); } catch (IOException e) { e.printStackTrace(); } } /** * 通过id来查询学生信息以及所在班级 */ public void queryStudentById() { Student student = studentMapper.queryStudentById(10011); if (student==null) { System.out.println("操作失败"); }else { System.out.println(student); } } /** * 通过id来查询学生信息以及所在班级 (多查询) */ private void queryStuById() { Student student = studentMapper.queryStuById(10011); if (student==null) { System.out.println("操作失败"); }else { System.out.println(student); } } /** * 根据班名查询班里学生的相关信息 */ public void queryStudetsByClassname() { List<ClassTeam> list = classTeamMapper.queryStudetsByClassname("一班"); if (list.isEmpty()) { System.out.println("操作失败"); }else { System.out.println(list); } } /** * 根据班名查询班里学生的相关信息(多语句来实现) */ public void queryInfoByclassname() { List<ClassTeam> list = classTeamMapper.queryInfoByclassname("一班"); if (list.isEmpty()) { System.out.println("操作失败"); }else { System.out.println(list); } } }