业务对象建模

业务对象建模实战步骤

创建基类

packagecn.edu.lzzy.entities;
importorg.hibernate.annotations.GenericGenerator;
importjavax.persistence.Column;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.MappedSuperclass;
importjava.util.UUID;
/**
*
基类,所有项目实体类都继承该类,主要完成主键的创建及初始化
*
/
@MappedSuperclass
publicclassBasicEntity{
@Id
@GeneratedValue(generator="uuid2")
@GenericGenerator(name="uuid2",strategy="uuid2")
@Column(columnDefinition="BINARY(16)")
protectedUUIDid;
publicBasicEntity(){
}
publicUUIDgetId(){
returnid;
}
publicvoidsetId(UUIDid){
this.id=id;
}
}

结果实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonIgnore;
importjavax.persistence.Entity;
importjavax.persistence.ManyToMany;
importjavax.persistence.ManyToOne;
importjavax.persistence.Transient;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
/**
*
答题结果
*
/
@Entity
publicclassResultextendsBasicEntity{
@Transient
publicstaticfinalintTYPE_RIGHT=0;
@Transient
publicstaticfinalintTYPE_MISS=1;
@Transient
publicstaticfinalintTYPE_EXTRA=2;
@Transient
publicstaticfinalintTYPE_WRONG=3;
@Transient
publicstaticfinalintTYPE_UNFINISHED=4;
privateDatecommitTime;//提交时间
@ManyToOne
privateUserstudent;//用户:学生
@ManyToOne
privateQuestionquestion;//题目
@ManyToMany
privateList<Option>options=newArrayList<>();
publicResult(){
commitTime=newDate();//将当前时间进行commitTime的初始化
}
publicintwhat(){
if(options.size()==0){
returnTYPE
_
UNFINISHED;
}
booleanmiss=false;
booleanextra=false;
for(Optionoption:options){
if(!option.isAnswer()){
extra=true;
break;
}
}
for(Optionoption:question.getOptions()){
if(option.isAnswer()){
if(!options.contains(option)){
miss=true;
break;
}
}
}
if(miss&&extra){
returnTYPE
_
WRONG;
}elseif(miss){
returnTYPE
_
MISS;
}elseif(extra){
returnTYPE
_
EXTRA;
}else{
returnTYPE
_
RIGHT;
}
}
@JsonIgnore
publicList<Option>getOptions(){
returnoptions;
}
publicvoidsetOptions(List<Option>options){
this.options=options;
}
publicDategetCommitTime(){
returncommitTime;
}
publicvoidsetCommitTime(DatecommitTime){
this.commitTime=commitTime;
}
@JsonBackReference
publicUsergetStudent(){
returnstudent;
}
publicvoidsetStudent(Userstudent){
this.student=student;
}
@JsonBackReference
publicQuestiongetQuestion(){
returnquestion;
}
publicvoidsetQuestion(Questionquestion){
this.question=question;
}
}

题目实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonManagedReference;
importjavax.persistence.*;
importjava.util.ArrayList;
importjava.util.List;
/**
*
题目实体类
*
/
@Entity
publicclassQuestionextendsBasicEntity{
@Transient
publicstaticfinalintTYPE_SINGLE=0;//单选
@Transient
publicstaticfinalintTYPE_JUDGE=1;//判断
@Transient
publicstaticfinalintTYPE_MULTI=2;//多选
privateinttype;//题型
privateStringcontent;//题目
privateStringanalysis;//解析
@OneToMany(cascade=CascadeType.PERSIST,mappedBy="question")
privateList<Option>options=newArrayList<>();
@OneToMany(mappedBy="question")
privateList<Result>results=newArrayList<>();
@ManyToOne
privateChapterchapter;
publicQuestion(){
}
publicintgetType(){
returntype;
}
publicvoidsetType(inttype){
this.type=type;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
publicStringgetAnalysis(){
returnanalysis;
}
publicvoidsetAnalysis(Stringanalysis){
this.analysis=analysis;
}
@JsonManagedReference
publicList<Option>getOptions(){
returnoptions;
}
publicvoidsetOptions(List<Option>options){
this.options=options;
}
@JsonManagedReference
publicList<Result>getResults(){
returnresults;
}
publicvoidsetResults(List<Result>results){
this.results=results;
}
@JsonBackReference
publicChaptergetChapter(){
returnchapter;
}
publicvoidsetChapter(Chapterchapter){
this.chapter=chapter;
}
}

选项/操作实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonIgnore;
importjavax.persistence.Entity;
importjavax.persistence.ManyToMany;
importjavax.persistence.ManyToOne;
importjavax.persistence.Table;
importjava.util.ArrayList;
importjava.util.List;
/**
*
选项实体类
*
/
@Entity
@Table(name="options")
publicclassOptionextendsBasicEntity{
privateStringlabel;
privatebooleanisAnswer;
privateStringcontent;
@ManyToOne
privateQuestionquestion;
@ManyToMany(mappedBy="options")
privateList<Result>results=newArrayList<>();
publicOption(){
}
publicStringgetLabel(){
returnlabel;
}
publicvoidsetLabel(Stringlabel){
this.label=label;
}
publicbooleanisAnswer(){
returnisAnswer;
}
publicvoidsetAnswer(booleananswer){
isAnswer=answer;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
@JsonBackReference
publicQuestiongetQuestion(){
returnquestion;
}
publicvoidsetQuestion(Questionquestion){
this.question=question;
}
@JsonIgnore
publicList<Result>getResults(){
returnresults;
}
publicvoidsetResults(List<Result>results){
this.results=results;
}
}

章节实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonManagedReference;
importjavax.persistence.*;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
@Entity
publicclassChapterextendsBasicEntity{
privateStringname;//章节名称
privateStringdescription;//说明
privatebooleanopen;//开放状态
@Temporal(TemporalType.TIMESTAMP)
privateDatecreateTime;//创建时间
@Temporal(TemporalType.TIMESTAMP)
privateDateupdateTime;//更新时间
@ManyToOne
privateCoursecourse;
@OneToMany(mappedBy="chapter")
privateList<Question>questions=newArrayList<>();
publicChapter(){
updateTime=newDate();
createTime=updateTime;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetDescription(){
returndescription;
}
publicvoidsetDescription(Stringdescription){
this.description=description;
}
publicbooleanisOpen(){
returnopen;
}
publicvoidsetOpen(booleanopen){
this.open=open;
}
publicDategetCreateTime(){
returncreateTime;
}
publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}
publicDategetUpdateTime(){
returnupdateTime;
}
publicvoidsetUpdateTime(DateupdateTime){
this.updateTime=updateTime;
}
@JsonBackReference
publicCoursegetCourse(){
returncourse;
}
publicvoidsetCourse(Coursecourse){
this.course=course;
}
@JsonManagedReference
publicList<Question>getQuestions(){
returnquestions;
}
publicvoidsetQuestions(List<Question>questions){
this.questions=questions;
}
}

课程实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonIgnore;
importcom.fasterxml.jackson.annotation.JsonManagedReference;
importjavax.persistence.Entity;
importjavax.persistence.ManyToMany;
importjavax.persistence.ManyToOne;
importjavax.persistence.OneToMany;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
@Entity
publicclassCourseextendsBasicEntity{
privateStringname;//课程名
privateStringdescription;//课程说明
privateStringcover;
privateDatecreateTime;//创建时间
privateDateupdateTime;//更新时间
privatebooleanisOpen;//开放状态
@ManyToOne
privateUserteacher;//任课教师
@ManyToMany
privateList<User>students=newArrayList<>();//学生
@OneToMany(mappedBy="course")
privateList<Chapter>chapters=newArrayList<>();//章节
@OneToMany(mappedBy="course")
privateList<Applicant>applicants=newArrayList<>();//学生申请
publicCourse(){
createTime=newDate();
updateTime=createTime;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetDescription(){
returndescription;
}
publicvoidsetDescription(Stringdescription){
this.description=description;
}
publicStringgetCover(){
returncover;
}
publicvoidsetCover(Stringcover){
this.cover=cover;
}
publicDategetCreateTime(){
returncreateTime;
}
publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}
publicDategetUpdateTime(){
returnupdateTime;
}
publicvoidsetUpdateTime(DateupdateTime){
this.updateTime=updateTime;
}
publicbooleanisOpen(){
returnisOpen;
}
publicvoidsetOpen(booleanopen){
isOpen=open;
}
@JsonBackReference
publicUsergetTeacher(){
returnteacher;
}
publicvoidsetTeacher(Userteacher){
this.teacher=teacher;
}
@JsonIgnore
publicList<User>getStudents(){
returnstudents;
}
publicvoidsetStudents(List<User>students){
this.students=students;
}
@JsonManagedReference
publicList<Chapter>getChapters(){
returnchapters;
}
publicvoidsetChapters(List<Chapter>chapters){
this.chapters=chapters;
}
@JsonManagedReference
publicList<Applicant>getApplicants(){
returnapplicants;
}
publicvoidsetApplicants(List<Applicant>applicants){
this.applicants=applicants;
}
}

审核实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importjavax.persistence.*;
importjava.util.Date;
/**
*
审核业务实体
*
/
@Entity
publicclassApplicantextendsBasicEntity{
@Transient//不入库
publicstaticfinalintSTATUS_APPLYING=0;//申请
@Transient
publicstaticfinalintSTATUS_ALLOW=1;//通过
@Transient
publicstaticfinalintSTATUS_DECLINED=2;//拒绝
privateintstatus;//审核状态
@Temporal(TemporalType.TIMESTAMP)
privateDateapplyTime;//审核时间
@ManyToOne
privateUserstudent;
@ManyToOne
privateCoursecourse;
publicApplicant(){
applyTime=newDate();
}
publicintgetStatus(){
returnstatus;
}
publicvoidsetStatus(intstatus){
this.status=status;
}
publicDategetApplyTime(){
returnapplyTime;
}
publicvoidsetApplyTime(DateapplyTime){
this.applyTime=applyTime;
}
@JsonBackReference//Jackson序列化,由于Java允许循环引用,可能会存在递归调用,引起堆栈
溢出,@JsonManagedReference
publicUsergetStudent(){
returnstudent;
}
publicvoidsetStudent(Userstudent){
this.student=student;
}
@JsonBackReference
publicCoursegetCourse(){
returncourse;
}
publicvoidsetCourse(Coursecourse){
this.course=course;
}
}

用户实体类

packagecn.edu.lzzy.entities;
importcom.fasterxml.jackson.annotation.JsonBackReference;
importcom.fasterxml.jackson.annotation.JsonIgnore;
importcom.fasterxml.jackson.annotation.JsonManagedReference;
importjavax.persistence.*;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
importjava.util.Objects;
/**
*
用户业务实体
*
/
@Entity
publicclassUserextendsBasicEntity{
@Transient
publicstaticfinalintTYPE_ADMIN=0;
@Transient
publicstaticfinalintTYPE_TEACHER=1;
@Transient
publicstaticfinalintTYPE_STUDENT=2;
@Transient
publicstaticfinalintTYPE_BANNED=-1;
privateStringnickName;//昵称
privateStringuserName;//账号
privateStringemail;//Email
privateStringphone;//联系电话
privateStringpassword;//密码
privateStringavatar;//用户头像
privateinttype;//用户类型
privateStringsalt;//加盐
@Temporal(TemporalType.TIMESTAMP)
privateDatecreateTime;//创建时间
@Temporal(TemporalType.TIMESTAMP)
privateDateupdateTime;//更新时间
privatebooleanapplyTeacher;//教师审核
@OneToMany(mappedBy="teacher")
privateList<Course>courses=newArrayList<>();
@ManyToMany(mappedBy="students")
privateList<Course>enrolledCourses=newArrayList<>();
@OneToMany(mappedBy="student")
privateList<Result>results=newArrayList<>();
@OneToMany(mappedBy="student")
privateList<Applicant>applicants=newArrayList<>();
publicUser(){
createTime=newDate();
updateTime=createTime;
}
@Override
publicbooleanequals(Objecto){
if(this==o){
returntrue;
}
if(o==null||getClass()!=o.getClass()){
returnfalse;
}
Useruser=(User)o;
returnid.equals((user.getId()));
}
@Override
publicinthashCode(){
returnObjects.hash(id);
}
publicStringgetNickName(){
returnnickName;
}
publicvoidsetNickName(StringnickName){
this.nickName=nickName;
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
this.phone=phone;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetAvatar(){
returnavatar;
}
publicvoidsetAvatar(Stringavatar){
this.avatar=avatar;
}
publicintgetType(){
returntype;
}
publicvoidsetType(inttype){
this.type=type;
}
publicStringgetSalt(){
returnsalt;
}
publicvoidsetSalt(Stringsalt){
this.salt=salt;
}
publicDategetCreateTime(){
returncreateTime;
}
publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}
publicDategetUpdateTime(){
returnupdateTime;
}
publicvoidsetUpdateTime(DateupdateTime){
this.updateTime=updateTime;
}
publicbooleanisApplyTeacher(){
returnapplyTeacher;
}
publicvoidsetApplyTeacher(booleanapplyTeacher){
this.applyTeacher=applyTeacher;
}
@JsonManagedReference
publicList<Course>getCourses(){
returncourses;
}
publicvoidsetCourses(List<Course>courses){
this.courses=courses;
}
@JsonIgnore
publicList<Course>getEnrolledCourses(){
returnenrolledCourses;
}
publicvoidsetEnrolledCourses(List<Course>enrolledCourses){
this.enrolledCourses=enrolledCourses;
}
@JsonManagedReference
publicList<Result>getResults(){
returnresults;
}
publicvoidsetResults(List<Result>results){
this.results=results;
}
@JsonBackReference
publicList<Applicant>getApplicants(){
returnapplicants;
}
publicvoidsetApplicants(List<Applicant>applicants){
this.applicants=applicants;
}
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值