MyBatis学习之一对多关联查询

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias alias="Customer" type="com.mybatis.bean.Customer"/>
		<typeAlias alias="Order" type="com.mybatis.bean.Order"/>
	</typeAliases>
	<!--数据库参数配置 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/test" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com/mybatis/bean/Customer.xml" />
		<mapper resource="com/mybatis/bean/Order.xml" />
	</mappers>
</configuration>

  

package com.mybatis.util;

import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
	private static SqlSessionFactory sqlSessionFactory;

	public static SqlSessionFactory getSqlSessionFactory() throws IOException {
		if (sqlSessionFactory == null) {
			String resource = "mybatis-config.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		}
		return sqlSessionFactory;
	}
}

  

package com.mybatis.bean;

import java.util.List;

public class Customer {

	private int id;

	private String name;

	private List<Order> orderList;

	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 List<Order> getOrderList() {
		return orderList;
	}

	public void setOrderList(List<Order> orderList) {
		this.orderList = orderList;
	}

}

  

package com.mybatis.bean;

public class Order {

	private int id;

	private int price;

	private String name;

	private Customer customer;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Customer getCustomer() {
		return customer;
	}

	public void setCustomer(Customer customer) {
		this.customer = customer;
	}

}

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.inter.ICustomerDAO">

	<resultMap type="Customer" id="cumtomerResMap">
		<id property="id" column="c_id" />
		<result property="name" column="c_name" />
		<collection property="orderList" ofType="Order" column="cid">
			<id property="id" column="o_id" />
			<result property="name" column="o_name" />
			<result property="price" column="o_price" />
		</collection>
	</resultMap>

	<select id="selectCustomer" resultMap="cumtomerResMap">
		select * from customer
		c,orders o where o.cid=c.c_id and c.c_id=#{id}
	</select>
</mapper>

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.inter.IOrderDAO">
	<resultMap type="Order" id="orderResMap">
		<id property="id" column="o_id" />
		<result property="name" column="o_name" />
		<result property="price" column="o_price" />
		<association property="customer" javaType="Customer">
			<id property="id" column="c_id" />
			<result property="name" column="c_name" />
		</association>
	</resultMap>

	<select id="selectOrder" resultMap="orderResMap">
		select * from customer
		c,orders o where o.cid=c.c_id and o.o_id=#{id}
	</select>
</mapper>

  

package com.mybatis.inter;

import com.mybatis.bean.Customer;

public interface ICustomerDAO {

	public Customer selectCustomer(int id);

}

  

package com.mybatis.inter;

import com.mybatis.bean.Order;

public interface IOrderDAO {

	public Order selectOrder(int id);
}

  

package com.mybatis.test;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.mybatis.bean.Customer;
import com.mybatis.bean.Order;
import com.mybatis.inter.ICustomerDAO;
import com.mybatis.inter.IOrderDAO;
import com.mybatis.util.MybatisUtil;

public class Test {
	public static void main(String[] args) {
		SqlSessionFactory factory = null;
		SqlSession session=null;
		try {
			factory=MybatisUtil.getSqlSessionFactory();
			session=factory.openSession();
			ICustomerDAO customerDAO = session.getMapper(ICustomerDAO.class);
			Customer customer = customerDAO.selectCustomer(2);
			System.err.println(customer.getName()+" 买了:");
			for(Order order :customer.getOrderList()){
				System.err.println(order.getName() +" "+order.getPrice());
			}
			System.err.println("=========================================");
			IOrderDAO orderDAO = session.getMapper(IOrderDAO.class);
			Order order = orderDAO.selectOrder(2);
			System.err.println(order.getName()+" "+order.getPrice());
			System.err.println(order.getCustomer().getName());
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(session != null)
				session.close();
		}

	}
}

  

时间: 2024-10-12 06:18:44

MyBatis学习之一对多关联查询的相关文章

Mybatis学习总结四(关联查询)

一.一对一查询 实例:查询所有订单信息,关联查询下单用户信息. Method1:使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息. 1 public class OrdersCustom extends Orders { 2 3 private String username;// 用户名称 4 private String address;// 用户地址 5 get/set.... Mapper.xml <!-- 查询所有订单信息 --> <select

MyBatis学习总结(五)——实现关联表查询(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(五)--实现关联表查询 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TAB

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

MyBatis学习总结(五)——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VA

MyBatis学习总结_05_实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

MyBatis学习笔记五——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VA

springboot+mybatis 怎么实现用户角色关联查询

最近在学习springboot+mybatis,过程中也遇到了一些问题,比较显著的就是在mybatis中怎么在查询用户的同时得到用户的角色,话不多说直接上代码. 1.pojo类 public class User implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String userid; private String name; //这里

mybatis专题(二)-----代码生成器、关联查询、缓存

Mybatis Generator (MBG) 概念 MyBatis Generator:MyBatis 的开发团队提供了一个很强大的代码生成器,代码包含了数据库表对应的实体 类 .Mapper 接口类. Mapper XML 文件和 Example 对象等,这些代码文件中几乎包含了全部的单表操作方 法,使用 MBG 可以极大程度上方便我们使用 MyBatis,还可以减少很多重复操作: 配置 generatorConfiguration – 根节点 properties – 用于指定一个需要在配