`
zisefeiniao
  • 浏览: 171223 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多
一个表对应几个类

假设要求设计一个表,表中保存一个人的信息。

表中应该包含以下内容

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进行操作处理
分享到:
评论

相关推荐

    Freemarker代码生成器实体映射xml的ftl模板文件

    在Java开发中,特别是在企业级应用中,XML文件常常被用来作为配置文件,其中包含了对象与数据库表之间的映射关系,这就是所谓的实体映射。Hibernate、MyBatis等ORM框架广泛使用了这种映射方式。`FTL`是Freemarker ...

    mybatis表实体映射代码

    在本主题中,我们将深入探讨MyBatis中的表实体映射代码,以及如何利用MyBatis Generator自动生成DAO、Model和Mapper.xml文件。 首先,理解表实体映射是MyBatis的核心概念之一。实体类(Entity Class)是Java对象,...

    Mybatis 实体类+Mapper实体映射文件+接口+Config主配置文件+测试类

    本资源包含Mybatis实体类、Mapper实体映射文件、接口、Config主配置文件以及测试类,是理解Mybatis工作原理和实际应用的重要资料。 1. **实体类(Entity)**:在Mybatis中,实体类通常代表数据库中的表,用于封装...

    Hibernate实体映射

    本资源“Hibernate实体映射”提供了一个深入理解这一关键概念的机会,通过实例代码和教程笔记,帮助学习者更好地掌握Hibernate的核心功能。 一、Hibernate实体映射基础 在Hibernate中,实体映射是将Java对象模型与...

    帅华的C#实体映射工具V1.0

    《帅华的C#实体映射工具V1.0:高效ORM实践与解析》 在IT行业中,数据库操作是至关重要的部分,而实体映射工具则为开发者提供了方便快捷的数据访问方式。本文将深入探讨“帅华的C#实体映射工具V1.0”,一个专为SQL ...

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    生成实体映射文件

    mysql 生成实体类,映射文件可以省去很多力气去做实体

    freebase的实体 映射 对应 wikidata实体 数据集

    《免费资源:Freebase实体与Wikidata实体映射数据集详解》 在信息化时代,知识图谱成为理解和处理大量信息的重要工具。Freebase和Wikidata是两个著名的开放知识图谱项目,它们各自积累了丰富的实体信息。然而,由于...

    hibernate学习入门一对多实体映射源码

    在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...

    hibernate实体映射文件字段设置默认值

    ### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

    自动生成MyBatis的实体类、实体映射XML文件

    "自动生成MyBatis的实体类、实体映射XML文件"这一技术是基于模板引擎的自动化工具实现的。这些工具能够根据数据库表结构自动生成对应的Java实体类,这些类通常包含了数据库表中的字段作为成员变量,并提供了getter和...

    ItcastOA_文档2_实体映射_分页方案_文件下载_解决异常.doc

    ### ItcastOA_文档2_实体映射_分页方案_文件下载_解决异常 #### 一、实体映射 实体映射是IT项目开发中非常重要的环节之一,特别是对于那些涉及复杂数据交互的应用程序来说更是如此。在本节中,我们将详细探讨...

    jpa的实体映射关系7种

    在Java Persistence API (JPA) 中,实体映射关系是数据库关系模型与Java对象模型之间的桥梁,用于在ORM(对象关系映射)框架下管理数据。JPA 提供了多种映射关系,使得开发者能够方便地处理不同类型的关联。下面我们...

    根据数据库表生成实体、hibernate配置文件和实体映射文件

    本教程将深入讲解如何根据数据库表自动生成实体类、Hibernate配置文件以及实体映射文件。 首先,我们需要了解Hibernate的基本概念。Hibernate提供了一个在Java应用中使用的持久化模型,它允许开发者用面向对象的...

    AutoMapper和表达式条件的实体映射(DDD的使用)

    在领域驱动设计(Domain-Driven Design,简称DDD)中,实体映射是连接业务逻辑与数据存储的关键环节。本文将深入探讨如何利用AutoMapper库结合表达式条件来实现高效的实体映射,尤其关注如何处理查询条件的映射。 ...

    JPA实体映射对时间字段的处理

    ### JPA实体映射对时间字段的处理 在Java持久化框架中,JPA(Java Persistence API)是一种广泛采用的标准,用于管理关系型数据库中的对象/关系映射。本文将详细探讨在使用JPA进行实体映射时如何处理时间字段,并...

    myeclipse 自动生成DAO层,实体类,mybatis 实体映射文件

    MyEclipse作为一款强大的Java集成开发环境,提供了丰富的功能,其中包括自动生成DAO层、实体类以及MyBatis的实体映射文件。这样的自动化工具可以帮助开发者节省大量手动编写代码的时间,减少错误,并保持代码的一致...

    mybitis生成实体映射类

    在本话题中,我们将深入探讨如何使用MyBatis生成实体映射类,以及这个过程涉及的相关知识点。 首先,实体类(Entity Class)是面向对象编程中的一个重要概念,它用于表示数据库中的表,包含了该表的所有字段及其...

    2019-12-12_NoIOCFramework(003控制台OnModelCreating通过程序集查找加载所有实体映射实例).rar

    本主题将深入探讨“2019-12-12_NoIOCFramework(003控制台OnModelCreating通过程序集查找加载所有实体映射实例)”这个压缩包中的知识点,包括框架的构建、模式的运用以及依赖注入的概念。 首先,我们要理解框架的...

Global site tag (gtag.js) - Google Analytics