目录

 

1.Model实体层

         1.1 管理员实体类(Manager)

1.2 转换字符集类MySQL5DialectUTF8

         1.3 试卷实体类(Paper)

1.4 试题实体类(Question)

1.5 学生实体类(Student)

1.6 考试实体类(Exam)

2. 添加数据以及查看各表之间的关系


1.Model实体层

1.1 管理员实体类(Manager)

建立实体包com.java.model

建立管理员实体类Manager

package com.java.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.GenericGenerator;

/*采用注解映射表t_manager,不用xml映射形式*/
@Entity//映射实体
@Table(name="t_manager")
public class Manager {

	//编号
	private int id;
	//用户名
	private String userName;
	//密码
	private String passWord;
	//管理员姓名
	private String name;
	//标识,flag为1就是代表管理员,且不映射到数据库中
	private String flag="1";
	
	//设置主键
	@Id
	@GeneratedValue(generator="_native")
	//生策略是native,设置表字段自增,非空
	@GenericGenerator(name="_native",strategy="native")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//设置flag不映射到数据库中用Transient
	@Transient
	public String getFlag() {
		return flag;
	}
	public void setFlag(String flag) {
		this.flag = flag;
	}
	
	
}

这里同时要在配置文件hibernate.cfg.xml中添加一下映射路径: 

 

1.2 转换字符集类MySQL5DialectUTF8

我们要在com.java.util工具类里面新增一个方法:

package com.java.util;

import org.hibernate.dialect.MySQL5InnoDBDialect;

public class MySQL5DialectUTF8 extends MySQL5InnoDBDialect{

	//这里重写getTableTypeString方法,使其hibernate自动建库的时候默认字符为utf8
	@Override
	public String getTableTypeString() {
		// TODO Auto-generated method stub
		return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
	}
	
}

我们这里还要将原先的hibernate.cfg.xml配置文件里面的方言修改一下:

改成我们自己写的子类;

这时我们可以运行一下HibernateUtil工具类,看看是否在数据库中成功建表t_manager;

这时已经显示运行成功,我们再去看看数据库;

可以看到已经成功建表而且默认字符集也是utf8;

 

1.3 试卷实体类(Paper)

package com.java.model;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_paper")
public class Paper {

	//编号
	private int id;
	//试卷名称
	private String paperName;
	//日期
	private Date JoinDate;
	//试题question字段
	private Set<Question> questions=new HashSet<Question>();
	
	
	@Id
	@GeneratedValue(generator="_native")
	//生成策略是native,设置表字段自增,非空
	@GenericGenerator(name="_native",strategy="native")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPaperName() {
		return paperName;
	}
	public void setPaperName(String paperName) {
		this.paperName = paperName;
	}
	public Date getJoinDate() {
		return JoinDate;
	}
	public void setJoinDate(Date joinDate) {
		JoinDate = joinDate;
	}
	//一张试卷对应多个试题,用EAGER的方式获得paper的时候立即加载所有的question
	@OneToMany(mappedBy="paper",fetch=FetchType.EAGER)
	public Set<Question> getQuestions() {
		return questions;
	}
	public void setQuestions(Set<Question> questions) {
		this.questions = questions;
	}
	
}

这里同时要在配置文件hibernate.cfg.xml中添加一下映射路径: 

 

1.4 试题实体类(Question)

package com.java.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_question")
public class Question {

	private int id;
	//试题内容
	private String subject;
	//试题类型
	private String type;
	//时间
	private Date joinTime;
	//题目的4个选项
	private String optionA;
	private String optionB;
	private String optionC;
	private String optionD;
	//题目的正确答案
	private String answer;
	//用户选择的答案
	private String userAnswer;
	//试卷paper字段
	private Paper paper;
	
