MyBatis (5)

1. Hay varias formas de operación de consulta uno a uno en la consulta avanzada de mybatis, ¿cómo operar cada una?
Prueba de consulta uno a uno

Requisito: Consultar información de usuario especificada.
Análisis: la información del usuario se puede almacenar en dos tablas. La primera tabla almacena la información básica del usuario y la segunda tabla almacena la información de la tarjeta de identificación del usuario. En este momento, la información básica del usuario y la información de la tarjeta de identificación del usuario son un par información.
#Tabla de información básica del usuario

create  table t_user(
user_id int primary key auto_increment,
user_name varchar(20),
user_age int,
user_address varchar(30)
);
#用户身份证信息表
create  table t_card(
card_id int primary key auto_increment,
user_id_fk int not null unique,
card_code varchar(20),
card_year int,
foreign key(user_id_fk) references t_user(user_id)
);
#测试数据
insert into t_user values(null,'zhangsan',23,'西安');
insert into t_card values(null,1,'111111111',20);
创建工程项目
创建javabean
package com.wangxing.mybatis.bean;

public class UserBean {
    private  int  userid;
    private  String  username;
    private  int userage;
    private  String useraddress;
    //由于当我们在查询用户基本信息的时候需要连同用户身份证信息一起得到,
    //所以我们就需要在保存用户基本信息的java实体类中新增一个成员变量,用来保存用户身份证信息。
    private CardBean cardBean;
    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getUserage() {
        return userage;
    }

    public void setUserage(int userage) {
        this.userage = userage;
    }

    public String getUseraddress() {
        return useraddress;
    }

    public void setUseraddress(String useraddress) {
        this.useraddress = useraddress;
    }

    public CardBean getCardBean() {
        return cardBean;
    }

    public void setCardBean(CardBean cardBean) {
        this.cardBean = cardBean;
    }
}

package com.wangxing.mybatis.bean;

public class CardBean {
    private int cardid;
    private int useridfk;
    private String cardcode;
    private int cardyear;

