`

ibatis入门尝试5 一对多(OneToMany)关联

阅读更多
其实一对多关联跟我们之前的一对一关联在实现上没有区别,这里只是简单举例子说明一下。
我们以客户对订单为例。
首先创建数据库
CREATE TABLE `customer` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) default NULL,
  `address` varchar(200) default NULL,
  PRIMARY KEY  (`id`)
)
CREATE TABLE `orders` (
  `id` int(11) NOT NULL auto_increment,
  `code` varchar(50) default NULL,
  `customerid` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `sda` (`customerid`),
  CONSTRAINT `sda` FOREIGN KEY (`customerid`) REFERENCES `customer` (`id`) ON DELETE CASCADE
)

订单通过一个外建与客户表关联
实体Bean
//客户类
public class Customer {
	private int id;
	private String name;
	private String address;
	private List<Orders> orders;
	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 String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public List<Orders> getOrders() {
		return orders;
	}
	public void setOrders(List<Orders> orders) {
		this.orders = orders;
	}
	
}
//订单类
public class Orders {
	private int id;
	private String code;
	private int customerid;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public int getCustomerid() {
		return customerid;
	}
	public void setCustomerid(int customerid) {
		this.customerid = customerid;
	}
}


下面是对应的配置文件
客户实体的配置文件
<?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="customer">
<typeAlias alias="customerVO" type="com.bean.onetomany.Customer"/>
<parameterMap class="customerVO" id="customerVOmp">
	<parameter property="id" jdbcType="int"/>
	<parameter property="name" jdbcType="varchar"/>
	<parameter property="address" jdbcType="varchar"/>
</parameterMap>
<insert id="createCustomer" parameterMap="customerVOmp">
	<selectKey keyProperty="id" type="post" resultClass="int">
		select @@IDENTITY as value
	</selectKey>
	insert into customer(id,name,address) values(?,?,?)
</insert>
<resultMap class="customerVO" id="getCustomer">
	<result column="id" property="id" jdbcType="int"/>
	<result column="name" property="name" jdbcType="varchar"/>
	<result column="address" property="address" jdbcType="varchar"/>
	<result property="orders" column="id" select="orders.getOrdersByCid"/>
</resultMap>
<select id="getCustomerByName" parameterClass="java.lang.String" resultMap="getCustomer">
	select * from customer where name=#value#
</select>
</sqlMap>


订单实体的配置文件
<?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="orders">
<typeAlias alias="ordersVO" type="com.bean.onetomany.Orders"/>
<parameterMap class="ordersVO" id="ordersVOmp">
	<parameter property="id" jdbcType="int"/>
	<parameter property="code" jdbcType="varchar"/>
	<parameter property="customerid" jdbcType="int"/>
</parameterMap>
<insert id="createOrders" parameterMap="ordersVOmp">
	<selectKey>
	select @@IDENTITY as value
	</selectKey>
	insert into orders(id,code,customerid) values(?,?,?)
</insert>
<select id="getOrdersByCid" parameterClass="int" resultClass="ordersVO">
	select * from orders where customerid = #value#
</select>
</sqlMap>



测试方法新增操作 与onetoone的新增没有本质区别
预习了一下之前的批次处理的方式
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

Customer c1 = new Customer();
c1.setName("customer1");
c1.setAddress("c1_address1");

sqlMap.startTransaction();
sqlMap.insert("customer.createCustomer", c1);
sqlMap.startBatch();
for(int i = 0;i<10;i++){
	Orders o = new Orders();
	o.setCustomerid(c1.getId());
	o.setCode("code_c1 "+i);
	sqlMap.insert("orders.createOrders", o);
}
sqlMap.executeBatch();
sqlMap.commitTransaction();


查询方法 实现了customer 到orders 的一对多查询
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
		
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
	
Customer customer = (Customer)sqlMap.queryForObject("customer.getCustomerByName", "customer1");
System.out.println(customer.getAddress());
List<Orders> orders = customer.getOrders();
for(int i = 0 ; i<orders.size();i++){
	Orders o = orders.get(i);
	System.out.println(o.getCode());
}
分享到:
评论

相关推荐

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis配置多表关联(一对一、一对多、多对多

    Ibatis 入门经典 实例

    通过以上内容,你将对 Ibatis 有一个全面的认识,并能动手实践。实际项目中,还可以结合日志、缓存等机制,进一步优化 Ibatis 的使用。记住,学习 Ibatis 不仅是为了掌握框架本身,更是为了理解如何优雅地处理数据...

    ibatis实战之一对多关联(源代码)

    本篇将聚焦于iBatis的一对多关联映射实战,帮助开发者更好地理解和运用这一特性。 在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中...

    ibatis 一对多 多对多完整映射

    本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...

    Ibatis入门例子,Ibatis教程

    在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    ibatis入门

    这个入门级别的教程将引导你了解 Ibatis 的基本概念和使用方法,包括增删改查操作、多条件查询以及单对象和数据集合查询。 1. **安装与配置** 在开始使用 Ibatis 之前,你需要在项目中引入 Ibatis 的依赖。如果是 ...

    ibatis 一对多

    本文将深入探讨`iBatis` 中的一对多映射关系,以及如何通过源码理解和使用这个特性。 一对多映射是数据库关系模型中的常见概念,指的是一个父表(如部门表)可以对应多个子表(如员工表),每个部门可以有多个员工...

    iBATIS入门学习

    iBATIS入门学习

    最简单的iBatis入门例子

    本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...

    iBatis入门(三)

    **iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...

    ibatis 入门

    这包括自动类型转换、一对一、一对多等复杂映射。 8. **动态 SQL**:iBATIS 提供了强大的动态 SQL 功能,允许在 XML 映射文件中编写条件判断、循环等逻辑,提高了 SQL 的灵活性。 9. **事务管理**:iBATIS 支持...

    ibatis 自己学的一个ibatis项目(只是打通了Oracle) 非常适合入门

    数据库自己建一张简单的表就行了,特别说明 只适合新手入门 只有三个java文件和三个xml配置文件 非常简单 但是包含了crud操作 非常适合新手入门,因为项目经理让我熟悉一下ibatis 我就自学写了一个,希望对你有帮助

    ibatis 一对多关系映射

    首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...

    ibatis入门到精通详细讲解

    **Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...

    ibatis入门与ibatis迭代的用法

    总结起来,iBatis作为一个优秀的持久层框架,它的入门并不复杂,主要涉及到配置、SQL映射和Java接口的编写。而迭代的用法则使得处理查询结果变得更加灵活,无论是与Java对象的映射,还是Map的迭代,都能满足不同场景...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    在Java代码中,通过MyBatis的SqlSession对象加载或保存相关的对象,Ibatis会自动处理一对多的关联填充和删除规则。 接着,批处理操作是提高性能的关键。在Ibatis中,可以通过设置SqlSession的flushCache和useCache...

    ibatis ibatis入门教程

    1. **Ibatis简介**:Ibatis,全称为MyBatis,是一个基于Java的持久层框架,它封装了JDBC,减轻了开发者对数据库操作的负担。它不是完整的ORM框架,而是提供了一种半自动化的方式来处理SQL和结果映射。 2. **主要...

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的繁琐操作。本教程将帮助初学者理解并掌握Ibatis的基本概念、安装与配置...

    ibatis入门--对数据库的操作

    【ibatis入门--对数据库的操作】这篇文章主要讲解了如何使用iBatis框架来操作数据库,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。以下是文章涉及的关键知识点: ...

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

    总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...

Global site tag (gtag.js) - Google Analytics