Java实体类中封装其他实体类并引用

2023-10-31

在Java开发过程中有很多情况是二个表及以上的联合操作,这是需要分清楚表的主次关系。在引用的时候有人会把二个表的数据全都封装在一个实体类中,然后在对这个实体类进行操作,但如果是三个表呢?四个表呢?还都封装在一个实体类吗?这样被封装的实体类的数据是不是太多了呢?而且也会照成层次不分,大大的抬高了代码的耦合性。和实体类泛滥的情况。下面开始介绍该如何正确的封装实体类

第一个实体类

public class UsersLogin {
    private Integer usersId;
    private String usersName;
    private String pass;
    private int flag;
    //省略Getter和Setter
    }

第二个实体类

public class Shoopping {
    private Integer shoopId;
    private String goodsName;
    private Double price;
    private String address;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date produceDate;
    private String picture;
    private String categoryName;
    private int num;
    private int flag;
    //引用第一个表的实体对象
    private UsersLogin usersLogin;
    //省略Getter和Setter
    }

使用mapper.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.springboot.mapper.ShiroUserMapper">
<resultMap autoMapping="true" type="com.springboot.entity.UsersLogin " id="goodsMap">
    <id property="usersId" column="usersId"/>
    <association autoMapping="true" property="shiroUser" javaType="com.springboot.entity.Shoopping ">
        <id property="shoopId" column="shoopId"/>
    </association>
            <!--
        复杂的属性我们需要单独处理
           对象使用 : association
           集合使用 : collection
        -->
        <!--   collection中的ofType:使用ofType获取   -->
<!--        <collection property="实体类属性名" ofType="接收获取的内容">-->
<!--            <result column="employee_id" property="employeeId"></result>-->
<!--        </collection>-->
</resultMap>
    <select id="findUserList" resultMap="goodsMap">
         select * from UsersLogin u,Shoopping r where u.usersId=r.shoopId
    </select>
</mapper>

查询结果(我这展示的结果跟上面的实体类不对应,但大致结果是这种格式的)

[
UserList{id=1, user_name='admin@shiro.con', password='admin', role=Role{id=1, role_name='admin', user_name='admin@shiro.con'}},
UserList{id=2, user_name='test@shiro.con', password='e10adc3949ba59abbe56e057f20f883e', role=Role{id=2, role_name='test', user_name='test@shiro.con'}}]

第二种:创建第三个实体类,直接把这二个实体类封装里面

第一个ShiroUser

public class ShiroUser {
    private int id;
    private String user_name;
    private String password;
    //省略里面的方法
    }

第二个Shiro_user_role

public class Shiro_user_role {
    private int id;
    private String role_name;
    private String user_name;
    //省略方法
    }

第三个UserList

public class UserList {
    private ShiroUser shiroUser;
    private Shiro_user_role role;
    //省略方法
    }

配置mapper.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.springboot.mapper.ShiroUserMapper">
    <resultMap autoMapping="true" type="com.springboot.entity.UserList" id="goodsMap">
        <association autoMapping="true" property="role" javaType="com.springboot.entity.Shiro_user_role">
            <id property="user_name" column="user_name"/>
        </association>
        <association autoMapping="true" property="shiroUser" javaType="com.springboot.entity.ShiroUser">
            <id property="user_name" column="user_name"/>
        </association>
    </resultMap>
    <select id="findUserList" resultMap="goodsMap">
         select * from shiro_user u,shiro_user_role r where u.user_name=r.user_name
    </select>
</mapper>

结果:

[
UserList{shiroUser=ShiroUser{id=1, user_name='admin@shiro.con', password='admin'},
role=Role{id=1, role_name='admin', user_name='admin@shiro.con'}
},
UserList{shiroUser=ShiroUser{id=2, user_name='test@shiro.con', password='e10adc3949ba59abbe56e057f20f883e'},
role=Role{id=2, role_name='test', user_name='test@shiro.con'}
}
]

如果需要在html页面显示:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>权限管理</title>
</head>
<body>
  <table>
      <tr>
          <td>id</td><td>用户名</td><td>角色</td>
      </tr>
      <th:block th:each="u:${userLists}">
          <tr>
              <td th:text="${u.getShiroUser().getId()}"></td>
              <td th:text="${u.getShiroUser().getUser_name()}">
              <td th:text="${u.getRole().getRole_name()}">
          </tr>
      </th:block>
  </table>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实体类中封装其他实体类并引用 的相关文章

