菜鸟入坑》transient修饰词的使用

场景:

Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Serializable接口,目的就是为了让其可序列化。

当然,序列化后的最终目的是为了反序列化,恢复成原先的Java对象,要不然序列化后干嘛呢,所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化。

作用:

transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化,如果有如下情况,可以考虑使用关键字transient修饰。

例子:

package com.wolf.cop.datamode;
import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.util.Date;
@Table(name="tf_r_user")
@Entity
@DynamicUpdate
@Data
public class User implements Serializable{
    @Id
    private transient String userId;
    private String userName;
    private String password;
    private String openId;
    @Min(value = 16,message = "未满16周岁不可以开户!")
    private Integer age;
    private Date createTime;
    private Date updateTime;
    public User() {
    }
}
package com.wolf.cop;
import com.wolf.cop.datamode.User;
import java.io.*;
import java.util.HashMap;
public class Test {
    @org.junit.Test
    public void test1() throws  Exception {
        User user = new User();
        user.setUserId("12345");
        user.setUserName("mzz");
        System.out.println("id=:"+user.getUserId());
        System.out.println("name=:"+user.getUserName());
        String path = "D:"+ File.separator+"Object.txt";
        File file = new File(path);
        ObjectOutput out = new ObjectOutputStream(new FileOutputStream(file));
        out.writeObject(user);
        ObjectInput input = new ObjectInputStream(new FileInputStream(file));
        User user1 = (User) input.readObject();
        System.out.println(user1.getUserName());
        System.out.println(user1.getUserId());
        user1.setUserId("321");
        System.out.println(user1.getUserId());
        out.close();
        input.close();
    }
}

下面再举个:

实体类:

package com.wolf.phone.entity;

import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import javax.validation.constraints.Min;
import java.util.Date;

@Table(name = "tb_user")
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
public class User {
    public User(){}
    @Id
//    @GeneratedValue
    private String userId;
    private String userPhone;
    private String userState;
    private String accountId;
    @Column(name = "open_time",updatable = false)
    @CreatedDate
    private Date openTime;
    @Column(name = "cancel_time")
    @LastModifiedDate
    private Date cancelTime;
    private String userEparchy;
    private String userCity;
    private String staffId;
    private String sex;
    @Min(value = 14,message = "年龄必须16岁以上")//表单提交时校验处理
    private Integer age;
    transient String passWord;
}

dao,service层的就不粘贴出来了。我是通过data-jpa访问数据库的。

controller:

    @PostMapping("/one")
    public User one(User user)throws Exception{
        return userService.findByUserId(user.getUserId());
    }

数据库数据:


下面我通过postman测试一下:


哈哈!很完美!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值