zoukankan      html  css  js  c++  java
  • 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
        }
    }
    

      

  • 相关阅读:
    技术省钱野路子!轻松节省90%云端开销
    免费服务器迁移上云实践分享!一键迁云,自动同步
    云上自建数据库,秒级备份,看这篇就对了!
    最佳实践 | 弹性计算Region化部署和跨可用区容灾
    云服务器无法远程连接?4步排查,准能解决!
    阿里云弹性计算安全组最佳实践及新特性介绍
    AI云原生浅谈:好未来AI中台实践
    最佳实践 | 基于弹性计算网络能力提升容器密度
    AI性能最高提升20倍 阿里云新一代GPU云服务器亮相 搭载NVIDIA A100
    【转】【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态
  • 原文地址:https://www.cnblogs.com/liuying23/p/11661609.html
Copyright © 2011-2022 走看看