对于一对多或一对一的映射关系,在实体类里引用的是对象类型,而数据库里使用的是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(一款优秀的Java持久层框架)时,如何处理数据库中的对象关系映射(ORM)问题。在Java应用程序中,iBATIS 提供了一种方便的方式来将数据库操作与业务逻辑解耦,使得...
在IT行业中,数据库关系映射是数据访问层的重要部分,特别是在使用ORM(对象关系映射)框架时。Ibatis,作为一个轻量级的Java ORM框架,提供了强大的功能来处理复杂的数据映射,其中包括一对多的关系映射。在这个...
iBATIS的核心概念是SqlMapConfig.xml配置文件和一系列的SqlMap.xml映射文件,这两个文件是理解iBATIS工作原理的关键。 SqlMapConfig.xml是整个iBATIS框架的全局配置文件,它包含了数据源、事务管理器等核心组件的...
对象关系映射(ORM) 对象关系映射(ORM)是一种概念性的、易于理解的模型化数据的方法,基于三个核心原则:简单、传达性、精确性。ORM 方法论提供了概念性的模型化数据的方法,基于数据模型创建正确标准化了的结构...
在IT行业中,数据库关系映射是开发Web应用时不可或缺的一部分,特别是对于ORM(对象关系映射)框架如iBATIS(现在称为MyBatis)。本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析...
一对一映射是iBATIS中处理关联关系的一种方式,它允许你在查询一个实体对象时,同时获取与其关联的另一个实体对象。这种映射通常涉及到主表和从表,主表中的一条记录对应从表中的唯一一条记录。 **配置一对一映射:...
`resultMap`用于描述对象与数据库列之间的映射关系。例如,`resultStudentInfo`包含了学生信息的属性如`studentId`、`studentName`和`classId`,并指定它们对应的数据库列名。 在`resultClassInfo`中,我们看到了`...
2. **IBatis.NET**:IBatis.NET是一种轻量级的ORM(对象关系映射)框架,它不强求完全的自动化映射,而是将SQL查询的编写权交给开发者。这种方式使得开发者能够更灵活地控制数据库操作,同时避免了全自动ORM可能带来...
在IT行业中,数据库映射和对象关系映射(ORM)框架是开发人员处理数据库操作的重要工具。其中,iBATIS(现在称为MyBatis)是一个流行的选择,它允许程序员将SQL查询直接集成到Java代码中,提高了灵活性和性能。本篇...
标题 "ibatis半自动化ORM映射" 涉及的核心技术是iBatis,这是一个流行的Java数据访问框架,用于实现对象关系映射(ORM)。ORM的主要目标是将数据库操作与业务逻辑解耦,使得开发人员可以更专注于业务代码,而无需...
Ibatis通过将Java对象映射到SQL语句,实现了对象关系映射(ORM)。它允许开发者在XML配置文件或注解中编写SQL,然后通过SqlSession接口执行这些SQL,从而实现数据的增删改查。 在删除操作中,我们通常会有一个带有...
总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...
1. 映射关系:Hibernate提供了一种对象关系映射(ORM)机制,自动处理对象与数据库之间的转换,而iBATIS需要开发者手动编写SQL语句。 2. 开发效率:在相同需求下,iBATIS的工作量可能大于Hibernate,因为需要手写SQL...
Ibatis的主要目标是解决对象关系映射(ORM)的问题,它允许开发者编写XML或注解形式的SQL映射文件,将SQL语句与Java代码分离,提高了代码的可读性和可维护性。在这个过程中,Ibatis提供了一种动态SQL机制,通过占位...
6. 对象关系映射(ORM):虽然iBATIS不完全是一个ORM框架,但它允许开发者将数据库记录映射到Java对象,简化了数据操作。 总的来说,通过获取iBATIS 2.3.4的jar包和源码,开发者可以更好地掌握这个框架,提高开发...
首先,一对多和多对一的关系映射是ORM(对象关系映射)中的关键概念。在iBATIS中,通过配置XML映射文件,可以定义实体类与数据库表之间的复杂关联。例如,一个订单可以包含多个商品项,这是一对多关系;反之,一个...
iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序...我们使用了三个数据库表来存储学生和教师之间的多对多关系,并使用iBatis来映射数据库表和Java对象。最后,我们实现了DAO来访问数据库。
Ibatis不是一个完整的ORM(对象关系映射)框架,而是介于SQL和Java之间的桥梁,允许开发者编写动态SQL,并将SQL语句与Java对象进行映射。它的核心组件包括SqlMapConfig.xml配置文件、Mapper接口和Mapper XML文件。 ...