SSM入门:彻底弄懂实体层entity/POJO

本文详细介绍了SSM框架中的实体层entity/POJO的设计,包括BaseEntity类的属性、构造方法、getter和setter方法,以及预插入(preInsert)和预更新(preUpdate)等抽象方法。此外,还探讨了Map类的相关操作,如size(), isEmpty(), containsKey()等,并分析了DataEntity和BaseEntity之间的层级关系和职责分工。通过对实体层的深入理解,有助于提升SSM开发中的数据操作效率。" 117240339,10547775,8英寸Windows平板对比体验,"['Windows平板', '8寸ndows平板', '平板电脑', '移动办公', '硬件评测']
摘要由CSDN通过智能技术生成

一.基础实体类部分:BaseEntity<T>

@SupTreeList
又定义一个抽象类BaseEntity,该抽象类实现接口Serializable
public abstract class BaseEntity<T> implements Serializable{
    private static final long serialVersionUID = 1L;
   

//先记住id属性,这是最重要的
    protected String id;
  

 //这个五个属性先忽略
    protected User currentUser;
    protected Page<T> page;
    protected Map<String,String> sqlMap;
    protected Map<String,List<Object>> inSqlMap;
    protected boolean isNewRecord = flase;
   

//再知道这里的三个常量属性:DEL_FLAG_NORMAL,DEL_FLAG_DELETE,DEL_FLAG_AUDIT
    public static final String DEL_FLAG_NORMAL = "0";
    public static final String DEL_FLAG_DELETE = "1";
    public static final String DEL_FLAG_AUDIT = "2";

  

 //定义无参构造方法:BaseEntity()
      在何时调用?在哪里调用?调用后做了什么?
    public BaseEntity(){}

   

//定义有参构造方法:BaseEntity(String id)
      在何时调用?在哪里调用?调用后做什么?
    public BaseEntity(String id){
      this();//调用无参构造方法!为什么在这里调用呢?
      this.id = id;
    }

  

 //id属性的getter方法getId():多了1个注解,问题:注解做了什么?
    @SupCol(isUnique="true",isHide="true")
    public String getId(){
        return this.id;
    }
   

//id属性的setter方法setId():正常
    public void setId(String id){
        this.id = id;
    }
   
  

 //currentUser属性的getter方法:getCurrentUser():1.多了两个注解;2.与一般的setter不同,不是直接返回,而是初始化之后再返回!
    //两种返回的区别在哪里
    @JsonIgnore
    @XmlTransient
    public User getCurrentUser(){
        //先忽略这个代码:
        if(this.currentUser == null){
            //初始化currentUser属性:值从哪来呢?
            this.currentUser = UserUtils.getUser();
            //为什么要初始化呢?
            //之前的为什么都没有初始化呢?
            //如果没有初始化,可能调用该getter方法取到的值就是空
            //先初始化无非就是让该方法不返回空值
        }
        return this.currentUser;
    }
  

 //currentUser属性的setter方法setCurrentUser():正常
 //该方法在何时调用?在哪里调用?由谁调用?
    public void setCurrentUser(User currentUser){
        this.currentUser = currentUser;
    }  
  

    //page属性的getter方法 getPage():1.多了两个注解;2.与一般getter不同,不是直接返回,而是先初始化再返回!两种返回的区别在哪里?
    @JsonIgnore
    @XmlTransient
    //任何时候取page属性值时,都不允许取空值
    //该方法在何时调用?在哪里调用?由谁调用?
    public Page<T> getPage(){
        if(this.page == null){
            //初始化:值从哪里来呢?
            this.page = new Page();
        }
        //然后再返回
        return this.page;
    }     

   
    //page属性的setter方法setPage():有返回值!
    //为什么page属性的setter方法会有返回值呢?
    //莫非该方法调用后,还能用到返回值?
    public Page<T> setPage(Page<T> page){
        this.page = page;
        return page;
    }

    //sqlMap属性的getter方法getSqlMap():1.多了两个注解;2.先初始化,再返回!   
    @JsonIgnore
    @XmlTransient
    //不允许sqlMap取空值
    public Map<String,string> getSqlMap(){
        if(this.sqlMap == null){
            //先初始化
            this.sqlMap = Maps.newHashMap();
        }
        return this.sqlMap;
    }
   
    //setInSqlMap属性的setter方法:setSqlMap()正常
    public void setSqlMap(Map<String,String> sqlMap){
        this.sqlMap = sqlMap;   
    }
   

    //定义getInSqlMap()方法 getInSqlMap():1.该方法多了两个注解;其他都正常!
    @JsonIgnore
    @XmlTransient
    //该方法允许获取空值?还是一般情况下,inSqlMap不为空值?
    public Map<String,List<Object>> getInSqlMap(){
        return this.inSqlMap;
    }

