Mybatis 返回对象中包含 List集合

导读:本篇文章讲解 Mybatis 返回对象中包含 List集合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

遇到这种情况的实体类,需要在mapper.xml文件里使用

resultMap标签以及其他子标签.

先贴代码:

实体类:

UserEntity类:
private Long id;// 用户id
private String username;// 用户名
private String password;// 密码
private List<Role> userRoles;// 用户角色集合
Role类:

public class Role {
    private Integer id;    //角色id
    private String roleName;   //角色名称
}

sql文件:

t_user:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, '123', 'admin');
INSERT INTO `t_user` VALUES (2, '456', 'admin');

SET FOREIGN_KEY_CHECKS = 1;

t_role:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_role
-- ----------------------------
DROP TABLE IF EXISTS `t_role`;
CREATE TABLE `t_role`  (
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `role_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '角色名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_role
-- ----------------------------
INSERT INTO `t_role` VALUES (1, 'ROLE_USER');
INSERT INTO `t_role` VALUES (2, 'ROLE_ADMIN');

SET FOREIGN_KEY_CHECKS = 1;

t_user_roles:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user_roles
-- ----------------------------
DROP TABLE IF EXISTS `t_user_roles`;
CREATE TABLE `t_user_roles`  (
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '用户角色对照ID',
  `user_id` int(8) NULL DEFAULT NULL COMMENT '用户ID',
  `role_id` int(8) NULL DEFAULT NULL COMMENT '角色ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user_roles
-- ----------------------------
INSERT INTO `t_user_roles` VALUES (1, 1, 1);
INSERT INTO `t_user_roles` VALUES (2, 2, 2);

SET FOREIGN_KEY_CHECKS = 1;

application.yml :

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db03?characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
logging:
  level:
    com.example.bdatabaserole.mapper: debug  # 打印sql语句

mybatis:
  mapper-locations: classpath:mapper/*.xml

Mapper 接口

@Mapper
public interface UserMapper {
    List<UserEntity> getUserByUsername(@Param("username") String username);
}

UserMapper .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">
<mapper namespace="com.example.test.mapper.UserMapper">
<!--                                  按住Ctrl+Alt+C可以获取全限定类名     -->
    <resultMap id="userRoleMap" type="com.example.test.entity.UserEntity">
        <id property="uid" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <collection property="userRoles" ofType="com.example.test.entity.Role">
            <id property="id" column="id"/>
            <result property="roleName" column="role_name"></result>
        </collection>
    </resultMap>

    <select id="getUserByUsername" resultMap="userRoleMap" parameterType="java.lang.String">
        SELECT u.id, u.username, u.`password`, r.role_name,r.id
        FROM `t_role` r,
             t_user u,
             t_user_roles ur
        WHERE r.id = ur.role_id
          AND u.id = ur.user_id
          AND u.username = #{username}
    </select>
</mapper>

UserService 接口

public interface UserService {
    List<UserEntity> getUserByUsername(String username);
}

UserServiceImpl 实现类

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;

    @Override
    public List<UserEntity> getUserByUsername(String username) {
        return userMapper.getUserByUsername(username);
    }
}
UserController 类

@RestController
@RequestMapping("/User")
public class UserController {

    @Autowired
    UserService userService;

    @GetMapping("/getUserByUsername")
    List<UserEntity> getUserByUsername(String username){
        return userService.getUserByUsername(username);
    }
}
结果:
[
    {
        "uid": 1,
        "username": "123",
        "password": "admin",
        "userRoles": [
            {
                "id": 1,
                "roleName": "ROLE_USER"
            }
        ]
    }
]

telnet

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105117.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!