MyBatis 注解多对多

示例:测试多对多关联

根据数据模型,分别创建t_user、t_order、t_item表。

然后,输入以下测试数据。

程序清单:com.po.User.java

package com.po;
public class User {
	private Integer userId;
	private String userName;
	private String userSex;
	private String userAddress;
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserSex() {
		return userSex;
	}
	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}
	public String getUserAddress() {
		return userAddress;
	}
	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + ", userSex=" + userSex + ", userAddress="
				+ userAddress + "]";
	}
}

程序清单:com.po.Item.java

package com.po;
public class Item {
	private Integer itemId;
	private String itemName;
	private double itemPrice;
	public Integer getItemId() {
		return itemId;
	}
	public void setItemId(Integer itemId) {
		this.itemId = itemId;
	}
	public String getItemName() {
		return itemName;
	}
	public void setItemName(String itemName) {
		this.itemName = itemName;
	}
	public double getItemPrice() {
		return itemPrice;
	}
	public void setItemPrice(double itemPrice) {
		this.itemPrice = itemPrice;
	}
	@Override
	public String toString() {
		return "Item [itemId=" + itemId + ", itemName=" + itemName + ", itemPrice=" + itemPrice + "]";
	}
}

程序清单:com.po.Order.java

package com.po;
import java.util.List;
public class Order {
	private Integer orderId;
	private User user;
	private List<Item> items;
	public Integer getOrderId() {
		return orderId;
	}
	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public List<Item> getItems() {
		return items;
	}
	public void setItems(List<Item> items) {
		this.items = items;
	}
}

程序清单:com.mapper.UserMapper.java

package com.mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.po.User;
public interface UserMapper {
	@Select("select * from t_user where user_id=#{userId}")
	@Results({@Result(id=true,column="user_id",property="userId"),
		@Result(column="user_name",property="userName"),
		@Result(column="user_sex",property="userSex"),
		@Result(column="user_address",property="userAddress")})
	User getUserById(Integer userId);
}

程序清单:com.mapper.ItemMapper.java

package com.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.po.Item;
public interface ItemMapper {
	@Select("select * from t_item where item_id in(select item_id from t_order where order_id=#{orderId})")
	@Results({@Result(id=true,column="item_id",property="itemId"),
			@Result(column="item_name",property="itemName"),
			@Result(column="item_price",property="itemPrice")})
	List<Item> getItems(Integer orderId);
}

程序清单:com.mapper.OrderMapper.java

package com.mapper;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
import com.po.Order;
public interface OrderMapper {
	@Select("select * from t_order where order_id=#{orderId}")
	@Results({@Result(id=true,column="order_id",property="orderId"),
			@Result(column="user_id",property="user",
			one=@One(select="com.mapper.UserMapper.getUserById",fetchType=FetchType.EAGER)),
			@Result(column="item_id",property="items",
			many=@Many(select="com.mapper.ItemMapper.getItems",fetchType=FetchType.LAZY))})
	Order getOrderById(Integer orderId);
}

程序清单:com.dao.TestDao.java

package com.dao;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.mapper.OrderMapper;
import com.po.Item;
import com.po.Order;
public class TestDao {
	private SqlSession	session=null;
	//获取SqlSession对象
	public SqlSession getSqlSession() throws IOException {
		InputStream	is = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);
		return sessionFactory.openSession();
	}
	@Test
	public void getOrderById() throws IOException {
		session=getSqlSession();
		OrderMapper om=session.getMapper(OrderMapper.class);
		Order order=om.getOrderById(1);
		System.out.println(order.getUser());
		List<Item> items=order.getItems();
		for (Item item : items) {
			System.out.println(item);
		}
	}
}

运行TestDao的getOrderById()方法,控制台显示如下:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云淡风轻58

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值