永続層フレームワークMyBatisマルチテーブルクエリ1対1

4つのマルチテーブルクエリを1対1で

前の章の内容:永続層フレームワークMyBatisの追加、削除、変更、クエリ、マッピング、およびテーブルの関係

成し遂げる:

アイデア:

1)sqlyogのテーブル間の関係を分析します
2)絵を描き、コード実装のアイデアを分析します
ここに画像の説明を挿入

1.要件:

ユーザーと注文情報の間の1対1の関連付け。ユーザーと注文に関する拡張情報を照会します。
ユーザーテーブル
ここに画像の説明を挿入
jt_Orderテーブル
ここに画像の説明を挿入
SELECTorder_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インポート後にパッケージマッパー、pojo、コントローラーを作成する
ここに画像の説明を挿入

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マッパーパッケージに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をコピーし、2つのパッケージ名を変更します。
ここに画像の説明を挿入

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コントローラーパッケージに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;
	}
}

実行として実行:
ここに画像の説明を挿入



おすすめ

転載: blog.csdn.net/QQ1043051018/article/details/112839218