    public int getCardid() {
        return cardid;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public int getUseridfk() {
        return useridfk;
    }

    public void setUseridfk(int useridfk) {
        this.useridfk = useridfk;
    }

    public String getCardcode() {
        return cardcode;
    }

    public void setCardcode(String cardcode) {
        this.cardcode = cardcode;
    }

    public int getCardyear() {
        return cardyear;
    }

    public void setCardyear(int cardyear) {
        this.cardyear = cardyear;
    }
}

Crear interfaz de acceso a datos

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.UserBean;

public interface UserMapper {
    //根据用户id得到用户信息,包括用户的身份证信息
    UserBean getUserAndCardByUserId(int userid);
}
创建SQL映射文件
<?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="com.wangxing.mybatis.mapper.UserMapper">
        <!--嵌套resultMap:方式1-->
        <!--association一对一配置 -->
        <!-- property:成员变量名称-->
        <!-- javaType: 成员变量的类型-->
        <!--
        <resultMap id="userMap" type="com.wangxing.mybatis.bean.UserBean">
            <id column="user_id" property="userid"></id>
            <result column="user_name" property="username"></result>
            <result column="user_age" property="userage"></result>
            <result column="user_address" property="useraddress"></result>
            <association property="cardBean" javaType="com.wangxing.mybatis.bean.CardBean">
                <id column="card_id" property="cardid"></id>
                <result column="user_id_fk" property="useridfk"></result>
                <result column="card_code" property="cardcode"></result>
                <result column="card_year" property="cardyear"></result>
            </association>
        </resultMap>
        -->
        <!--嵌套resultMap:方式2-->
        <!--association一对一配置 -->
        <!-- property:成员变量名称-->
        <!-- javaType: 成员变量的类型-->
        <!-- resultMap: 引入其他的resultMap-->
    <resultMap id="userMap" type="com.wangxing.mybatis.bean.UserBean">
        <id column="user_id" property="userid"></id>
        <result column="user_name" property="username"></result>
        <result column="user_age" property="userage"></result>
        <result column="user_address" property="useraddress"></result>
        <association property="cardBean" javaType="com.wangxing.mybatis.bean.CardBean" resultMap="cardMap"></association>
    </resultMap>
    <resultMap id="cardMap" type="com.wangxing.mybatis.bean.CardBean">
        <id column="card_id" property="cardid"></id>
        <result column="user_id_fk" property="useridfk"></result>
        <result column="card_code" property="cardcode"></result>
        <result column="card_year" property="cardyear"></result>
    </resultMap>
    <select id="getUserAndCardByUserId" parameterType="int" resultMap="userMap">
            select user_id,user_name,user_age,user_address,
                    card_id,user_id_fk,card_code,card_year
                    from t_user inner join t_card
                    on user_id=user_id_fk
                    where user_id=#{userid};
        </select>
</mapper>

Código de prueba

//根据用户id得到用户信息,包括用户的身份证信息
public static void getUserAndCardByUserId(){
    SqlSession sqlSession=null;
    try {
        sqlSession=getSqlSession();
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        UserBean userBean=userMapper.getUserAndCardByUserId(1);
        sqlSession.commit();
        System.out.println(userBean.getUsername()+"\t"+userBean.getCardBean().getCardcode());
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        sqlSession.close();
    }
}

resultado de la operación
Inserte la descripción de la imagen aquí

CardBean.java
package com.wangxing.mybatis.bean;

public class CardBean {
    private int cardid;
    private int useridfk;
    private String cardcode;
    private int cardyear;
    //由于当我们在查询用户身份证信息的时候需要连同用户基本信息一起得到,
    //所以我们就需要在保存用户身份证信息的java实体类中新增一个成员变量,用来保存用户基本信息。
    private UserBean userBean;
    public int getCardid() {
        return cardid;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public int getUseridfk() {
        return useridfk;
    }

    public void setUseridfk(int useridfk) {
        this.useridfk = useridfk;
    }

    public String getCardcode() {
        return cardcode;
    }

    public void setCardcode(String cardcode) {
        this.cardcode = cardcode;
    }

    public int getCardyear() {
        return cardyear;
    }

    public void setCardyear(int cardyear) {
        this.cardyear = cardyear;
    }

    public UserBean getUserBean() {
        return userBean;
    }

    public void setUserBean(UserBean userBean) {
        this.userBean = userBean;
    }
}

Crear interfaz de acceso a datos

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.CardBean;

public interface CardMapper {
    //根据用户的身份证号码得到用户的身份证信息,包含用户基本信息
    CardBean  getCardAndUserByCardCode(String cardcode);
}
创建SQL映射文件
<?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="com.wangxing.mybatis.mapper.CardMapper">
    <!--嵌套select-->
    <resultMap id="cardMap" type="com.wangxing.mybatis.bean.CardBean">
        <id column="card_id" property="cardid"></id>
        <result column="user_id_fk" property="useridfk"></result>
        <result column="card_code" property="cardcode"></result>
        <result column="card_year" property="cardyear"></result>
        <!-- association一对一查询的配置元素-->
        <!--property:成员变量名称 -->
        <!--javaType:成员变量类型-->
        <!--column:查询用户信息的外键列 -->
        <!--select:嵌套查询 -->
        <association property="userBean"
                     javaType="com.wangxing.mybatis.bean.UserBean"
                     column="user_id_fk"
                     select="getUserByuser_id_fk"></association>
    </resultMap>
    <select id="getCardAndUserByCardCode" parameterType="java.lang.String" resultMap="cardMap">
         select * from t_card where card_code=#{cardcode};
    </select>
    <resultMap id="userMap" type="com.wangxing.mybatis.bean.UserBean">
        <id column="user_id" property="userid"></id>
        <result column="user_name" property="username"></result>
        <result column="user_age" property="userage"></result>
        <result column="user_address" property="useraddress"></result>
    </resultMap>
    <select id="getUserByuser_id_fk" parameterType="int" resultMap="userMap">
        select * from t_user where user_id=#{useridfk};
    </select>

</mapper>

Código de prueba

//根据用户的身份证号码得到用户的身份证信息,包含用户基本信息
public static void getCardAndUserByCardCode(){
    SqlSession sqlSession=null;
    try {
        sqlSession=getSqlSession();
        CardMapper cardMapper=sqlSession.getMapper(CardMapper.class);
        CardBean cardBean =cardMapper.getCardAndUserByCardCode("111111111");
        sqlSession.commit();
        System.out.println(cardBean.getCardcode()+"\t"+cardBean.getUserBean().getUsername());
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        sqlSession.close();
    }
}

Inserte la descripción de la imagen aquí

2. Hay varias formas de operación de consulta de uno a muchos en la consulta avanzada de mybatis, ¿cómo operar cada una?
Prueba de consulta de uno a varios
Requisitos: Consultar información de clase según el número de clase
Análisis: Necesitamos preparar 2 tablas de base de datos, la primera tabla de base de datos es para almacenar la información de la clase, la segunda tabla es para almacenar la información del estudiante en esta clase , luego uno Hay varios estudiantes en la clase, lo cual es una relación típica de uno a varios.
Crear tabla de base de datos
#Crear tabla de clase

create  table t_class(
class_id int primary key auto_increment,
class_code varchar(20),
class_name varchar(20)
);
#创建学生表
create  table t_student(
stu_id int primary key auto_increment,
class_id_fk int not null,
stu_name varchar(20),
stu_age int,
stu_address varchar(20),
foreign key(class_id_fk) references t_class(class_id)
);
#测试数据
insert into t_class values(null,'20190123','javaEE班');
insert into t_student values(null,1,'zhangsan',23,'西安');
insert into t_student values(null,1,'lisi',24,'北京');
insert into t_student values(null,1,'wangwu',25,'上海');
创建javabean
package com.wangxing.mybatis.bean;

import java.util.List;

public class ClassBean {
    private int classid;
    private String classcode;
    private String classname;
    //当我们查询班级信息的时候需要连同这个班级中的所有学生信息一起得到,
    //所以我们需要在保存班级信息的java实体类中新增一个集合类型的成员变量,用来保存这个班级的所有学生信息
    private List<StudentBean> studentBeanList;
    public int getClassid() {
        return classid;
    }

