通常我们使用iBatis的select查询都是映射的简单对象,即便在一个查询中连接多个表也是如此,那么既然iBatis是SQL Mapper,也就是说它可以映射复杂集合,我们来看看如何让对象模型向数据模型(关系型数据模型)靠拢。
假设在在线购物应用中,我们有用户表User,订单表Order和订单项表OrderItem,它们之间存在的关联是显而易见的。用户可以下订单,而订单中可以包含多个项。
我们的数据库设计如下:
订单表为:
订单项表为:
三个表之前通过userId和orderId进行关联,这里仅做示例性说明,并没有添加物理外键关联。
下面我们设计POJO来描述这三个对象:
假设在在线购物应用中,我们有用户表User,订单表Order和订单项表OrderItem,它们之间存在的关联是显而易见的。用户可以下订单,而订单中可以包含多个项。
我们的数据库设计如下:
- CREATE TABLE `user` (
- `userId` int(11) NOT NULL AUTO_INCREMENT ,
- `userName` varchar(50) NULL DEFAULT NULL ,
- `password` varchar(32) NULL DEFAULT NULL ,
- `mobile` varchar(11) NULL DEFAULT NULL ,
- `email` varchar(50) NULL DEFAULT NULL ,
- `age` int(3) NULL DEFAULT NULL ,
- PRIMARY KEY (`userId`)
- )
订单表为:
- CREATE TABLE `order` (
- `orderId` int(11) NOT NULL AUTO_INCREMENT ,
- `orderName` varchar(50) NULL DEFAULT NULL ,
- `generateTime` datetime NULL DEFAULT NULL ,
- `userId` int(11) NULL DEFAULT NULL ,
- PRIMARY KEY (`orderId`)
- )
订单项表为:
- CREATE TABLE `orderItem` (
- `orderItemId` int(11) NOT NULL AUTO_INCREMENT ,
- `itemName` varchar(50) NULL DEFAULT NULL ,
- `quantity` int(3) NULL DEFAULT NULL ,
- `price` float NULL DEFAULT NULL ,
- `orderId` int(11) NOT NULL ,
- PRIMARY KEY (`orderItemId`)
- )
三个表之前通过userId和orderId进行关联,这里仅做示例性说明,并没有添加物理外键关联。
下面我们设计POJO来描述这三个对象:
- package ibatis.model;
- public class OrderItem implements java.io.Serializable {
- private Integer orderItemId;
- private String itemName;
- private int quantity;
- private float price;
- private Integer orderId;
- public OrderItem() {
- }
- public OrderItem(Integer orderItemId, String itemName, int quantity,
- float price, Integer orderId) {
- super();
- this.orderItemId = orderItemId;
- this.itemName = itemName;
- this.quantity = quantity;