ibatis入门尝试4 一对一(OneToOne)关联
我们之前已经通过ibatis完成了对于数据库的crud操作,现在我们来使用ibatis完成一对一映射的操作,由于ibatis是半自动的orm,所以他的映射操作主要体现在查询上面。
首先我们在数据库中建立表 person(id,name) idcard(id,cardcode) 这里id为主键 表idcard的id字段的外键是person表id。person表id我们采用自增类型。
接下来我们创建类
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Idcard {
private int id;
private String cardcode;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardcode() {
return cardcode;
}
public void setCardcode(String cardcode) {
this.cardcode = cardcode;
}
}
Person.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="person">
<typeAlias alias="personVO" type="com.bean.onetoone.Person"/>
<parameterMap class="personVO" id="personVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="name" jdbcType="varchar"/>
</parameterMap>
<insert id="createPerson" parameterMap="personVOmp">
<!-- 之前插入对象的使用由于id是自增的我们不对id进行处理,由于这里我们要创建一对一的关系 所以需要对id进行处理
type的参数有两个 pre 与 post ,pre表示的当前id ,post表示提交id 通俗的意思就是 id是执行插入之前取得 还是插入之后取得
select是在insert之前处理 还是之后处理 由于这里是mysql自增实际插入的时候不需要处理 所以设定为插入之后处理
这里是mysql的固定用法
-->
<selectKey keyProperty="id" type="post" resultClass="int">
select @@IDENTITY as value
</selectKey>
insert into person(id,name) values(?,?)
</insert>
</sqlMap>
Idcard.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="idcard">
<typeAlias alias="idcardVO" type="com.bean.onetoone.Idcard"/>
<parameterMap class="idcardVO" id="idcardVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="cardcode" jdbcType="varchar"/>
</parameterMap>
<insert id="createIdcard" parameterMap="idcardVOmp">
insert into idcard(id,cardcode) values(?,?)
</insert>
</sqlMap>
不要忘记在配置文件中加入这两个xml的引用
这个例子指出了对象间插入的处理方式,及关联id的使用和selectkey标签的用处
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Person person = new Person();
person.setName("zhangsan");
sqlMap.startTransaction();
sqlMap.insert("person.createPerson", person);
//因为在person.xml标签中设置了 selectkey 所以在执行完之后取得了person 的id
//这样在下面的idcard中可以使用产生的关联id了
System.out.println(person.getId());
Idcard idcard = new Idcard();
idcard.setId(person.getId());
idcard.setCardcode("22043156");
sqlMap.insert("idcard.createIdcard", idcard);
sqlMap.commitTransaction();
下面我们来对查询进行操作,为了完成面向对象的查询结果
我们这里采用person对象关联idcard对象
修改Person.java 让他包含idcard对象
package com.bean.onetoone;
public class Person {
private int id;
private String name;
private Idcard idcard;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Idcard getIdcard() {
return idcard;
}
public void setIdcard(Idcard idcard) {
this.idcard = idcard;
}
}
在idcard.xml中增加select标签
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="idcard">
<typeAlias alias="idcardVO" type="com.bean.onetoone.Idcard"/>
<parameterMap class="idcardVO" id="idcardVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="cardcode" jdbcType="varchar"/>
</parameterMap>
<insert id="createIdcard" parameterMap="idcardVOmp">
insert into idcard(id,cardcode) values(?,?)
</insert>
<resultMap class="idcardVO" id="getIdcardVO">
<result property="id" column="id"/>
<result property="cardcode" column="cardcode"/>
</resultMap>
<select id="selectIdcardById" resultMap="getIdcardVO" parameterClass="int">
select * from idcard where id=#value#
</select>
</sqlMap>
接下来我们增加person.xml中查询标签,注意在属性配置中的 <result property="idcard" column="id" select="idcard.selectIdcardById"/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="person">
<typeAlias alias="personVO" type="com.bean.onetoone.Person"/>
<parameterMap class="personVO" id="personVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="name" jdbcType="varchar"/>
</parameterMap>
<insert id="createPerson" parameterMap="personVOmp">
<!-- 之前插入对象的使用由于id是自增的我们不对id进行处理,由于这里我们要创建一对一的关系 所以需要对id进行处理
type的参数有两个 pre 与 post ,pre表示的当前id ,post表示提交id 通俗的意思就是 id是执行插入之前取得 还是插入之后取得
select是在insert之前处理 还是之后处理 由于这里是mysql自增实际插入的时候不需要处理 所以设定为插入之后处理
这里是mysql的固定用法
-->
<selectKey keyProperty="id" type="post" resultClass="int">
select @@IDENTITY as value
</selectKey>
insert into person(id,name) values(?,?)
</insert>
<resultMap class="personVO" id="getPersonVO">
<result property="id" column="id"/>
<result property="name" column="name"/>
//这个就是关联方法 属性idcard 通过idcard.selectIdcardById 取得 传递参数是id
<result property="idcard" column="id" select="idcard.selectIdcardById"/>
</resultMap>
<select id="selectPersonById" resultMap="getPersonVO" parameterClass="int">
select * from person where id=#value#
</select>
</sqlMap>
下面是测试方法
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Person p = (Person)sqlMap.queryForObject("person.selectPersonById", 2);
System.out.println(p.getName());
System.out.println(p.getIdcard().getCardcode());
分享到:
相关推荐
通过以上内容,你将对 Ibatis 有一个全面的认识,并能动手实践。实际项目中,还可以结合日志、缓存等机制,进一步优化 Ibatis 的使用。记住,学习 Ibatis 不仅是为了掌握框架本身,更是为了理解如何优雅地处理数据...
ibatis配置多表关联(一对一、一对多、多对多
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
**Ibatis 入门教程** Ibatis 是一个优秀的 Java ORM(对象关系映射)框架,它允许程序员将数据库操作与...在实际项目中,随着对 Ibatis 的深入理解和应用,你会发现它是一个强大且灵活的工具,能有效提高开发效率。
iBATIS入门学习
本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...
**iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...
标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...
数据库自己建一张简单的表就行了,特别说明 只适合新手入门 只有三个java文件和三个xml配置文件 非常简单 但是包含了crud操作 非常适合新手入门,因为项目经理让我熟悉一下ibatis 我就自学写了一个,希望对你有帮助
一对一映射是iBATIS中处理关联关系的一种方式,它允许你在查询一个实体对象时,同时获取与其关联的另一个实体对象。这种映射通常涉及到主表和从表,主表中的一条记录对应从表中的唯一一条记录。 **配置一对一映射:...
**Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...
总结起来,iBatis作为一个优秀的持久层框架,它的入门并不复杂,主要涉及到配置、SQL映射和Java接口的编写。而迭代的用法则使得处理查询结果变得更加灵活,无论是与Java对象的映射,还是Map的迭代,都能满足不同场景...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的繁琐操作。本教程将帮助初学者理解并掌握Ibatis的基本概念、安装与配置...
1. **Ibatis简介**:Ibatis,全称为MyBatis,是一个基于Java的持久层框架,它封装了JDBC,减轻了开发者对数据库操作的负担。它不是完整的ORM框架,而是提供了一种半自动化的方式来处理SQL和结果映射。 2. **主要...
【ibatis入门--对数据库的操作】这篇文章主要讲解了如何使用iBatis框架来操作数据库,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。以下是文章涉及的关键知识点: ...
本篇将聚焦于iBatis的一对多关联映射实战,帮助开发者更好地理解和运用这一特性。 在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中...
iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。本教程将引导你通过一个简单的"Hello, World!"项目了解iBatis(MyBatis)的基本用法。解压提供的"ibatistest"压缩包...
**iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...
**Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...
利用ibatis实现一对一、多对一的示例代码。每种关系用两种方式实现,具体的讲解可看我的博客http://blog.csdn.net/duwenchao1986/article/details/8565386