MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

完整学习路线:https://blog.csdn.net/qq_40163148/article/details/89668242

本次我们为了方便更换为maven项目(使用mybatis mapper代理方法实现)

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

基本项目结构是相通的就是maven会为我们自动导入需要使用的包配置文件如下(前提要下载maven配置maven的环境变量),我们的测试类放在src/test目录下

配置文件如下(pom.xml)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lipengge</groupId>
  <artifactId>mbt</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mbt</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  </dependencies>
</project>

更多信息百度maven点击第一条进入搜索需要jar包配置信息。。。。

一对一查询

在我们上次说到的订单商品数据模型的分析里说过我们的查询是基于需求的,那么我们的一条订单对应一个用户即一对一查询我们在这里介绍两种方法:

1.关联查询(单表查询的结果通过输出映射产生连接查询的结果集)

这种查询方法可以减少配置量但是比较容易出错

1.mapper.xml

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

<?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.lipengge.mbt.mapper.OrderMapper">
 <!--主表order一对一查询一条订单的所属用户-->
 <resultMap type="order" id="findOrderByUserIdMap">
 <id  column="id" property="id"/>
 <result column="order_number" property="orderNumber"/>
 <result column="user_id" property="userId"/>
 <!--association 用于单条信息的关联
     property order类里的属性
     column 订单表和用户表的外键这里是user_id(我给user表的id起了别名)(关联查询必须写外键)
     select 执行关联查询的第二条即关于user的查询的id
-->
 <association property="user" javaType="user" column="user_id" select="findUserByUserId"></association>
 </resultMap>
 <!--由于user类和表的字段信息不一致进行映射-->
 <resultMap id="findUserByUserIdMap" type="user">
    <id column="user_id" property="id"/>
    <result column="user_name" property="userName"/>
    <result column="user_sex" property="userSex"/>
 </resultMap>
 <!-- 查询用户id为1的订单 -->
 <select id="findOrderBuUserId" resultMap="findOrderByUserIdMap">
 select * from orderdb where id=#{id}
 </select>
 <!-- 查询id为1的用户 
 注意:两个#{}里的名称必须一致
      查询信息必须包括外键
-->
 <select id="findUserByUserId" resultMap="findUserByUserIdMap">
 select id user_id,user_name,user_sex from userdb where id=#{id}
 </select>
 </mapper>

2.mapper.java

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

package com.lipengge.mbt.mapper;

import com.lipengge.mbt.bean.Order;

public interface OrderMapper {
	//关联查询
	public Order findOrderBuUserId(int id)throws Exception;
}

3.测试类

sqllsessionfactory的单例模式

package com.lipengge.mbt.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SessionFactoryUtil {
	public static final String resource="SqlMapConfig.xml";
	public static SqlSessionFactory sqlsessionfactory=null;
	private SessionFactoryUtil(){
		
	}
	public static SqlSessionFactory getSqlSessionFactory(){
		if(sqlsessionfactory!=null){
			return sqlsessionfactory;
		}else{
			try {
				InputStream inputstream=Resources.getResourceAsStream(resource);
				sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputstream);
			} catch (IOException e) {
				e.printStackTrace();
			}
			return sqlsessionfactory;
		}
		
	}

}
package com.lipengge.mbt;

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

import com.lipengge.mbt.bean.Order;
import com.lipengge.mbt.mapper.OrderMapper;
import com.lipengge.mbt.utils.SessionFactoryUtil;

public class TestOrder {
   @Test
   public void findOrderBuUserId(){
	   SqlSessionFactory sqlSessionFactory = null;
	   SqlSession openSession = null;
	   try {
		sqlSessionFactory = SessionFactoryUtil.getSqlSessionFactory();
		openSession = sqlSessionFactory.openSession();
		OrderMapper mapper = openSession.getMapper(OrderMapper.class);
		Order findOrderBuUserId = mapper.findOrderBuUserId(2);
		System.out.println(findOrderBuUserId);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		if(openSession!=null){
		 openSession.close();
		}
	}
   }
}