    public void setClassid(int classid) {
        this.classid = classid;
    }

    public String getClasscode() {
        return classcode;
    }

    public void setClasscode(String classcode) {
        this.classcode = classcode;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public List<StudentBean> getStudentBeanList() {
        return studentBeanList;
    }

    public void setStudentBeanList(List<StudentBean> studentBeanList) {
        this.studentBeanList = studentBeanList;
    }
}

package com.wangxing.mybatis.bean;

public class StudentBean {
    private  int stuid;
    private  int classidfk;
    private  String stuname;
    private  int stuage;
    private  String stuaddress;

    public int getStuid() {
        return stuid;
    }

    public void setStuid(int stuid) {
        this.stuid = stuid;
    }

    public int getClassidfk() {
        return classidfk;
    }

    public void setClassidfk(int classidfk) {
        this.classidfk = classidfk;
    }

    public String getStuname() {
        return stuname;
    }

    public void setStuname(String stuname) {
        this.stuname = stuname;
    }

    public int getStuage() {
        return stuage;
    }

    public void setStuage(int stuage) {
        this.stuage = stuage;
    }

    public String getStuaddress() {
        return stuaddress;
    }

    public void setStuaddress(String stuaddress) {
        this.stuaddress = stuaddress;
    }
}
创建数据访问接口
package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.ClassBean;

public interface ClassMapper {
    //根据班级名称查询班级信息,包含这个班级的所有学生
    ClassBean getClassAndStudentByClassName(String classname);
}
创建SQL映射文件
<?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="com.wangxing.mybatis.mapper.ClassMapper">
    <!--嵌套resultMap:方式1-->
    <!--collection 一对多的配置元素 -->
    <!--property:成员变量名称  -->
    <!--ofType:集合中元素的类型 -->
    <!--
    <resultMap id="classMap" type="com.wangxing.mybatis.bean.ClassBean">
        <id column="class_id"  property="classid"></id>
        <result column="class_code" property="classcode"></result>
        <result column="class_name" property="classname"></result>
        <collection property="studentBeanList" ofType="com.wangxing.mybatis.bean.StudentBean">
            <id column="stu_id"  property="stuid"></id>
            <result column="class_id_fk" property="classidfk"></result>
            <result column="stu_name" property="stuname"></result>
            <result column="stu_age" property="stuage"></result>
            <result column="stu_address" property="stuaddress"></result>
        </collection>
    </resultMap>
     -->