	@Id
	@GeneratedValue(generator="_native")
	//生成策略是native,设置表字段自增,非空
	@GenericGenerator(name="_native",strategy="native")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Date getJoinTime() {
		return joinTime;
	}
	public void setJoinTime(Date joinTime) {
		this.joinTime = joinTime;
	}
	public String getOptionA() {
		return optionA;
	}
	public void setOptionA(String optionA) {
		this.optionA = optionA;
	}
	public String getOptionB() {
		return optionB;
	}
	public void setOptionB(String optionB) {
		this.optionB = optionB;
	}
	public String getOptionC() {
		return optionC;
	}
	public void setOptionC(String optionC) {
		this.optionC = optionC;
	}
	public String getOptionD() {
		return optionD;
	}
	public void setOptionD(String optionD) {
		this.optionD = optionD;
	}
	
	//设置flag不映射到数据库中用Transient
	@Transient
	public String getUserAnswer() {
		return userAnswer;
	}
	public void setUserAnswer(String userAnswer) {
		this.userAnswer = userAnswer;
	}
	//多个题目对应一张试卷
	@ManyToOne
	@Cascade(value={CascadeType.SAVE_UPDATE})
	@JoinColumn(name="paperId")
	public Paper getPaper() {
		return paper;
	}
	public void setPaper(Paper paper) {
		this.paper = paper;
	}
	public String getAnswer() {
		return answer;
	}
	public void setAnswer(String answer) {
		this.answer = answer;
	}
	
}

这里同时要在配置文件hibernate.cfg.xml中添加一下映射路径: 

 

1.5 学生实体类(Student)

package com.java.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="t_student")
public class Student {

	//学号
	private String id;
	//姓名
	private String name;
	//密码
	private String password;
	//性别
	private String sex;
	//专业
	private String profession;
	//身份证号码
	private String cardNum;
	//标识,flag为2标识学生,且不映射到数据库中
	private String flag="2";
	
	@Id
    /*
     * 数据库表中主键列名为id,如果实体类属性名和列名相同,此注解可以省略
     * 主键id唯一,非空且长度为40,前面默认的都是255
     */
	@Column(name="id",unique=true,nullable=false,length=40)
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Column(name="name",length=20)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name="password",length=20)
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Column(name="sex",length=5)
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	@Column(name="profession",length=40)
	public String getProfession() {
		return profession;
	}
	public void setProfession(String profession) {
		this.profession = profession;
	}
	@Column(name="cardNum",length=50)
	public String getCardNum() {
		return cardNum;
	}
	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}
	@Transient
	public String getFlag() {
		return flag;
	}
	public void setFlag(String flag) {
		this.flag = flag;
	}
	
}

这里同时要在配置文件hibernate.cfg.xml中添加一下映射路径: 

 

1.6 考试实体类(Exam)

package com.java.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_exam")
public class Exam {

	//考试编号
	private int id;
	//学生信息
	private Student student;
	//试卷信息
	private Paper paper;
	//单选题得分
	private int singleScore;
	//多选题得分
	private int moreScore;
	//总分
	private int score;
	//考试日期
	private Date examDate;
	
	@Id
	@GeneratedValue(generator="_native")
	//生策略是native,设置表字段自增,非空
	@GenericGenerator(name="_native",strategy="native")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	//多对一策略
	@ManyToOne
	//外键studentId
	@JoinColumn(name="studentId")
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	//多对一策略
	@ManyToOne
	//外键paperId
	@JoinColumn(name="paperId")
	public Paper getPaper() {
		return paper;
	}
	public void setPaper(Paper paper) {
		this.paper = paper;
	}
	public int getSingleScore() {
		return singleScore;
	}
	public void setSingleScore(int singleScore) {
		this.singleScore = singleScore;
	}
	public int getMoreScore() {
		return moreScore;
	}
	public void setMoreScore(int moreScore) {
		this.moreScore = moreScore;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public Date getExamDate() {
		return examDate;
	}
	public void setExamDate(Date examDate) {
		this.examDate = examDate;
	}
	
}

这里同时要在配置文件hibernate.cfg.xml中添加一下映射路径: 

 

2. 添加数据以及查看各表之间的关系

在数据库中,我们建立的几张表应该有如下的主外键关联;

另外,我们向各表之中插入一些数据; 

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