Java实体类——entity类的使用与学习

一、前言(项目代码引申)

在一个开发的android项目中,使用到了Entity类
在这里插入图片描述
其中SecurityDomain是一个架构模板可忽略,其余四个Entity类是根据实际功能需求扩写的,项目中这四个实体类在(1)对应的Fragment类(2)Repository(3)VehicleViewModel中使用。
这四个Entity类中包含构造方法,对应开关(Switch)的功能写了is和set方法,对应设置选项的功能写了get和set方法。

set ,get完全是自我规定的,就是设置初值和获得值的意思.你也可以修改成其他字符.但是用set ,get还是要好些,因为你能通过单词理解你写的代码的意思,方便阅读而已。

这边以包含了is,set,get方法的CommonEntity为例,看一下代码:

public class CommonEntity {
    
    
    private int drivingMode;
    private int lampMode = -1;
    private boolean epbRelease;
    private boolean escSwitch;
    private boolean autoHoldSwitch;

    public CommonEntity(int drivingMode, int lampMode, boolean epbRelease, boolean escSwitch, boolean autoHoldSwitch) {
    
    
        this.drivingMode = drivingMode;
        this.lampMode = lampMode;
        this.epbRelease = epbRelease;
        this.escSwitch = escSwitch;
        this.autoHoldSwitch = autoHoldSwitch;
    }

    public boolean isEscSwitch() {
    
    
        return escSwitch;
    }

    public void setEscSwitch(boolean escSwitch) {
    
    
        this.escSwitch = escSwitch;
    }

    public boolean isAutoHoldSwitch() {
    
    
        return autoHoldSwitch;
    }

    public void setAutoHoldSwitch(boolean autoHoldSwitch) {
    
    
        this.autoHoldSwitch = autoHoldSwitch;
    }


    public boolean isEpbRelease() {
    
    
        return epbRelease;
    }

    public void setEpbRelease(boolean epbRelease) {
    
    
        this.epbRelease = epbRelease;
    }

    public int getDrivingMode() {
    
    
        return drivingMode;
    }

    public void setDrivingMode(int drivingMode) {
    
    
        this.drivingMode = drivingMode;
    }

    public int getLampMode() {
    
    
        return lampMode;
    }

    public void setLampMode(int lampMode) {
    
    
        this.lampMode = lampMode;
    }
}

在设计完这四个实体类后,对实体类的具体作用及相关知识产生了好奇,便去找了相关的文章认真理解了一下。学习后,对比发现自己写的Entity实体类相对简单,对实体类(Entity)的具体内容也有了更深的理解。

二、实体类的众多理解

对java实体类的众多理解:

A .就是属性类,通常定义在model层里面
B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段。
好处:
1.对对象实体的封装,体现OO思想。
2.属性可以对字段定义和状态进行判断和过滤
3.把相关信息用一个实体类封装后,我们在程序中可以把实体类作为参数传递,更加方便。
C. 说白了就是为了让程序员在对数据库操作的时候不用写SQL语句
D. 就是一个数据库表生成一个类
这样做对数据库操作起来方便
编写代码较少 提高效率 可以使程序员专注逻辑关系
E. 实体类就是把对某一个表的操作全写在一个类中.
F. 在Java开发中经常要定义一些实体类,这些类的定义的好坏会直接影响,编写代码的质量和难易程度
G. 实体类中都是实例对象,实例对象在jvm的堆区中开辟了一个该对象引用空间,并且让该引用指向某个实例,类声明只是在jvm的栈去中开辟了一个该对象引用,没有让该引用做任何指向.
例如 :
1.String str;
2.String str = new String (“dgfgg”);
1中的只是一个引用,说明str应该指向一个String 类型的实例,但还没对str和堆区的实例做具体的指向.也就是说它还没有指向某个实例.
而2中的即定义了一个引用(str)又对str做了具体的指向,它指向的内容就是后面new出来的String 实例.

总结:实体是就是Java中的O/R Mapping映射,即数据库中的一个表映射成对应的一个Java类,其中还有一个映射文件。给定一个较复杂的实体关系(如一对一,一对多,多对多),应该熟练地写出实体类!!