    <!--嵌套resultMap:方式2-->
    <!--collection 一对多的配置元素 -->
    <!--property:成员变量名称  -->
    <!--ofType:集合中元素的类型 -->
    <!--resultMap:引入其他的resultMap-->
    <resultMap id="classMap" type="com.wangxing.mybatis.bean.ClassBean">
        <id column="class_id"  property="classid"></id>
        <result column="class_code" property="classcode"></result>
        <result column="class_name" property="classname"></result>
        <collection property="studentBeanList"
                    ofType="com.wangxing.mybatis.bean.StudentBean"
                    resultMap="studentMap">
        </collection>
    </resultMap>
    <resultMap id="studentMap" type="com.wangxing.mybatis.bean.StudentBean">
        <id column="stu_id"  property="stuid"></id>
        <result column="class_id_fk" property="classidfk"></result>
        <result column="stu_name" property="stuname"></result>
        <result column="stu_age" property="stuage"></result>
        <result column="stu_address" property="stuaddress"></result>
    </resultMap>
    <select id="getClassAndStudentByClassName" parameterType="java.lang.String" resultMap="classMap">
            select class_id,class_code,class_name,
                    stu_id,class_id_fk,stu_name,stu_age,stu_address
                    from t_class inner join t_student
                    on class_id=class_id_fk
                    where class_name=#{classname};
    </select>
</mapper>

Código de prueba

//根据班级名称查询班级信息,包含这个班级的所有学生
public static void getClassAndStudentByClassName(){
    SqlSession sqlSession=null;
    try{
        sqlSession=getSqlSession();
        ClassMapper classMapper=sqlSession.getMapper(ClassMapper.class);
        ClassBean classBean=classMapper.getClassAndStudentByClassName("javaEE班");
        sqlSession.commit();
        List<StudentBean> studentBeanList=classBean.getStudentBeanList();
        for(StudentBean studentBean:studentBeanList){
            System.out.println(classBean.getClassname()+"\t"+classBean.getClasscode()+"\t"+studentBean.getStuname());
        }
    }catch (Exception e){
        e.printStackTrace();
        sqlSession.rollback();
    }finally {
        sqlSession.commit();
    }
}

resultado de la operación
Inserte la descripción de la imagen aquí

Crear javabean

package com.wangxing.mybatis.bean;
public class StudentBean {
    private  int stuid;
    private  int classidfk;
    private  String stuname;
    private  int stuage;
    private  String stuaddress;
    //当我们查询学生信息的时候需要连同这个学生所在班级的信息一起得到,
    // 所以我们需要在保存学生信息的java实体类中新增一个成员变量,用来班级信息
    private ClassBean classBean;
    public int getStuid() {
        return stuid;
    }

    public void setStuid(int stuid) {
        this.stuid = stuid;
    }

    public int getClassidfk() {
        return classidfk;
    }

    public void setClassidfk(int classidfk) {
        this.classidfk = classidfk;
    }

    public String getStuname() {
        return stuname;
    }

    public void setStuname(String stuname) {
        this.stuname = stuname;
    }

    public int getStuage() {
        return stuage;
    }

    public void setStuage(int stuage) {
        this.stuage = stuage;
    }

    public String getStuaddress() {
        return stuaddress;
    }

    public void setStuaddress(String stuaddress) {
        this.stuaddress = stuaddress;
    }

    public ClassBean getClassBean() {
        return classBean;
    }

