IDEA Mybatis复杂结果映射

1.一对一结果映射

①数据库表

t_user表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`username`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`password`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`role_id`  int(11) NULL DEFAULT NULL ,
`createtime`  timestamp NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=13
ROW_FORMAT=DYNAMIC

在这里插入图片描述

t_role表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`rolekey`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`rolename`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=4
ROW_FORMAT=DYNAMIC

在这里插入图片描述

②基础数据类User及Role

User类

public class User {
    private Integer id;
    private String username;
    private String password;
    private Role role;
    // set/get,构造函数及toString省略...
}

Role类

public class Role {
    private Integer id;
    private String key;
    private String name;  
    // set/get,构造函数及toString省略...
}
③映射类

UserMapper接口映射类

	/**
     * 查看所有User记录
     * @return
     */
    List<User> getUsers();
④配置文件

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 不写会报错 -->
<!DOCTYPE mapper PUBLIC
        "-//mybatis.org/DTD Mapper 3.0"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cx.mapper.UserMapper">
	<!--
        property表示基本类中的属性名称
        column表示对应数据库生成表中字段名称
    -->
    <resultMap id="userResult" type="User">
        <!--普通字段,映射简单数据类型(如String,int,double,Date等)-->
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <!--复杂字段(如自定义的类Role,User等)-->
        <association property="role" javaType="Role">
            <id property="id" column="role_id"/>
            <result property="key" column="rolekey"/>
            <result property="name" column="rolename"/>
        </association>
    </resultMap>
    <select id="getUsers" resultMap="userResult">
        SELECT
            a.id,
            a.username,
            a.password,
            b.id role_id,
            b.rolekey,
            b.rolename
        FROM
            t_user a
        LEFT JOIN t_role b ON a.role_id = b.id
    </select>
</mapper>
⑤测试功能

MybatisTest测试类

public class MybatisTest {
    /**
     * 获取通道
     */
    SqlSession sqlSession = DataBaseTools.getSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	@Test
    public void test07(){
        List<User> userList = userMapper.getUsers();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

显示结果
在这里插入图片描述

2.一对多结果映射

①数据库表

t_role表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`rolekey`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`rolename`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=4
ROW_FORMAT=DYNAMIC

在这里插入图片描述

t_role_permission表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`roleid`  int(11) NULL DEFAULT NULL ,
`permissionid`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=28
ROW_FORMAT=DYNAMIC

在这里插入图片描述
t_permission表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL ,
`permissionkey`  varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=15
ROW_FORMAT=DYNAMIC

在这里插入图片描述

②基础数据类Role及Permission

Role类

public class Role {
    private Integer id;
    private String key;
    private String name;

    /**
     * 一对多关系集合
     */
    private List<Permission> permissionList;
    // set/get,构造函数及toString省略...
}

Permission类

public class Permission {
    private Integer id;
    private String name;
    private String key;
    // set/get,构造函数及toString省略...
}
③映射类

RoleMapper接口映射类

public interface RoleMapper {
    /**
     * 根据ID获取Role
     * @param id
     * @return
     */
    Role getRoleById(@Param("id") Integer id);
}
④配置文件

RoleMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 不写会报错 -->
<!DOCTYPE mapper PUBLIC
        "-//mybatis.org/DTD Mapper 3.0"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cx.mapper.RoleMapper">

        <resultMap id="rolePermissionMap" type="Role">
            <id property="id" column="id"/>
            <result property="key" column="rolekey"/>
            <result property="name" column="rolename"/>
            <!--复杂类型集合-->
            <!--ofType复杂类型集合中的类名称-->
            <collection property="permissionList" ofType="Permission">
                <id property="id" column="permissionid"/>
                <result property="name" column="name"/>
                <result property="key" column="permissionkey"/>
            </collection>
        </resultMap>
        <select id="getRoleById" resultMap="rolePermissionMap">
            SELECT
                a.*, c.id permissionid,
                c.name,
                c.permissionkey
            FROM
                t_role a
            LEFT JOIN t_role_permission b ON a.id = b.roleid
            LEFT JOIN t_permission c ON b.permissionid = c.id
            WHERE
                a.id = #{id}
        </select>

</mapper>
⑤测试功能

MybatisTest测试类

public class MybatisTest {
    /**
     * 获取通道
     */
    SqlSession sqlSession = DataBaseTools.getSession();
    RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
    @Test
    public void test08(){
        Role role = roleMapper.getRoleById(1);

        System.out.print(role.getId() + "\t");
        System.out.print(role.getName() + "\t");
        System.out.println(role.getKey());
        System.out.println("拥有的权限:");
        for (Permission permission : role.getPermissionList()) {
            System.out.println(permission.getName());
        }
    }
}

显示结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ww空ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值