我是靠谱客的博主 忐忑电源,最近开发中收集的这篇文章主要介绍Mybatis对象关系映射中一对多、多对一、多对多关系出现相同字段名的情况处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、有下面三个类,关系为一对多(多对一、多对多关系同理)
1、UserInfo

public class UserInfo {
    private Long id;
    private String username;
    private String password;
    private String salt;
    private List<RoleInfo> roleInfos;
。。。。。。

2、RoleInfo

public class RoleInfo {
    private Long id;
    private String roleName;
    private List<PermissionInfo> permissionInfos;
。。。。。。

3、PermissionInfo

public class PermissionInfo {
    private Long id;
    private String permissionName;
。。。。。。

二、数据库表结构

CREATE TABLE `user_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `salt` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `role_info` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `permission_info` (
  `id` bigint(20) NOT NULL,
  `permission_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

三、可以看出三个表都有相同的字段 id,如果不做任何处理,查询结果会出问题
解决方法一:修改数据库表结构,为每个表的id取不同的名称(如果项目刚开始做,表结构还没成形,推荐用这个方法;否则将会对当前代码造成大量改动,不推荐)
解决方法二:为字段名重复的列取别名,具体操作如下:

	<resultMap id="UserFullInfoMap" type="com.xxs.shirodemo.entity.UserInfo">
        <id column="u_id" jdbcType="BIGINT" property="id"/>                                   //u_id
        <result column="user_name" jdbcType="VARCHAR"  property="userName"/>
        <result column="password" jdbcType="VARCHAR" property="password"/>
        <result column="salt" jdbcType="VARCHAR" property="salt"/>

        <collection property="roleInfos" ofType="com.xxs.shirodemo.entity.RoleInfo">
            <id column="r_id" jdbcType="BIGINT" property="id"/>                               //r_id
            <result column="role_name" jdbcType="VARCHAR" property="roleName"/>
            <collection property="permissionInfos" ofType="com.xxs.shirodemo.entity.PermissionInfo">
                <id column="p_id" jdbcType="BIGINT" property="id"/>                            //p_id
                <result column="permission_name" jdbcType="VARCHAR" property="permissionName"/>
            </collection>
        </collection>
    </resultMap>

    <select id="getUserInfoByUserName" resultType="com.xxs.shirodemo.entity.UserInfo">
        select ui.id u_id,ui.user_name,ui.password,ui.salt,ri.id r_id,ri.role_name,pi.id p_id,pi.permission_name
        from (SELECT * from user_info where user_name=#{value}) ui
        left join user_role ur on ui.id=ur.user_id
        left join role_info ri on ri.id=ur.role_id
        left join role_permission rp on rp.role_id=ur.role_id
        left join permission_info pi on rp.permission_id=pi.id
    </select>

最后

以上就是忐忑电源为你收集整理的Mybatis对象关系映射中一对多、多对一、多对多关系出现相同字段名的情况处理的全部内容,希望文章能够帮你解决Mybatis对象关系映射中一对多、多对一、多对多关系出现相同字段名的情况处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部