• Mybatis关联查询


    一对多:一个用户对应多个角色

    实体:

    package com.smbms.entity;
    
    import javax.persistence.*;
    import java.sql.Timestamp;
    import java.util.Date;
    import java.util.List;
    
    
    public class SmbmsRoleEntity {
        private long rid;
        private String roleCode;
        private String roleName;
        private Long createdBy;
        private Timestamp creationDate;
        private Long modifyBy;
        private Timestamp modifyDate;
    
        //植入多的一方 集合
        private List<SmbmsUserEntity>  userList;
    
        public long getRid() {
            return rid;
        }
    
        public void setRid(long rid) {
            this.rid = rid;
        }
    
        public String getRoleCode() {
            return roleCode;
        }
    
        public void setRoleCode(String roleCode) {
            this.roleCode = roleCode;
        }
    
        public String getRoleName() {
            return roleName;
        }
    
        public void setRoleName(String roleName) {
            this.roleName = roleName;
        }
    
        public Long getCreatedBy() {
            return createdBy;
        }
    
        public void setCreatedBy(Long createdBy) {
            this.createdBy = createdBy;
        }
    
        public Timestamp getCreationDate() {
            return creationDate;
        }
    
        public void setCreationDate(Timestamp creationDate) {
            this.creationDate = creationDate;
        }
    
        public Long getModifyBy() {
            return modifyBy;
        }
    
        public void setModifyBy(Long modifyBy) {
            this.modifyBy = modifyBy;
        }
    
        public Timestamp getModifyDate() {
            return modifyDate;
        }
    
        public void setModifyDate(Timestamp modifyDate) {
            this.modifyDate = modifyDate;
        }
    
        public List<SmbmsUserEntity> getUserList() {
            return userList;
        }
    
        public void setUserList(List<SmbmsUserEntity> userList) {
            this.userList = userList;
        }
    }
    

      

    接口:

    package com.smbms.dao;
    
    import com.smbms.entity.SmbmsRoleEntity;
    
    public interface ISmbmsRoleDao {
    
        //查询经理角色 以及 该角色下对应的员工集合
        public SmbmsRoleEntity getRoleAndUser(Integer id);
    
    }
    

     

    小配置:

    <?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文件的唯一标识,通常习惯设置mapper接口名-->
    <mapper namespace="com.smbms.dao.ISmbmsRoleDao">
        <!--由于是关联查询 返回的是多张表中的结果集,必须定义resultMap映射-->
        <resultMap id="countryMap" type="SmbmsRoleEntity">
            <id property="rid" column="rid"></id>
            <result property="roleName" column="roleName"></result>
            <!--此处使用的是collection节点,由于在Country类中插入的是List集合
                ofType:为集合中的泛型
            -->
            <collection property="userList" ofType="SmbmsUserEntity"  select="gerRoleAndUserMutilSQL" column="rid">
                <!--在collection中声明Provincial中的属性与表中列的映射-->
                <id column="id" property="id"></id>
                <result column="userName" property="userName"></result>
            </collection>
        </resultMap>
    
       <!-- <select id="getRoleAndUser" parameterType="int" resultMap="countryMap">
    
            select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as u ,smbms_role as r where u.userRole=r.rid and r.rid=#{id}
        </select>-->
    
        <select id="getRoleAndUser" resultMap="countryMap">
            select * from smbms_role where rid=#{id}
        </select>
    
        <select id="gerRoleAndUserMutilSQL"  resultType="SmbmsUserEntity">
            select * from smbms_user where userRole=#{rid}
        </select>
    </mapper>
    

      

    测试:

    package com.smbms.test;
    
    import com.smbms.dao.ISmbmsRoleDao;
    import com.smbms.entity.SmbmsRoleEntity;
    import com.smbms.entity.SmbmsUserEntity;
    import com.smbms.util.MybatisUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    public class Demo01 {
        @Test
        public void  getRoleAndUserTest(){
            SqlSession sqlSession=MybatisUtil.getSqlSession();
            ISmbmsRoleDao mapper=sqlSession.getMapper(ISmbmsRoleDao.class);
    
            SmbmsRoleEntity role=mapper.getRoleAndUser(3);
            System.out.println("角色"+role.getRoleName());
            for (SmbmsUserEntity user:role.getUserList()){
                System.out.println("用户"+user.getUserName());
            }
        }
    }
    

      

    多对一:多个角色对应一个用户

    实体:

    package com.smbms.entity;
    
    import javax.persistence.*;
    import java.sql.Date;
    import java.sql.Timestamp;
    
    
    public class SmbmsUserEntity {
        private long id;
        private String userCode;
        private String userName;
        private String userPassword;
        private Integer gender;
        private Date birthday;
        private String phone;
        private String address;
        private Integer userRole;
        private Long createdBy;
        private Timestamp creationDate;
        private Long modifyBy;
        private Timestamp modifyDate;
        private  SmbmsRoleEntity role;
    
        public SmbmsRoleEntity getRole() {
            return role;
        }
    
        public void setRole(SmbmsRoleEntity role) {
            this.role = role;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getUserCode() {
            return userCode;
        }
    
        public void setUserCode(String userCode) {
            this.userCode = userCode;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getUserPassword() {
            return userPassword;
        }
    
        public void setUserPassword(String userPassword) {
            this.userPassword = userPassword;
        }
    
        public Integer getGender() {
            return gender;
        }
    
        public void setGender(Integer gender) {
            this.gender = gender;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public Integer getUserRole() {
            return userRole;
        }
    
        public void setUserRole(Integer userRole) {
            this.userRole = userRole;
        }
    
        public Long getCreatedBy() {
            return createdBy;
        }
    
        public void setCreatedBy(Long createdBy) {
            this.createdBy = createdBy;
        }
    
        public Timestamp getCreationDate() {
            return creationDate;
        }
    
        public void setCreationDate(Timestamp creationDate) {
            this.creationDate = creationDate;
        }
    
        public Long getModifyBy() {
            return modifyBy;
        }
    
        public void setModifyBy(Long modifyBy) {
            this.modifyBy = modifyBy;
        }
    
        public Timestamp getModifyDate() {
            return modifyDate;
        }
    
        public void setModifyDate(Timestamp modifyDate) {
            this.modifyDate = modifyDate;
        }
    }
    

      

    接口:

    package com.smbms.dao;
    
    import com.smbms.entity.SmbmsUserEntity;
    
    import java.util.List;
    
    public interface ISmbmsUserDao {
    
        //查询所有用户信息 包含角色信息
        public List<SmbmsUserEntity> getUserList();
    }
    

      

    小配置:

    <?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文件的唯一标识,通常习惯设置mapper接口名-->
    <mapper namespace="com.smbms.dao.ISmbmsUserDao">
        <resultMap id="ProvincialMap" type="SmbmsUserEntity">
            <id column="id" property="id"></id>
            <result column="userName" property="userName"></result>
            <!--当关联对象为普通对象时,使用association标签
                javaType:为关联对象的类型
            -->
            <association property="role" javaType="SmbmsRoleEntity">
                <id column="rid" property="rid"></id>
                <result column="roleName" property="roleName"></result>
            </association>
        </resultMap>
        <select id="getUserList" resultMap="ProvincialMap">
             select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as  u,smbms_role as r  where u.userRole=r.rid
        </select>
    </mapper>
    

      

    测试:

    package com.smbms.test;
    
    import com.smbms.dao.ISmbmsRoleDao;
    import com.smbms.dao.ISmbmsUserDao;
    import com.smbms.entity.SmbmsRoleEntity;
    import com.smbms.entity.SmbmsUserEntity;
    import com.smbms.util.MybatisUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class Demo {
        @Test
        public void  getRoleAndUserTest(){
            SqlSession sqlSession= MybatisUtil.getSqlSession();
            ISmbmsUserDao mapper=sqlSession.getMapper(ISmbmsUserDao.class);
    
            List<SmbmsUserEntity>  userList=mapper.getUserList();
    
            for (SmbmsUserEntity user:userList){
                System.out.println("用户"+user.getUserName()+"	角色"+user.getRole().getRoleName() );
            }
        }
    }
    

      

    多对多:多个教师对应多个学生

    实体:教师

    package com.smbms.entity;
    
    import javax.persistence.*;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class StudentinfoEntity {
        private int stuid;
        private String studentname;
        private String sex;
        private String address;
        private String birthday;
        //多的一方的教师
        private List<TeacherEntity> teachers=new ArrayList<>();
    
        public int getStuid() {
            return stuid;
        }
    
        public void setStuid(int stuid) {
            this.stuid = stuid;
        }
    
        public String getStudentname() {
            return studentname;
        }
    
        public void setStudentname(String studentname) {
            this.studentname = studentname;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    
        public List<TeacherEntity> getTeachers() {
            return teachers;
        }
    
        public void setTeachers(List<TeacherEntity> teachers) {
            this.teachers = teachers;
        }
    }
    

      

    学生:

    package com.smbms.entity;
    
    import javax.persistence.*;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class TeacherEntity {
        private int tid;
        private String tname;
        //多的一方的学生实体
        private List<StudentinfoEntity> students=new ArrayList<>();
    
        public int getTid() {
            return tid;
        }
    
        public void setTid(int tid) {
            this.tid = tid;
        }
    
        public String getTname() {
            return tname;
        }
    
        public void setTname(String tname) {
            this.tname = tname;
        }
    
        public List<StudentinfoEntity> getStudents() {
            return students;
        }
    
        public void setStudents(List<StudentinfoEntity> students) {
            this.students = students;
        }
    }
    

      

    接口:

    package com.smbms.dao;
    
    import com.smbms.entity.TeacherEntity;
    
    import java.util.List;
    
    //关联查询多对多
    public interface TeacherMapper {
    
        //查询所以教师(包括所教学员)
        List<TeacherEntity> getAllTeacher();
    }
    

      

    小配置:

    <?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文件的唯一标识,通常习惯设置mapper接口名-->
    <mapper namespace="com.smbms.dao.TeacherMapper">
        <resultMap id="teacherMap" type="TeacherEntity">
            <id column="tid" property="tid"></id>
            <result column="tname" property="tname"></result>
            <!--为students集合设置关联属性-->
            <collection property="students" ofType="StudentinfoEntity">
                <id column="stuid" property="stuid"></id>
                <result column="studentname" property="studentname"></result>
                <result column="sex" property="sex"></result>
                <result column="address" property="address"></result>
                <result column="birthday" property="birthday"></result>
            </collection>
        </resultMap>
    
        <select id="getAllTeacher" resultMap="teacherMap">
            SELECT s.*,t.* FROM teacher t,studentinfo s,teastu ts
            WHERE t.`tid`=ts.`tid` AND s.`stuid`=ts.`stuid`
        </select>
    </mapper>
    

      

    测试:

    package com.smbms.test;
    
    import com.smbms.dao.TeacherMapper;
    import com.smbms.entity.TeacherEntity;
    import com.smbms.util.MybatisUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.util.List;
    
    public class Demo05 {
        SqlSession session=null;
        TeacherMapper mapper=null;
        @Before
        public void before(){
            session= MybatisUtil.getSqlSession();
            mapper=session.getMapper(TeacherMapper.class);
        }
    
        @Test
        public void test01(){
            List<TeacherEntity> teachers = mapper.getAllTeacher();
            //重写Teacher类和Student类中的toString方法 直接打印
            for (TeacherEntity item:teachers){
                System.out.println(item);
            }
        }
    
        @After
        public void after() {
            session.commit();//事务提交
            session.close();//释放se
        }
    }
    

      

    自关联:一个分类下存在多个子分类

    实体:

    package com.smbms.entity;
    
    import javax.persistence.*;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class ProductCategoryEntity {
        private int id;
        private String name;
        private int type;
        private List<ProductCategoryEntity> lists=new ArrayList<>();
    
    
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public List<ProductCategoryEntity> getLists() {
            return lists;
        }
    
        public void setLists(List<ProductCategoryEntity> lists) {
            this.lists = lists;
        }
    }
    

      

    接口:

    package com.smbms.dao;
    
    import com.smbms.entity.ProductCategoryEntity;
    //自关联
    public interface CategoryMapper {
        //查询一级分类(包括其下的子分类)
        ProductCategoryEntity getOneById(int categoryid);
    }
    

      

    小配置:

    <?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文件的唯一标识,通常习惯设置mapper接口名-->
    <mapper namespace="com.smbms.dao.CategoryMapper">
        <resultMap id="cateMap" type="ProductCategoryEntity">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
            <result column="type" property="type"></result>
            <!--
              参照实体类,lists变量的类型是集合(典型的1:N的关系)
              select:指定查询关联对象的select语句(getOneByParent)
              column:查询关联对象select语句的条件值
              本例:根据id获取对应的分类后,以此id为条件获取子级分类(parentId=父级分类ID)
            -->
            <collection property="lists" ofType="ProductCategoryEntity" select="getOneByParent" column="id"/>
        </resultMap>
    
        <select id="getOneById" parameterType="int" resultMap="cateMap">
            select * from product_category where id=#{cateid}
        </select>
    
        <select id="getOneByParent" parameterType="int" resultMap="cateMap">
            select * from product_category where parentId=#{id}
        </select>
    </mapper>
    

      

    测试:

    package com.smbms.test;
    
    import com.smbms.dao.CategoryMapper;
    import com.smbms.entity.ProductCategoryEntity;
    import com.smbms.util.MybatisUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class Demo06 {
        SqlSession session=null;
        CategoryMapper mapper=null;
        @Before
        public void before(){
            session= MybatisUtil.getSqlSession();
            mapper=session.getMapper(CategoryMapper.class);
        }
        @Test
        public void test01(){
           ProductCategoryEntity cate = mapper.getOneById(548);
            //重写Category类中的toString方法 直接打印
            System.out.println(cate);
    
        }
    
        @After
        public void after(){
            session.commit();//事务提交
            session.close();//释放session
        }
    }
    

      

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/liuying23/p/11661609.html
Copyright © 2020-2023  润新知