随机推荐

  • Java 读取某文件下的所有文件名称以及大小,并输出在xls表格里

    方法一 package com test demo test import lombok Data import java io import java util ArrayList import java util List Title
  • np.clip的使用方法

    np clip的使用方法 参数数量及其作用 示例 参数数量及其作用 np clip是一个截取函数 用于截取数组中小于或者大于某值的部分 并使得被截取部分等于固定值 函数如下 np clip a a min a max out None 该函
  • WSL2中使用GPU

    在WSL2上安装CUDA和NVIDIA HPC SDK 1 WSL2和Ubuntu的安装 2 安装显卡驱动 3 在WSL2中安装CUDA 4 安装 NVIDIA HPC SDK Windows10内部预览版20145及之后的版本的WSL2支
  • 软件设计模式详解 #CSDN博文精选# #IT技术# #软件模式# #设计模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 五、IDEA中创建Web项目

    文章目录 5 1 创建Web项目 5 1 1 创建项目 5 1 2 编写Servlet类 5 2 手动部署项目 5 3 自动部署项目 5 3 1 IDEA集成Tomcat 5 3 2 IDEA部署JavaWeb项目 5 4 war包部署 5
  • css被点击后改变样式,Js 通过点击改变css样式

    通过js 点击按钮去改变目标原始的背景颜色Change html function test4 event if event value 11 取div1 var div1 document getElementById div1 div1
  • voronoi图编程构造_可视化编程真的有那么糟糕?

    作者 Anton Livaja 译者 弯月 责编 屠敏 以下为译文 我想告诉你 如果使用恰当 可视化编程和是图解推理是一个非常强大的工具集 也就是说 只有当可视化编程扎根于数学和计算机科学并建立坚实的基础 才能发挥良好的作用 为了降低编程的
  • 《职场情绪稳定:内在的力量与策略》

    近期发生的新闻热点 如大规模裁员 创业公司倒闭 公共卫生事件等 让公众更加关注稳定情绪和心理健康的问题 在职场中 我们常常遇到各种挑战和压力 如何保持稳定的情绪成了一个重要的话题 首先 让我们分享一些工作中可能引发我们情绪波动的事情 我曾经
  • IT项目管理七

    Tony Prince 和他的团队正在做一个娱乐和健康方面的项目 他们被要求修改现有的成本估计 以便能有一个可靠的评价项目绩效的基线 你的进度和成本目标是在6个月内在200 000美元的预算下完成项目 1 作业一 准备和打印一页类似于图7
  • 求n个数的最小公倍数(C语言)

    Problem Description 求n个数的最小公倍数 Input 输入包含多个测试实例 每个测试实例的开始是一个正整数n 然后是n个正整数 Output 为每组测试数据输出它们的最小公倍数 每个测试实例的输出占一行 你可以假设最后的
  • java项目 畅购商城 购物车

    第10章 购物车 学习目标 能够通过SpringSecurity进行权限控制 掌握购物车流程 掌握购物车渲染 微服务之间的认证访问 1 SpringSecurity权限控制 用户每次访问微服务的时候 先去oauth2 0服务登录 登录后再访
  • 网易游戏(互娱)游戏研发一面&二面(已收到offer)

    简单来讲下上周面网易互娱的心得 因为我不是走内推而是直接怼笔试的 所以上周才有了笔试结果然后被告知面试 我面的岗位是游戏研发工程师 初级 一面 40分钟左右 开始是简单的自我介绍 C 关于C 问的比较简单 因为我跟面试官说我主要学的是Jav
  • 风格回调函数 vs c++风格虚基类

    http www cnblogs com raymon archive 2012 08 28 2660876 html 风格回调函数 vs c 风格虚基类 关于接口定义和调用的对比 c 中也很常用回调函数 比如MFC中 既可以用回调函数的方
  • APP移动端自动化基础及appium环境搭建

    目录 APP移动端自动化测试基础 主流移动端自动化工具 Appium介绍 Appium工作原理 Appium环境搭建 安装前准备工具 安装Android SDK 配置环境变量 安装Python client 安装夜神模拟器 mumu模拟器
  • 一文一图搞懂OSI七层模型

    什么是OSI 所谓的OSI 是由国际化标准组织 ISO 针对开放式网路架构所制定的电脑互连标准 全名是开放式通讯系统互连参考模型 Open System Interconnection Reference Model 简称OSI模型 该模型
  • Air780E

    目录 Air780E编译指南 准备工作 下载源码 注意 需要两个库 准备工具 工具链下载 开始编译 常见编译问题 Air780E编译指南 https wiki luatos com develop compile Air780E html
  • 全面深入彻底理解Python切片操作【原创】

    全面深入彻底理解Python切片操作 原创 我们基本上都知道Python的序列对象都是可以用索引号来引用的元素的 索引号可以是正数由0开始从左向右 也可以是负数由 1开始从右向左 在Python中对于具有序列结构的数据来说都可以使用切片操作
  • 系统权限-数据权限案例分析

    文章目录 前言 一 数据权限 三 源代码下载 四 数据库权限设计图 五 数据权限前台界面 六 数据权限服务端 6 1 aop 拦截 数据范围 6 2 数据实现层ServiceImpl 埋点 七 总结 7 1设计思路 7 2 缺陷 前言 传统
  • TestNG单元测试框架-常用注解介绍以及testng和Junit的区别【杭州多测师_王sir】【杭州多测师】...

    一 TestNG单元测试框架 常用注解介绍 testng学习网址 https www jc2182 com testng testng environment html 1 Before类别和After类别注解按照如下循序执行 Before
  • Java实体类中封装其他实体类并引用

    在Java开发过程中有很多情况是二个表及以上的联合操作 这是需要分清楚表的主次关系 在引用的时候有人会把二个表的数据全都封装在一个实体类中 然后在对这个实体类进行操作 但如果是三个表呢 四个表呢 还都封装在一个实体类吗 这样被封装的实体类的