三、实体类的作用

实体类其实就是俗称的POJO,这种类一般不实现特殊框架下的接口,在程序中仅作为数据容器用来持久化存储数据用的

POJO(Plain Old Java Objects)简单的Java对象

它的一般格式就是

public class A{
    
    
      private String id;
      public String getId(){
    
    
           return this.id;
      }
      public void setId(String id){
    
    
           this.id = id;
      }
}

其实这样写的意义就在于封装,id作为类A的成员变量,也称属性,一般情况下拥有读和写的能力,我们将id设为private,则外部无法对其直接进行操作,同时通过set方法提供了外部更改其value的方法,又通过get方法使外界能读取该成员变量的值。

这边提到POJO,正好最近在阅读阿里巴巴Java开发手册,关于POJO的编程规范之命名规约做一点补充:
在这里插入图片描述

四、实体类的书写规范

在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法。entity(实体类)的作用一般是和数据表做映射。所以快速写出规范的entity(实体类)是java开发中一项必不可少的技能。

在项目中写实体类一般遵循下面的规范:
1、实体类的名字尽量和数据库的表的名字对应相同。
2、实现序列化,即实现java.io.Serializable接口
3、实体类有属性和方法,属性对应数据库中表的字段,主要有getter和setter方法,即:
(1)根据你的设计,定义一组你需要的私有属性。
(2)根据这些属性,创建它们的setter和getter方法。
4、提供无参数的构造(方法)器。
5、提供带参数的构造(方法)器。
6、实体类还应该有个属性serialVersionUID,即赋予其一个版本号。例如:private static final long serialVersionUID = -6125297654796395674L;
7、重写父类中的eauals()方法和hashcode()方法。(如果需要涉及到两个对象之间的比较,这两个功能很重要。)
8、属性一般是private类型,方法为public类型,对于数据库自动生成的ID字段对应的属性的set方法应为private

一个实体类(entity)例子:具体的细节都已用注释标注。

class Student implements Serializable{
    
    
    /**
     * 版本号
     */
    private static final long serialVersionUID = 1L;
    //定义的私有属性
    private int id;
    private String name;
    private int age;
    private double score;
    //无参数的构造器
    public Student(){
    
    
        
    }
    //有参数的构造器
    public Student(int id,String name,int age, double score){
    
    
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }
    //创建的setter和getter方法
    public int getId() {
    
    
        return id;
    }
    public void setId(int id) {
    
    
        this.id = id;
    }
    public String getName() {
    
    
        return name;
    }
    public void setName(String name) {
    
    
        this.name = name;
    }
    public int getAge() {
    
    
        return age;
    }
    public void setAge(int age) {
    
    
        this.age = age;
    }
    public double getScore() {
    
    
        return score;
    }
    public void setScore(double score) {
    
    
        this.score = score;
    }
    //由于id对于学生这个类是唯一可以标识的,所以重写了父类中的id的hashCode()和equals()方法。
    @Override
    public int hashCode() {
    
    
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
    
    
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (id != other.id)
            return false;
        return true;
    }
    
}

五、序列化的必要性

Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。

Java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据

Java串行化技术可以使你将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中。JVM停止之后,这些状态就丢失了。在很多情况下,对象的内部状态是需要被持久化下来的。提到持久化,最直接的做法是保存到文件系统或是数据库之中。这种做法一般涉及到自定义存储格式以及繁琐的数据转换对象关系映射(Object-relationalmapping)是一种典型的用关系数据库来持久化对象的方式也存在很多直接存储对象的对象数据库对象序列化机制(objectserialization)是Java语言内建的一种对象持久化方式,可以很容易的在JVM中的活动对象和字节数组(流)之间进行转换。除了可以很简单的实现持久化之外,序列化机制的另外一个重要用途是在远程方法调用中,用来对开发人员屏蔽底层实现细节

参考:https://blog.csdn.net/qijingwang/article/details/80353829

猜你喜欢

转载自blog.csdn.net/ambitionLlll/article/details/111192094