• 关于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一定要赋予默认值,不然还是会报错(最好所有的都设默认值)

     
  • 相关阅读:
    C语言探索之旅 | 第二部分第二课:进击的指针,C语言的王牌!
    C语言探索之旅 | 第二部分第一课:模块化编程
    C语言探索之旅 | 第一部分练习题
    C语言探索之旅 | 第一部分第十一课:函数
    数据结构和算法 | 第一部分第五课:算法复杂度实践
    数据结构和算法 | 第一部分第四课:算法复杂度(下)
    数据结构和算法 | 第一部分第三课:算法复杂度(上)
    数据结构和算法 | 第一部分第二课:小鸭子们去旅行
    数据结构和算法 | 第一部分第一课:什么是数据结构和算法
    C语言探索之旅 | 第一部分第十课:第一个C语言小游戏
  • 原文地址:https://www.cnblogs.com/keitho00/p/4318413.html
Copyright © 2020-2023  润新知