2.连接查询(使用sql语句进行连接查询)

1.mapper.xml

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询
MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

2. mapper.java

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

3.测试类

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

一对多查询(只讲连接查询自己思考关联查询怎么实现)

1.mapper.xml

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

2.mapper.java

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

3.测试类

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

多对多查询(只讲连接查询自己思考关联查询怎么实现)

1.mapper.xml

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

2.mapper.java

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

3.测试类

MyBatis学习笔记——12MyBatis高级映射(结果集)(一对一,一对多,多对多)查询

最后附上几个bean

1.商品

package com.lipengge.mbt.bean;

public class Commodity {
	private int id;
	private String commodityType;
	private String commodityDetial;
	private String commodityName;
	private int commodityNumber;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCommodityType() {
		return commodityType;
	}
	public void setCommodityType(String commodityType) {
		this.commodityType = commodityType;
	}
	public String getCommodityDetial() {
		return commodityDetial;
	}
	public void setCommodityDetial(String commodityDetial) {
		this.commodityDetial = commodityDetial;
	}
	public String getCommodityName() {
		return commodityName;
	}
	public void setCommodityName(String commodityName) {
		this.commodityName = commodityName;
	}
	public int getCommodityNumber() {
		return commodityNumber;
	}
	public void setCommodityNumber(int commodityNumber) {
		this.commodityNumber = commodityNumber;
	}

}

2.订单

package com.lipengge.mbt.bean;

import java.util.List;

public class Order {
	private int id;
	private String orderNumber;
	private int userId;
	private User user;
	private List<OrderDetial> OrderDetialList;
	public List<OrderDetial> getOrderDetiaList() {
		return OrderDetialList;
	}
	public void setOrderDetiaList(List<OrderDetial> orderDetialList) {
		OrderDetialList = orderDetialList;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getOrderNumber() {
		return orderNumber;
	}
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	@Override
	public String toString() {
		return "Order [id=" +user.getId()+ ", userName=" +user.getUserName()+ ", userSex=" +user.getUserSex() + ", userPhone=" + user.getUserPhone() +",id=" + id + ", orderNumber=" + orderNumber + ", userId=" + userId + "]";
	}

}

3.商品详情

package com.lipengge.mbt.bean;

public class OrderDetial {
   private int id;
   private int orderId;
   private int commodityId;
   private int buyNumber;
   private Commodity commodity;
public Commodity getCommodity() {
	return commodity;
}
public void setCommodity(Commodity commodity) {
	this.commodity = commodity;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public int getOrderId() {
	return orderId;
}
public void setOrderId(int orderId) {
	this.orderId = orderId;
}
public int getCommodityId() {
	return commodityId;
}
public void setCommodityId(int commodityId) {
	this.commodityId = commodityId;
}
public int getBuyNumber() {
	return buyNumber;
}
public void setBuyNumber(int buyNumber) {
	this.buyNumber = buyNumber;
}
}

4.用户

package com.lipengge.mbt.bean;

import java.util.List;

public class User {
    private int id;
    private String userName;
    private String userSex;
    private String userPhone;
    private List<Order> OrderList;
	
	public List<Order> getOrderList() {
		return OrderList;
	}
	public void setOrderList(List<Order> orderList) {
		OrderList = orderList;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 getUserPhone() {
		return userPhone;
	}
	public void setUserPhone(String userPhone) {
		this.userPhone = userPhone;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", userSex=" + userSex + ", userPhone=" + userPhone + "]";
	}
	
    
}

相关文章:

  • 2022-12-23
  • 2021-04-20
  • 2018-01-09
  • 2022-12-23
  • 2022-01-17
  • 2021-10-13
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-27
  • 2021-07-05
  • 2021-06-27
  • 2021-11-27
相关资源
相似解决方案