`
hua04104
  • 浏览: 248823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ibatis的对象关系映射问题

阅读更多
对于一对多或一对一的映射关系,在实体类里引用的是对象类型,而数据库里使用的是ID,这样就牵涉到OR映射问题。如:

实体类:

public class PetitionLetter {
	private int id;                              //信访件ID
	private String identifier;                   //信访件编号
	private Reporter reporter;                   //举报人
	private LetterInformation letterInformation; //举报信
	private Supervision supervision;             //督办
	private ProcessFlow processFlow;             //处理流程
        //get set 方法省略
}


数据库表:
create table T_PETITIONLETTER
(
  ID                NUMBER(10) not null, 
  IDENTIFIER        VARCHAR2(255),
  REPORTER          NUMBER(10),
  LETTERINFORMATION NUMBER(10),
  SUPERVISION       NUMBER(10),
  PROCESSFLOW       NUMBER(10)
)


查询出所有的PetitionLetter:
 <select id="selectAllPetitionLetter" resultMap="PetitionLetterResult" remapResults="true">
    select * from t_petitionletter
  </select>

  <resultMap id="PetitionLetterResult" class="PetitionLetter">
    <result property="id" column="id"/>
    <result property="identifier" column="identifier"/>
    <result property="reporter" column="reporter" select="selectReporterById"/>
    <result property="letterInformation" column="letterInformation" select="selectLetterInformationById"/>
    <result property="supervision" column="supervision" select="selectSupervisionById"/>
    <result property="processFlow" column="processFlow" select="selectProcessFlowById"/>
  </resultMap>

  <select id="selectProcessFlowById" resultClass="ProcessFlow" parameterClass="int" remapResults="true">
  	select * from t_processflow where id = #id#
  </select>
  
  <select id="selectReporterById" resultClass="Reporter" parameterClass="int">
  	select * from t_reporter where id = #id#
  </select>
  
  <select id="selectLetterInformationById" resultClass="LetterInformation" parameterClass="int">
  	select * from t_letterinformation where id = #id#
  </select>
  
  <select id="selectSupervisionById" resultClass="Supervision" parameterClass="int">
  	select * from t_supervision where id = #id#
  </select>

注:resultMap里把column中经查询得到的数据库id字段传给select里的方法,得到一个实体类对象的数据,返回给property里的实体类,这样不仅查询出PetitionLetter,也查询出了PetitionLetter里引用的实体类对象的相关数据。

插入PetitionLetter记录:
<parameterMap class="PetitionLetter" id="PetitionLetterParam">
    <parameter property="id" jdbcType="NUMBER"/>
  	<parameter property="identifier" jdbcType="VARCHAR2"/>
  	<parameter property="reporter.id" jdbcType="NUMBER"/>
  	<parameter property="letterInformation.id" jdbcType="NUMBER"/>
  	<parameter property="supervision.id" jdbcType="NUMBER"/>
  	<parameter property="processFlow.id" jdbcType="NUMBER"/>
  </parameterMap>

<insert id="insertPetitionLetter" parameterMap="PetitionLetterParam">
  	  <selectKey resultClass="int" keyProperty="id" type="pre">      
           <![CDATA[SELECT SEQ_ID_PETITION.NEXTVAL AS ID FROM DUAL]]>      
      </selectKey> 
    <![CDATA[  
  	insert into t_petitionletter(id, identifier, reporter, letterInformation, 
  	                             supervision, processFlow) values
  	                             (?,?,?,?,?,?)
   ]]>  
  </insert>

注:在后台里插入方法传入的是一个对象,而对象里的引用属性也是对象,而不是int型的ID,所以parameterMap里的property要使用“对象.id”的方式与jdbcType里number类型匹配。
分享到:
评论

相关推荐

    ibatis 的关系映射

    标题 "ibatis 的关系映射" 指的是在使用 iBATIS(一款优秀的Java持久层框架)时,如何处理数据库中的对象关系映射(ORM)问题。在Java应用程序中,iBATIS 提供了一种方便的方式来将数据库操作与业务逻辑解耦,使得...

    ibatis 一对多关系映射

    在IT行业中,数据库关系映射是数据访问层的重要部分,特别是在使用ORM(对象关系映射)框架时。Ibatis,作为一个轻量级的Java ORM框架,提供了强大的功能来处理复杂的数据映射,其中包括一对多的关系映射。在这个...

    iBATIS-SqlMaps,ibatis映射文件

    iBATIS的核心概念是SqlMapConfig.xml配置文件和一系列的SqlMap.xml映射文件,这两个文件是理解iBATIS工作原理的关键。 SqlMapConfig.xml是整个iBATIS框架的全局配置文件,它包含了数据源、事务管理器等核心组件的...

    ORM对象关系映射

    对象关系映射(ORM) 对象关系映射(ORM)是一种概念性的、易于理解的模型化数据的方法,基于三个核心原则:简单、传达性、精确性。ORM 方法论提供了概念性的模型化数据的方法,基于数据模型创建正确标准化了的结构...

    ibatis 一对多 多对多完整映射

    在IT行业中,数据库关系映射是开发Web应用时不可或缺的一部分,特别是对于ORM(对象关系映射)框架如iBATIS(现在称为MyBatis)。本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析...

    Ibatis一对一映射提示

    一对一映射是iBATIS中处理关联关系的一种方式,它允许你在查询一个实体对象时,同时获取与其关联的另一个实体对象。这种映射通常涉及到主表和从表,主表中的一条记录对应从表中的唯一一条记录。 **配置一对一映射:...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    `resultMap`用于描述对象与数据库列之间的映射关系。例如,`resultStudentInfo`包含了学生信息的属性如`studentId`、`studentName`和`classId`,并指定它们对应的数据库列名。 在`resultClassInfo`中,我们看到了`...

    Mygeneration_1309_20081006—IBatis_SQL映射+实体模板

    2. **IBatis.NET**:IBatis.NET是一种轻量级的ORM(对象关系映射)框架,它不强求完全的自动化映射,而是将SQL查询的编写权交给开发者。这种方式使得开发者能够更灵活地控制数据库操作,同时避免了全自动ORM可能带来...

    IBatis: Discriminator Column Example – Inheritance Mapping(Ibatis中的继承映射)

    在IT行业中,数据库映射和对象关系映射(ORM)框架是开发人员处理数据库操作的重要工具。其中,iBATIS(现在称为MyBatis)是一个流行的选择,它允许程序员将SQL查询直接集成到Java代码中,提高了灵活性和性能。本篇...

    ibatis半自动化orm映射

    标题 "ibatis半自动化ORM映射" 涉及的核心技术是iBatis,这是一个流行的Java数据访问框架,用于实现对象关系映射(ORM)。ORM的主要目标是将数据库操作与业务逻辑解耦,使得开发人员可以更专注于业务代码,而无需...

    ibatis教程_删除指定id的单个对象.rar

    Ibatis通过将Java对象映射到SQL语句,实现了对象关系映射(ORM)。它允许开发者在XML配置文件或注解中编写SQL,然后通过SqlSession接口执行这些SQL,从而实现数据的增删改查。 在删除操作中,我们通常会有一个带有...

    Ibatis

    总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...

    ibatis教程,ibatis帮助文档

    1. 映射关系:Hibernate提供了一种对象关系映射(ORM)机制,自动处理对象与数据库之间的转换,而iBATIS需要开发者手动编写SQL语句。 2. 开发效率:在相同需求下,iBATIS的工作量可能大于Hibernate,因为需要手写SQL...

    ibatis开发过程取值问题

    Ibatis的主要目标是解决对象关系映射(ORM)的问题,它允许开发者编写XML或注解形式的SQL映射文件,将SQL语句与Java代码分离,提高了代码的可读性和可维护性。在这个过程中,Ibatis提供了一种动态SQL机制,通过占位...

    iBATIS2.3.4 jar包及源码

    6. 对象关系映射(ORM):虽然iBATIS不完全是一个ORM框架,但它允许开发者将数据库记录映射到Java对象,简化了数据操作。 总的来说,通过获取iBATIS 2.3.4的jar包和源码,开发者可以更好地掌握这个框架,提高开发...

    ibatis2.0中文API

    首先,一对多和多对一的关系映射是ORM(对象关系映射)中的关键概念。在iBATIS中,通过配置XML映射文件,可以定义实体类与数据库表之间的复杂关联。例如,一个订单可以包含多个商品项,这是一对多关系;反之,一个...

    ibatis多对多关系(详细)

    iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序...我们使用了三个数据库表来存储学生和教师之间的多对多关系,并使用iBatis来映射数据库表和Java对象。最后,我们实现了DAO来访问数据库。

    ibatis教程_查询指定id的单个对象

    Ibatis不是一个完整的ORM(对象关系映射)框架,而是介于SQL和Java之间的桥梁,允许开发者编写动态SQL,并将SQL语句与Java对象进行映射。它的核心组件包括SqlMapConfig.xml配置文件、Mapper接口和Mapper XML文件。 ...

Global site tag (gtag.js) - Google Analytics