MyBatis高级映射(结果集)(一对一,一对多,多对多)查询
本次我们为了方便更换为maven项目(使用mybatis mapper代理方法实现)

基本项目结构是相通的就是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

<?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">
<resultMap type="order" id="findOrderByUserIdMap">
<id column="id" property="id"/>
<result column="order_number" property="orderNumber"/>
<result column="user_id" property="userId"/>
<association property="user" javaType="user" column="user_id" select="findUserByUserId"></association>
</resultMap>
<resultMap id="findUserByUserIdMap" type="user">
<id column="user_id" property="id"/>
<result column="user_name" property="userName"/>
<result column="user_sex" property="userSex"/>
</resultMap>
<select id="findOrderBuUserId" resultMap="findOrderByUserIdMap">
select * from orderdb where id=#{id}
</select>
<select id="findUserByUserId" resultMap="findUserByUserIdMap">
select id user_id,user_name,user_sex from userdb where id=#{id}
</select>
</mapper>
2.mapper.java

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) {
e.printStackTrace();
}finally{
if(openSession!=null){
openSession.close();
}
}
}
}
2.连接查询(使用sql语句进行连接查询)
1.mapper.xml


2. mapper.java

3.测试类

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


2.mapper.java

3.测试类

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


2.mapper.java

3.测试类

最后附上几个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 + "]";
}
}