遇到这种情况的实体类,需要在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