zoukankan      html  css  js  c++  java
  • mybatis 框架 的应用之四(一对一 与 一对多)

    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);
            }
        }
    }
  • 相关阅读:
    Nexus OSS 3 搭建 Docker & Git LFS 仓库
    YARN FairScheduler
    k8s基本概念及使用
    k8s 基本使用
    10款非常实用的在线网站原型设计工具
    Spark常见问题及性能调优
    spark常见问题处理
    TensorFlow 基本使用
    c语言数组的操作
    在Android开发中遇到的MediaPlayer问题
  • 原文地址:https://www.cnblogs.com/lantu1989/p/6399788.html
Copyright © 2011-2022 走看看