    public void setClassBean(ClassBean classBean) {
        this.classBean = classBean;
    }
}

Crear interfaz de acceso a datos

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.StudentBean;

public interface StudentMapper {
    //根据学生id查询学生信息,包含学生所在班级的信息
    StudentBean getStudentAndClassById(int stuid);
}
SQL映射文件
<?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="com.wangxing.mybatis.mapper.StudentMapper">
    <!--嵌套select-->
    <resultMap id="studentMap" type="com.wangxing.mybatis.bean.StudentBean">
        <id column="stu_id"  property="stuid"></id>
        <result column="class_id_fk" property="classidfk"></result>
        <result column="stu_name" property="stuname"></result>
        <result column="stu_age" property="stuage"></result>
        <result column="stu_address" property="stuaddress"></result>
        <collection property="classBean" javaType="com.wangxing.mybatis.bean.ClassBean"
                    column="class_id_fk"
                    select="getClass"></collection>
    </resultMap>
    <select id="getStudentAndClassById" parameterType="int" resultMap="studentMap">
        select * from t_student where stu_id=#{stuid};
    </select>
    <resultMap id="classMap" type="com.wangxing.mybatis.bean.ClassBean">
        <id column="class_id"  property="classid"></id>
        <result column="class_code" property="classcode"></result>
        <result column="class_name" property="classname"></result>
    </resultMap>
    <select id="getClass" parameterType="int" resultMap="classMap">
        select * from t_class where class_id=#{classidfk};
    </select>
</mapper>

Código de prueba

//根据学生id查询学生信息,包含学生所在班级的信息
public static void getStudentAndClassById(){
    SqlSession sqlSession=null;
    try{
        sqlSession=getSqlSession();
        StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
        StudentBean studentBean=studentMapper.getStudentAndClassById(3);
        sqlSession.commit();
        System.out.println(studentBean.getStuname()+"\t"+studentBean.getClassBean().getClassname());
    }catch (Exception e){
        e.printStackTrace();
        sqlSession.rollback();
    }finally {
        sqlSession.commit();
    }
}

resultado de la operación
Inserte la descripción de la imagen aquí

3. ¿Cómo configurar la operación de consulta de varios a varios en la consulta avanzada de mybatis?
Requisito: consultar la información del rol de acuerdo con la identificación del rol y obtener el
análisis de información del grupo al que pertenece el rol : generalmente, un rol puede pertenecer a varios grupos, o puede haber múltiples roles en un grupo de roles, luego este rol y el grupo al que pertenece este rol Es una relación de uno a varios. En este momento, necesitamos 3 tablas. La primera tabla contiene la información del rol, la segunda tabla contiene la información del grupo del rol y la tercera tabla se usa para almacenar la relación entre el rol y el grupo al que pertenece el rol. Hoja de información.
Tenga en cuenta que la relación de varios a varios requiere una tabla de datos independiente para mantener la relación de varios a varios.
Crear estructura de tabla de base de datos

#创建角色表
create  table t_role(
role_id int primary key auto_increment,
role_name varchar(20),
role_info varchar(20)
);
#创建角色所属组表
create  table t_group(
group_id int primary key auto_increment,
group_name varchar(20),
group_info varchar(20)
);
#创建一个维护数据关系的中间表
create  table t_role_group(
id int primary key auto_increment,
role_id_fk int,
group_id_fk int
);     
#创建外键
ALTER TABLE t_role_group ADD CONSTRAINT role_id_fk FOREIGN KEY(role_id_fk) REFERENCES t_role(role_id);
ALTER TABLE t_role_group ADD CONSTRAINT group_id_fk FOREIGN KEY(group_id_fk) REFERENCES t_group(group_id);
#添加测试数据
insert  into t_role values(null,'管理员','管理其他用户');
insert  into t_role values(null,'普通用户','具有普通权限');
insert  into t_group values(null,'CRM组','负责开发维护CRM项目');
insert  into t_group values(null,'ERP组','负责开发维护ERP项目');
insert  into t_role_group values(null,1,1);
insert  into t_role_group values(null,1,2);
insert  into t_role_group values(null,2,1);
insert  into t_role_group values(null,2,2);
创建javabean
package com.wangxing.mybatis.bean;

import java.util.List;

public class RoleBean {
    private  int  roleid;
    private  String rolename;
    private  String roleinfo;
    //由于我们在查询角色信息的时候需要得到角色所属的信息,
    //因此我们需要在保存角色信息的java类中创建一个集合类型成员变量,
    //用来保存角色所属组信息
    private List<GroupBean> grouplist;

    public int getRoleid() {
        return roleid;
    }

    public void setRoleid(int roleid) {
        this.roleid = roleid;
    }

    public String getRolename() {
        return rolename;
    }

    public void setRolename(String rolename) {
        this.rolename = rolename;
    }

    public String getRoleinfo() {
        return roleinfo;
    }

    public void setRoleinfo(String roleinfo) {
        this.roleinfo = roleinfo;
    }

    public List<GroupBean> getGrouplist() {
        return grouplist;
    }

    public void setGrouplist(List<GroupBean> grouplist) {
        this.grouplist = grouplist;
    }
}

package com.wangxing.mybatis.bean;

import java.util.List;

public class GroupBean {
    private  int  groupid;
    private  String groupname;
    private  String groupinfo;
    //由于我们在查询角色所属组信息的时候需要得到角色的基本信息,
    //所以我们需要在保存角色所属组信息的java实体类中,创建一个集合类型的成员变量,
    //用来保存这个组中的角色信息
    private  List<RoleBean> rolelist;

    public int getGroupid() {
        return groupid;
    }

    public void setGroupid(int groupid) {
        this.groupid = groupid;
    }

    public String getGroupname() {
        return groupname;
    }

    public void setGroupname(String groupname) {
        this.groupname = groupname;
    }

    public String getGroupinfo() {
        return groupinfo;
    }

    public void setGroupinfo(String groupinfo) {
        this.groupinfo = groupinfo;
    }

