其实一对多关联跟我们之前的一对一关联在实现上没有区别,这里只是简单举例子说明一下。
我们以客户对订单为例。
首先创建数据库
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的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
这个入门级别的教程将引导你了解 Ibatis 的基本概念和使用方法,包括增删改查操作、多条件查询以及单对象和数据集合查询。 1. **安装与配置** 在开始使用 Ibatis 之前,你需要在项目中引入 Ibatis 的依赖。如果是 ...
本文将深入探讨`iBatis` 中的一对多映射关系,以及如何通过源码理解和使用这个特性。 一对多映射是数据库关系模型中的常见概念,指的是一个父表(如部门表)可以对应多个子表(如员工表),每个部门可以有多个员工...
iBATIS入门学习
本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...
**iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...
这包括自动类型转换、一对一、一对多等复杂映射。 8. **动态 SQL**:iBATIS 提供了强大的动态 SQL 功能,允许在 XML 映射文件中编写条件判断、循环等逻辑,提高了 SQL 的灵活性。 9. **事务管理**:iBATIS 支持...
数据库自己建一张简单的表就行了,特别说明 只适合新手入门 只有三个java文件和三个xml配置文件 非常简单 但是包含了crud操作 非常适合新手入门,因为项目经理让我熟悉一下ibatis 我就自学写了一个,希望对你有帮助
首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...
**Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...
总结起来,iBatis作为一个优秀的持久层框架,它的入门并不复杂,主要涉及到配置、SQL映射和Java接口的编写。而迭代的用法则使得处理查询结果变得更加灵活,无论是与Java对象的映射,还是Map的迭代,都能满足不同场景...
在Java代码中,通过MyBatis的SqlSession对象加载或保存相关的对象,Ibatis会自动处理一对多的关联填充和删除规则。 接着,批处理操作是提高性能的关键。在Ibatis中,可以通过设置SqlSession的flushCache和useCache...
1. **Ibatis简介**:Ibatis,全称为MyBatis,是一个基于Java的持久层框架,它封装了JDBC,减轻了开发者对数据库操作的负担。它不是完整的ORM框架,而是提供了一种半自动化的方式来处理SQL和结果映射。 2. **主要...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的繁琐操作。本教程将帮助初学者理解并掌握Ibatis的基本概念、安装与配置...
【ibatis入门--对数据库的操作】这篇文章主要讲解了如何使用iBatis框架来操作数据库,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。以下是文章涉及的关键知识点: ...
总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...