zoukankan      html  css  js  c++  java
  • 关于model层建VO的注意事项

    一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。   
    二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.
    有一种观点就是:PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。
    那么下面我们就来看看在运用VO的时候要注意的几点,我这个例子和三个表相关
    1 activityVO
    public class ActivityVO {
    
        private int id; // int 标示id
        private String theme; // Varchar 活动主题
        private String userId; // Varchar 发起者id
        private int workgroupId; // int 所属工作坊id
        private int participantNumber; // int 参与人数
        private String type;// Varchar 活动类型
        private int state;// int 活动状态
        private String startTime;// StringTime 活动开始时间
        private String endTime; // StringTime 活动结束时间
        private String content;// text 活动内容
        private String specialId;// Varchar 学科
        private String activityForm;// Varvhar 活动形式
        private String tags;// Varchar 活动关键字
        private String realName;    //活动发起人昵称
        private String specialName; //学科(专业)名称
        
        public ActivityVO(){
            super();
        }
        
        public ActivityVO(int id, String theme, String userId, int workgroupId,
                int participantNumber, String type, int state, String startTime,
                String endTime, String content, String specialId,
                String activityForm, String tags, String realName,
                String specialName) {
            super();
            this.id = id;
            this.theme = theme;
            this.userId = userId;
            this.workgroupId = workgroupId;
            this.participantNumber = participantNumber;
            this.type = type;
            this.state = state;
            this.startTime = startTime;
            this.endTime = endTime;
            this.content = content;
            this.specialId = specialId;
            this.activityForm = activityForm;
            this.tags = tags;
            this.realName = realName;
            this.specialName = specialName;
        }
    }

    2 Activity

    public class Activity implements Serializable {
        private static final long serialVersionUID = 1L;
        private int id; // int 标示id
        private String theme; // Varchar 活动主题
        private String userId; // Varchar 发起者id
        private int workgroupId; // int 所属工作坊id
        private int participantNumber; // int 参与人数
        private String type;// Varchar 活动类型
        private int state;// int 活动状态 0:未开始 1:进行中 2:已结束3:已关闭
        private String startTime;// DateTime 活动开始时间
        private String endTime; // DateTime 活动结束时间
        private String content;// text 活动内容
        private String specialId;// Varchar 学科
        private String activityForm;// Varvhar 活动形式
        private String tags;// Varchar 活动关键字
    }

    3 UserInfo

    public class UserInfo {
        private String id;     //主键
        private String realName;    //姓名
        private String loginName;    //用户名(唯一)
        private String password;    //密码
        private String email;    //电子邮件
        private String qq;    //QQ号码
        private String mobilePhone;     //移动电话
        private int workUnitId;    //工作单位(存id)
        private int trainingProjectId;    //培训项目id
        private int trainingBatchId;    //培训批次id
        private String educationLevelId;    //培养类别id(UUID)—原层次
        private String specialId;    //学科Id(UUID)—原专业
    }

     4 Special

    
    
    public class Special implements Serializable{
        
        private static final long serialVersionUID = 1L;
        
        private String id;                    //标识ID
        
        private String specialNum;            //专业代码
        
        private String specialName;           //专业名称
        
        private String specialNum_jw;         //就读专业代码(上报教委)
        
        private String specialName_jw;        //就读专业名称(上报教委)
        
        private String educationLevel;        //学历层次
    }
    
    

    接着是运用VO的sql语句

    public List<ActivityVO> getActivitysByWorkgroupIdByPage(int workgroupId, int pageNo,
                int pageSize) {
            String sql = "select new cn.edu.ccnu.model.ActivityVO(activity.id, activity.theme, activity.userId, "
                    + " activity.workgroupId, activity.participantNumber, activity.type, activity.state, activity.startTime,"
                    + " activity.endTime, activity.content, activity.specialId, activity.activityForm, activity.tags,"
                    + " userinfo.realName ,special.specialName) "
                    + "from Activity activity,UserInfo userinfo ,Special special "
                    + "where activity.workgroupId=:workgroupId "
                    + "and userinfo.id=activity.userId "
                    + "and activity.specialId=special.id "
                    + "order by activity.startTime DESC";
    
            List<ActivityVO> list = new ArrayList<ActivityVO>();
            try {
                Query query = getEntityManager().createQuery(sql);
                query.setParameter("workgroupId", workgroupId);
                query.setFirstResult((pageNo - 1) * pageSize);
                query.setMaxResults(pageSize);
                list = (List<ActivityVO>) query.getResultList();
            } catch (RuntimeException e) {
                e.printStackTrace();
                throw e;
            } finally {
                getEntityManager().close();
            }
            return list;
    
        }

    好了,代码全部在上面了,下面说一下注意点:

    1,在使用VO对象作为查询的结果时,sql语句一定要把类的包名也写在里面{new cn.edu.ccnu.model.ActivityVO},

    2  紧接着要按照该VO的构造方法一个个把元素按顺序写上去,要注意类一定要一致,不然就会报错

    3  在数据库表的设计的时候,int一定要赋予默认值,不然还是会报错(最好所有的都设默认值)

     
  • 相关阅读:
    十分钟构建双十一交互分析大盘
    数字IT基础-数据采集总线
    阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量
    如何在网络视听行业建一扇内容安全大门?
    Frost & Sullivan权威报告:阿里云再次领跑云WAF大中华区市场
    赋能时空云计算,阿里云数据库时空引擎Ganos上线
    点播转码相关常见问题及排查方式
    《边缘云计算技术及标准化白皮书》
    内存性能的正确解读
    《倡议书——节约用电,从我做起》
  • 原文地址:https://www.cnblogs.com/keitho00/p/4318413.html
Copyright © 2011-2022 走看看