    public List<RoleBean> getRolelist() {
        return rolelist;
    }

    public void setRolelist(List<RoleBean> rolelist) {
        this.rolelist = rolelist;
    }
}

Crear interfaz de acceso a datos

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.RoleBean;

public interface RoleMapper {
    //根据角色名称查询角色信息,包含角色所属组的信息
    RoleBean getRoleAndGroupByRoleName(String rolename);
}

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.GroupBean;

public interface GroupMapper {
    //根据角色组名称查询角色组信息,包含角色信息
    GroupBean  getGroupAndRoleByGroupName(String groupname);
}
创建SQL映射文件
<?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="com.wangxing.mybatis.mapper.RoleMapper">
<resultMap id="roleMap" type="com.wangxing.mybatis.bean.RoleBean">
    <id column="role_id" property="roleid"></id>
    <result column="role_name" property="rolename"></result>
    <result column="role_info" property="roleinfo"></result>
    <collection property="grouplist" ofType="com.wangxing.mybatis.bean.GroupBean">
        <id column="group_id" property="groupid"></id>
        <result column="group_name" property="groupname"></result>
        <result column="group_info" property="groupinfo"></result>
    </collection>
</resultMap>
<select id="getRoleAndGroupByRoleName" parameterType="java.lang.String" resultMap="roleMap">
        select role_id,role_name,role_info,
                group_id,group_name,group_info
                from t_role inner join t_role_group
                on role_id = role_id_fk
                inner join t_group
                on group_id = group_id_fk
                where role_name=#{rolename};
    </select>
</mapper>
测试代码
//根据角色名称查询角色信息,包含角色所属组的信息
public  static void getRoleAndGroupByRoleName(){
    SqlSession sqlSession=null;
    try{
        sqlSession=getSqlSession();
        RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
        RoleBean roleBean=roleMapper.getRoleAndGroupByRoleName("管理员");
        sqlSession.commit();
        //得到角色组
        List<GroupBean> groupBeanList=roleBean.getGrouplist();
        for(GroupBean groupBean:groupBeanList){
            System.out.println(roleBean.getRolename()+"\t"+groupBean.getGroupname());
        }
    }catch (Exception e){
        e.printStackTrace();
        sqlSession.rollback();
    }finally {
        sqlSession.close();
    }
}

resultado de la operación
Inserte la descripción de la imagen aquí

Crear archivo de mapeo SQL

<?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="com.wangxing.mybatis.mapper.GroupMapper">
    <resultMap id="groupMap" type="com.wangxing.mybatis.bean.GroupBean">
        <id column="group_id" property="groupid"></id>
        <result column="group_name" property="groupname"></result>
        <result column="group_info" property="groupinfo"></result>
        <collection property="rolelist"
                    ofType="com.wangxing.mybatis.bean.RoleBean"
                    resultMap="roleMap"></collection>
    </resultMap>
    <resultMap id="roleMap" type="com.wangxing.mybatis.bean.RoleBean">
        <id column="role_id" property="roleid"></id>
        <result column="role_name" property="rolename"></result>
        <result column="role_info" property="roleinfo"></result>
    </resultMap>
    <select id="getGroupAndRoleByGroupName" parameterType="java.lang.String" resultMap="groupMap">
        select group_id,group_name,group_info,
               role_id,role_name,role_info
               from t_group inner join t_role_group
                on group_id = group_id_fk
                inner join t_role
                on role_id = role_id_fk
                where group_name=#{groupname};
    </select>
</mapper>
测试代码
//根据角色组名称查询角色组信息,包含角色信息
public  static void getGroupAndRoleByGroupName(){
    SqlSession sqlSession=null;
    try{
        sqlSession=getSqlSession();
        GroupMapper groupMapper=sqlSession.getMapper(GroupMapper.class);
        GroupBean groupBean=groupMapper.getGroupAndRoleByGroupName("ERP组");
        sqlSession.commit();
        //得到角色组中的所有角色
        List<RoleBean> roleBeanList=groupBean.getRolelist();
        for(RoleBean roleBean:roleBeanList){
            System.out.println(groupBean.getGroupname()+"\t"+roleBean.getRolename());
        }
    }catch (Exception e){
        e.printStackTrace();
        sqlSession.rollback();
    }finally {
        sqlSession.close();
    }
}

resultado de la operación

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/guoguo0717/article/details/109604132
Recomendado
Clasificación