    //定义setInSqlMap()方法setInSqlMap():十分不正常
    public void setInSqlMap(Map<String,List<Object>> inSqlMap){
        if(inSqlMap == null){
            return;//结束本方法的执行,前提:inSqlMap为null
        }
        //只有inSqlMap不为空值才进行设置操作
        //忽略
        StringBuffer sqlIn = new StringBuffer();
        //忽略
        StringBuffer sqlInKeySet = inSqlMap.keySet();
       
        for(String key : sqlInKeySet){

            List<Obeject> values = (List)inSqlMap.get(key);
           
            if(values.size() >= 1){
                for(int i = 0; i < values.size(); i++){
                    if(i == values.size() - 1){

                       sqlIn.append("'" + values.get(i) + "'");

                    }else{

                       sqlIn.append("'" + values.get(i) + "',");

                    }
                }
                sqlIn.insert(0,"AND" + key + "IN(");

                sqlIn.append(")");
            }
            getSqlMap().put("IN",sqlIn.toString());
        }
        this.inSqlMap = inSqlMap;
    }

    //先把方法都挨个定义出来,再逐一完善
   
    //再定义一个setInSqlMap方法(与上面参数不同) 
  
    //定义preInsert()方法:先忽略这个方法
    public abstract void preInsert();

    //定义preUpdate()方法:先忽略这个方法
    public abstract void preUpdate();


    //定义getIsNewRecord()方法
    @JsonIgnore
    public boolean getIsNewRecord(){
   
    }


    //定义setIsNewRecord()方法
    public void setIsNewRecord(){

    }


    //定义Global属性的getter方法:先忽略这个方法
    @JsonIgnore
    public Global getGlobal(){

    } 

    //定义Dbname属性的getter方法:先忽略这个方法
    public String getDbname(){

    }

    //定义equals方法:先忽略这个方法
    public boolean equals(){


    }
  
   
    //定义toString方法:先忽略这个方法
    public String toString(){
        return ReflectionToStringBuilder.toString(this);
    }

}

总结:首先这个类定义的属性有:id;currentUser;page;sqlMap;inSqlMap;isNewRecord;DEL_FLAG_NORMAL;DEL_FLAG_DELETE;DEL_FLAG_AUDIT
//这个BaseEntity中定义的在结构上与其他实体类共同的方法有:实体类的构造方法,属性的getter和setter方法
//在属性的getter方法中,如何才能让gett方法不取空值?在方法中先初始化该属性!注意:在这里初始化有前提条件:该属性为空值null
//也就是说,逻辑是这样:如果该属性为null,那么就先初始化该属性!
//除此之外还定义的方法有:
     1.getGlobal()
     2.getDbname()
     3.equals()
     4.toString()
     5.preInsert()
     6.preUpdate()
//这里5和6两种方法是抽象方法

现在重点研究一下Map类
Map类是一个接口类:
其中,K和V表示两种数据类型!
接口类中只能定义方法:定义属性也没用的,又不能被实例化
Map类定义的方法有:
size();isEmpty();containsKey(Object key);containsValue(Object value);这些都叫查询操作!
get(Object key);put(K key, V value);remove(Object key);这些都叫更改操作
putAll(Map<? extends K, ? extends V> m);clear();这些叫批量操作
keySet();values();entrySet();
equals(Object o);hashCode();比较和hash操作!!


public interface Map<K,V> {
    // Query Operations(查询操作)
    //int size()方法的说明
    /**
     * Returns the number of key-value mappings in this map.  If the
       (返回当前映射map实例中,键值映射对的数量;如果当前映射实例map中包含的元素的数量)
     * map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
       (超过了Integer.MAX_VALUE,那么调用该方法将只会返回Integer.MAX_VALUE)
     * <tt>Integer.MAX_VALUE</tt>.
     *
     * @return the number of key-value mappings in this map
     */(对返回值的说明:返回当前映射实例map中键值对映射的数量)
    int size();

    /**isEmpty()方法的说明
     * Returns <tt>true</tt> if this map contains no key-value mappings.
     * (如果该映射实例map中包含的键值对映射的数目为0,那么将会返回true)
     * @return <tt>true</tt> if this map contains no key-value mappings
     */(对返回值的说明:如果该映射实例map中包含的键值对映射的数目为0,那么将会返回true)
    boolean isEmpty();

    /**containsKey(Object key)方法的说明
     * Returns <tt>true</tt> if this map contains a mapping for the specified
       (如果当前映射实例map中一个有这个指定的key的映射对的话,就返回true)
     * key.  More formally, returns <tt>true</tt> if and only if
       (更正式的表达是:当且仅当这个映射实例map含有一个对该key的映射时,)
     * this map contains a mapping for a key <tt>k</tt> such that
       (比如:如果key为null,那就检测map实例中的k有没有为null的)
     * <tt>(key==null ? k==null : key.equals(k))</tt>.  (There can be
       (如果有,就返回true,如果key不为null,就将key和k做相等比较)
     * at most one such mapping.)
     *
     * @param key key whose presence in this map is to be tested
     * @return <tt>true</tt> if this map contains a mapping for the specified
     *         key
     * @throws ClassCastException if the key is of an inappropriate type for
     *         this map
     * (<a href="Collection.html#optional-restrictions">optional</a>)
     * @throws NullPointerException if the specified key is null and this map
     *         does not permit null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值