• 关联查询


    在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系。

       1)案例3:关联映射一对多

               以国家和省份对应的一对多关系举例。

           Student表

           

           Teacher表

           

     

           创建Student.java类如下:

                     private int stuid;
                     private String stuname;
                     private String stuaddress;

    }

       创建Teacher类如下:

    public class Teacher {
        private int tid;
        private String tname;

       创建StuT.java接口如下:

     private Integer stuid;

     private Integer tid;

      创建IStudentDao.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需要指向接口全路径-->
    <mapper namespace="com.wdkseft.dao.ISmbmsRoleDao">
    <!--<resultMap id="roleAndUserMapper" type="SmbmsRole">
    <id column="rid" property="rid"></id>
    <result column="roleName" property="roleName"></result>
    <collection property="userList" ofType="SmbmsUser">
    <id column="id" property="id"></id>
    <result column="userName" property="userName"></result>
    </collection>
    </resultMap>

    <select id="getRoleAndUser" resultMap="roleAndUserMapper">
    select u.id,u.userName,u.userCode,r.rid,r.roleName from smbms.smbms_role as r,smbms.smbms_user as u
    where u.userRole=r.rid and r.rid=#{id}
    </select>-->



    <!--<resultMap id="roleAndUserMapper" type="SmbmsRole">
    &lt;!&ndash;<id column="rid" property="rid"></id>
    <result column="roleName" property="roleName"></result>&ndash;&gt;
    <collection property="userList" ofType="SmbmsUser" select="getRoleAndUserMutilSQL" column="rid">
    &lt;!&ndash;<id column="id" property="id"></id>
    <result column="userName" property="userName"></result>&ndash;&gt;
    </collection>
    </resultMap>

    <select id="getRoleAndUser" resultMap="roleAndUserMapper">
    select * from smbms.smbms_role where rid=#{id}
    </select>
    <select id="getRoleAndUserMutilSQL" resultType="SmbmsUser">
    select * from smbms.smbms_user where userRole=#{rid}
    </select>-->

    <!--<resultMap id="roleAndUserMapper" type="SmbmsUser">
    <id column="id" property="id"></id>
    <result column="userName" property="userName"></result>
    <collection property="role" ofType="SmbmsRole">
    <id column="rid" property="rid"></id>
    <result column="roleName" property="roleName"></result>
    </collection>
    </resultMap>

    <select id="getUserList" resultMap="roleAndUserMapper">
    select u.id,u.userName,u.userCode,r.rid,r.roleName from smbms.smbms_role as r,smbms.smbms_user as u
    where u.userRole=r.rid
    </select>-->

    <resultMap id="roleAndUserMapper" type="SmbmsUser">
    <id column="id" property="id"></id>
    <result column="userName" property="userName"></result>
    <association property="role" select="getRole" column="userRole">
    <id column="rid" property="rid"></id>
    <result column="roleName" property="roleName"></result>
    </association>
    </resultMap>

    <select id="getUserList" resultMap="roleAndUserMapper">
    select * from smbms.smbms_user
    </select>
    <select id="getRole" resultType="SmbmsRole">
    select * from smbms.smbms_role where rid=#{userRole}
    </select>

    </mapper>

    编写app测试程序:

    package com.wdkseft.test;

    import com.wdkseft.dao.Address_Sum;
    import com.wdkseft.dao.ISmbmsRoleDao;
    import com.wdkseft.dao.IStudentDao;
    import com.wdkseft.entity.*;
    import com.wdkseft.util.SqlSessionUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;

    import java.util.List;

    public class Tester {
        SqlSession session = SqlSessionUtils.getSession();
        @Test
        public void getAllPro(){

            Address_Sum mapper = session.getMapper(Address_Sum.class);
            List<ceishi> allPro = mapper.getAllPro("1", "2");
            for (ceishi cs:allPro) {
                System.out.println(cs.getName());
            }
        }

        @Test
        public void getProInData(){
            Address_Sum mapper = session.getMapper(Address_Sum.class);
            List<ceishi> proInData = mapper.getProInData(new String[]{"4", "6"});
            for (ceishi cs:proInData) {
                System.out.println(cs.getName());
            }
        }

        @Test
        public void AddallPro(){
            Address_Sum mapper = session.getMapper(Address_Sum.class);
            //添加
            ceishi cs = new ceishi();
            cs.setName("8");
            cs.setPhone("1475");
            cs.setEmail("114@ii.com");
            mapper.addAddressById(cs);
            session.commit();
        }

        @Test
        public void getRoleAndUser(){
            ISmbmsRoleDao mapper = session.getMapper(ISmbmsRoleDao.class);
            SmbmsRole role = mapper.getRoleAndUser(3);

            System.out.println("角色:"+role.getRoleName());
            for (SmbmsUser user:role.getUserList()) {
                System.out.print(" 用户:"+user.getUserName());
            }
        }

        @Test
        public void getUserList(){
            ISmbmsRoleDao mapper = session.getMapper(ISmbmsRoleDao.class);
            List<SmbmsUser> userList = mapper.getUserList();
            for (SmbmsUser user:userList) {
                System.out.println("用户:"+user.getUserName()+" 角色:"+user.getRole().getRoleName());
            }
        }

        @Test
        public void getStudentInfo(){
            IStudentDao mapper = session.getMapper(IStudentDao.class);
            List<Student> studentInfo = mapper.getStudentInfo();
            for (Student stu:studentInfo){
                System.out.println("学员:"+stu.getStuname());
                for (Teacher teacher:stu.getTeachers()){
                    System.out.print(" 教员:"+teacher.getTname());
                }
                System.out.println();
            }
        }
    }

  • 相关阅读:
    java 之 File类
    java 之 内部类
    java 之 泛型
    如何生成随机码
    sql中getdate()&convert的使用
    sql中Distinct&Count的用法
    C#中如何使用正则表达式
    Sql按照字段分组,选取其他字段最值所在的行记录
    为什么在属性中设置private set
    基本Sql语句汇总
  • 原文地址:https://www.cnblogs.com/ws1149939228/p/11666747.html
Copyright © 2020-2023  润新知