4.3 关系数据库和类的影射
hibernate做出第一个革新在于:把关系数据库的表,映射成一个类。每一个表,都有一个类与之对应,表的字段就是类的属性,所有属性都按照javaBean的标准:
1.所有属性都是private
2.所有属性都有getter(取值)和setter(设值)方法
hibernate的第二个革新,是把最小处理单位规定为一条记录,而不是一个字段。在hibernate的世界里,要么就查一整条记录的所有字段(也就是所谓一行),要么就不查询。类似于Select username from user这样的查询,在hibernate里面是不支持的。hibernate查询的最小单位,就是某个影射类的一个对象(这个类必须是影射了某个关系表)。
为了配合这样的查询,hibernate有自己的查询语言HQL,初学者可以看做是没有select *的查询语句,直接从from 开始。例如:from User where username=‘abcdedf'
通过上一小节的hibernate工具,我们已经生成了影射类。所有的表都有一个类与之对应。
下面是user表的一个例子:
这是隐射的java文件:
这是数据库表和java类的映射配置文件,xml格式
注意,如果已经通过4.2 Hibernate工具生成java文件和影射文件,则不需要再复制
点击下载上面的文件User.hbm.xml(另存为)
1.java类的属性和表的字段一一对应
2.xml文件是配置文件,指定了哪个表映射成哪个类是,哪个字段对应哪个属性。例如,class name="model.User" table="user" lazy="false" catalog="javaidc_jssp" optimistic-lock="version",这一行name代表类的全名路径,table表示表名,catalog表示数据库名。
id这个配置是指定主键该怎么映射的,column表示字段,generator表示这个主键是怎么指定值的,assigned表示主键值是赋值的,identity则表示这个主键是自动递增的
property表示属性和哪个字段对应

public class User implements java.io.Serializable{
private String username;
private String password;
private String role;
private String nickname;
private String createDate;
public User(){
}
public User(String username){
super();
this.username=username;
}
public User(String username,String password,String role,String nickname,String createDate){
this.username=username;
this.password=password;
this.role=role;
this.nickname=nickname;
this.createDate=createDate;
}
public User(String username,String password,String role,String nickname,String createDate,Set userClasses,Set clazzs,Set chapterStudies,Set chapterQuizCorrects,Set chapterQuizStudies,Set quizScores,Set userLogins){
this.username=username;
this.password=password;
this.role=role;
this.nickname=nickname;
this.createDate=createDate;
}
public String getUsername(){
return this.username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
public String getRole(){
return this.role;
}
public void setRole(String role){
this.role=role;
}
public String getNickname(){
return this.nickname;
}
public void setNickname(String nickname){
this.nickname=nickname;
}
public String getCreateDate(){
return this.createDate;
}
public void setCreateDate(String createDate){
this.createDate=createDate;
}
}