持久层框架MyBatis 多表查询 一对一

四、多表查询 一对一

上一章内容:持久层框架MyBatis的增删改查、映射与表间关系

实现:

思路:

1)在sqlyog中分析表的关系
2)画图分析代码实现思路
在这里插入图片描述

1.需求:

用户和订单信息一对一关联;查询用户和订单的扩展信息。
User表
在这里插入图片描述
jt_Order表
在这里插入图片描述
SELECT order_id ,total,user.user_id ,username FROM jt_order,USER
WHERE jt_order.order_id=1 AND user.user_id=jt_order.user_id

2.分析

在这里插入图片描述

3.1拷贝dbDemo,解压到工作区,更改项目名mybatis04,打开eclipse 导入项目
在这里插入图片描述

3.2导入后创建包mapper,pojo,controller
在这里插入图片描述

3.3创建JtOrder,User,JtOrder接口.select()
在这里插入图片描述

创建User 类

package com.tedu.DbDemo.pojo;

public class User {
    
    
    Integer userId;
    String username;
    String password;
    
    //get()、set()
	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 getPassword() {
    
    
		return password;
	}
	public void setPassword(String password) {
    
    
		this.password = password;
	} 
}

创建JtOrder 类

package com.tedu.DbDemo.pojo;
//对应jt_order表
public class JtOrder {
    
    
	Integer orderId;//对应order_id列
	   Integer total;
	   //一个订单属于一个用户的
	   User user;//体现jt_order和uesr表的一对一
	   //set(),get()
	public Integer getOrderId() {
    
    
		return orderId;
	}
	public void setOrderId(Integer orderId) {
    
    
		this.orderId = orderId;
	}
	public Integer getTotal() {
    
    
		return total;
	}
	public void setTotal(Integer total) {
    
    
		this.total = total;
	}
	public User getUser() {
    
    
		return user;
	}
	public void setUser(User user) {
    
    
		this.user = user;
	}
}

3.4在mapper包中 创建JtOrderMapper 接口和 jtOrder.xml

package com.tedu.DbDemo.mapper;

import com.tedu.DbDemo.pojo.JtOrder;

//操作order,user表
public interface JtOrderMapper {
    
    
	//@mapperscan("com.tedu.DbDemo.mapper")
	//mybatis框架会自动为JtOrder创建代理类
	//mybatis框架会为代理类创建代理对象
	//代理对象放在spring ioc容器中了
	//controller中@autowired JtOrder jtOrder
	//jtOrder.select()
	//com.tedu.DbDemo.mapper.jtOrder 方法名select
	//从JtOrderMapper.xml中找到<select id=selectById>
	//找到select from jtOrder,user执行
	//mybatis框架根据xml中的resultMap把结果集转成jtOrder
   public JtOrder selectById(Integer orderId);
}

创建 JtOrderMapper.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=" ">
<!-- 结果集映射 -->
<!-- select放的是sql语句 -->
</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.tedu.DbDemo.pojo.JtOrderMapper">
<!-- 结果集映射 -->
<resultMap type="com.tedu.DbDemo.pojo.jtOrder" id="map1">
  <result column="order_id" property="order_id"/>
  <result column="total" property="total"/>
  <!-- 结果集中有user表的信息,映射到User类 -->
  <!-- jtOrder{
    
    User user} -->
  <association property="user" javaType="com.tedu.DbDemo.pojo.User">
  
  </association>
</resultMap>

<!-- select放的是sql语句 -->
</mapper>

在这里插入图片描述
增加修改select放的sql语句(完整的代码)

<?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.tedu.DbDemo.pojo.JtOrderMapper">
<!-- 结果集映射 -->
<resultMap type="com.tedu.DbDemo.pojo.jtOrder" id="map1">
  <result column="order_id" property="order_id"/>
  <result column="total" property="total"/>
  <!-- 结果集中有user表的信息,映射到User类 -->
  <!-- jtOrder{
    
    User user} -->
<association property="user" javaType="com.tedu.DbDemo.pojo.User">
   <result column="user_id" property="userId"/>
   <result column="username" property="username"/>
  </association>
</resultMap>

<!-- select放的是sql语句 -->
<!-- select标签必须放在resultMap标签的下面 -->
<!-- #{
    
    }是占位符,被替换成方法的参数,mybatis本质就是拼接SQL语句
parameterType指定orderId的类型
parameterMap=值,值必须在前面声明
resultType=类名
resultMap=前面声明的resultMap
 -->
<select id="selectById" resultMap="map1" parameterType="Integer">
SELECT
order_id ,total,user.user_id ,username 
FROM jt_order,USER 
WHERE jt_order.order_id=1={
    
    orderId}
AND user.user_id=jt_order.user_id
</select>
</mapper>

3.5从mybatis02拷贝application.yml修改两个包名。
在这里插入图片描述

3.6在入口DbDemoApplication类中配置添加@mapperScan()

package com.tedu.DbDemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.tedu.DbDemo.mapper")
public class DbDemoApplication {
    
    

	public static void main(String[] args) {
    
    
		SpringApplication.run(DbDemoApplication.class, args);
	}
}

3.7 在controller包中创建JtOrderController类

package com.tedu.DbDemo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tedu.DbDemo.mapper.JtOrderMapper;
import com.tedu.DbDemo.pojo.JtOrder;

@RestController
public class JtOrderController {
    
    
	//从spring框架的ioc容器中取JtOrderMapper
	//接口的代理类的代理对象
	@Autowired
	JtOrderMapper jtOrderMapper;
	
	@RequestMapping("/")
	public JtOrder selectById() {
    
    
		JtOrder jtOrder=jtOrderMapper.selectById(1);
		return jtOrder;
	}
}

Run As执行:
在这里插入图片描述



猜你喜欢

转载自blog.csdn.net/QQ1043051018/article/details/112839218