一个表对应几个类
假设要求设计一个表,表中保存一个人的信息。
表中应该包含以下内容
userid:身份证号
name:姓名
sex:性别
birthday:生日
address:住址
tel:电话
mobile:手机号
人:
编号 + 基本信息(不可变信息)+ 可变信息
根据类的设计原则:
三个类:
基本信息类
可变信息类
user类:编号,基本信息类,可变信息类
实体映射策略可以将多个类映射到一个表中,而且这多个类包含属性关系。
1、建立表
DROP TABLE user ;
CREATE TABLE user (
userid varchar(18) primary key ,
name varchar(20) not null,
sex varchar(2) not null,
birthday datetime not null,
address text ,
tel varchar(20) ,
mobile varchar(20)
);
2、生成表映射
在生成的pojouser类和映射文件的基础上进行修改:
(1)增加两个类:base和change
package org.liky.pojo;
import java.util.Date;
public class Base {
private String name;
private String sex;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package org.liky.pojo;
public class Change {
private String address;
private String tel;
private String mobile;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
(2)修改pojo的user类
package org.liky.pojo;
public class User implements java.io.Serializable {
// Fields
private String userid;
private Base base;
private Change change;
// Constructors
public Base getBase() {
return base;
}
public void setBase(Base base) {
this.base = base;
}
public Change getChange() {
return change;
}
public void setChange(Change change) {
this.change = change;
}
public User() {
}
}
(3)修改映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.User" table="user" catalog="testdb">
<id name="userid" type="java.lang.String">
<column name="userid" length="18" />
<generator class="assigned" />
</id>
<!-- 在User类中,包含一个base属性,该属性为Base类型,这个属性中的子属性会与user表中的字段有关联 -->
<component name="base" class="org.liky.pojo.Base">
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="2" not-null="true" />
</property>
<property name="birthday" type="java.util.Date">
<column name="birthday" length="19" not-null="true" />
</property>
</component>
<!-- 同样,还包含一个change属性 -->
<component name="change" class="org.liky.pojo.Change">
<property name="address" type="java.lang.String">
<column name="address" length="65535" />
</property>
<property name="tel" type="java.lang.String">
<column name="tel" length="20" />
</property>
<property name="mobile" type="java.lang.String">
<column name="mobile" length="20" />
</property>
</component>
</class>
</hibernate-mapping>
3、编写后台代码
基本不变,只是需要注意:
对于参数的处理,如果该参数不在User对象中,需要通过其他属性继续.出来
public List<User> findAll(int cp, int ls) throws Exception {
// TODO Auto-generated method stub
String hql = "FROM User AS u WHERE u.base.name LIKE ?" ;
Query q= this.instance.getConnection().createQuery(hql);
q.setString(0, "%L%");
// 分页
q.setFirstResult((cp - 1) * ls);
q.setMaxResults(ls);
List all = q.list();
return all;
}
4、测试使用
UserDAO userdao = DAOFactory.getTestDAOInstance();
// 插入数据
// User user = new User();
// user.setUserid("123456789123456789");
// user.setBase(new Base());
//
// user.getBase().setName("MLDN");
// user.getBase().setSex("男");
// user.getBase().setBirthday(new Date());
//
// user.setChange(new Change());
// user.getChange().setAddress("MLDN.cn");
// user.getChange().setTel("51283346");
// user.getChange().setMobile("62350411");
//
// try {
// userdao.doCreate(user);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
User user = userdao.findById("123456789123456789");
System.out.println(user.getBase().getName() + " --> " +user.getChange().getMobile());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
可以发现数据会直接通过User中的base和change进行操作处理
假设要求设计一个表,表中保存一个人的信息。
表中应该包含以下内容
userid:身份证号
name:姓名
sex:性别
birthday:生日
address:住址
tel:电话
mobile:手机号
人:
编号 + 基本信息(不可变信息)+ 可变信息
根据类的设计原则:
三个类:
基本信息类
可变信息类
user类:编号,基本信息类,可变信息类
实体映射策略可以将多个类映射到一个表中,而且这多个类包含属性关系。
1、建立表
DROP TABLE user ;
CREATE TABLE user (
userid varchar(18) primary key ,
name varchar(20) not null,
sex varchar(2) not null,
birthday datetime not null,
address text ,
tel varchar(20) ,
mobile varchar(20)
);
2、生成表映射
在生成的pojouser类和映射文件的基础上进行修改:
(1)增加两个类:base和change
package org.liky.pojo;
import java.util.Date;
public class Base {
private String name;
private String sex;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package org.liky.pojo;
public class Change {
private String address;
private String tel;
private String mobile;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
(2)修改pojo的user类
package org.liky.pojo;
public class User implements java.io.Serializable {
// Fields
private String userid;
private Base base;
private Change change;
// Constructors
public Base getBase() {
return base;
}
public void setBase(Base base) {
this.base = base;
}
public Change getChange() {
return change;
}
public void setChange(Change change) {
this.change = change;
}
public User() {
}
}
(3)修改映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.liky.pojo.User" table="user" catalog="testdb">
<id name="userid" type="java.lang.String">
<column name="userid" length="18" />
<generator class="assigned" />
</id>
<!-- 在User类中,包含一个base属性,该属性为Base类型,这个属性中的子属性会与user表中的字段有关联 -->
<component name="base" class="org.liky.pojo.Base">
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="2" not-null="true" />
</property>
<property name="birthday" type="java.util.Date">
<column name="birthday" length="19" not-null="true" />
</property>
</component>
<!-- 同样,还包含一个change属性 -->
<component name="change" class="org.liky.pojo.Change">
<property name="address" type="java.lang.String">
<column name="address" length="65535" />
</property>
<property name="tel" type="java.lang.String">
<column name="tel" length="20" />
</property>
<property name="mobile" type="java.lang.String">
<column name="mobile" length="20" />
</property>
</component>
</class>
</hibernate-mapping>
3、编写后台代码
基本不变,只是需要注意:
对于参数的处理,如果该参数不在User对象中,需要通过其他属性继续.出来
public List<User> findAll(int cp, int ls) throws Exception {
// TODO Auto-generated method stub
String hql = "FROM User AS u WHERE u.base.name LIKE ?" ;
Query q= this.instance.getConnection().createQuery(hql);
q.setString(0, "%L%");
// 分页
q.setFirstResult((cp - 1) * ls);
q.setMaxResults(ls);
List all = q.list();
return all;
}
4、测试使用
UserDAO userdao = DAOFactory.getTestDAOInstance();
// 插入数据
// User user = new User();
// user.setUserid("123456789123456789");
// user.setBase(new Base());
//
// user.getBase().setName("MLDN");
// user.getBase().setSex("男");
// user.getBase().setBirthday(new Date());
//
// user.setChange(new Change());
// user.getChange().setAddress("MLDN.cn");
// user.getChange().setTel("51283346");
// user.getChange().setMobile("62350411");
//
// try {
// userdao.doCreate(user);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
User user = userdao.findById("123456789123456789");
System.out.println(user.getBase().getName() + " --> " +user.getChange().getMobile());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
可以发现数据会直接通过User中的base和change进行操作处理