当前位置: 首页 > wzjs >正文

网址站长之家海外网络推广

网址站长之家,海外网络推广,政府官方网站建设需要多少钱,建设一个功能简单的网站在MyBatis注解式开发里,处理复杂的关联查询可通过多种方式,本文将结合实际场景,详细介绍几种常见的处理方法。 本文目录 1. 使用 Results 和 Result注解进行手动映射2. 使用 SelectProvider动态生成 SQL 1. 使用 Results 和 Result注解进行手…

        在MyBatis注解式开发里,处理复杂的关联查询可通过多种方式,本文将结合实际场景,详细介绍几种常见的处理方法。

本文目录

      • 1. 使用 @Results 和 @Result注解进行手动映射
      • 2. 使用 @SelectProvider动态生成 SQL

1. 使用 @Results 和 @Result注解进行手动映射

当涉及到关联查询时,数据库表的字段和实体类的属性可能无法自动映射,这时可以使用 @Results@Result 注解手动指定映射关系。

假设有 Order(订单)和 Product(商品)两个实体,一个订单可以包含多个商品,需要查询订单信息并关联查询出商品信息。

实体类定义:

// Order 类
@Data
public class Order {private Long id;private String orderNo;private List<Product> products;
}// Product 类
@Data
public class Product {private Long id;private String name;private double price;
}

Mapper接口:

import org.apache.ibatis.annotations.*;
import java.util.List;@Mapper
public interface OrderMapper {@Select("SELECT o.id, o.order_no, p.id as product_id, p.name as product_name, p.price as product_price " +"FROM orders o " +"JOIN order_items oi ON o.id = oi.order_id " +"JOIN products p ON oi.product_id = p.id " +"WHERE o.id = #{orderId}")@Results({@Result(property = "id", column = "id"),@Result(property = "orderNo", column = "order_no"),@Result(property = "products", javaType = List.class,many = @Many(select = "com.shop.mapper.ProductMapper.getProductsByOrderId"))})Order getOrderWithProducts(Long orderId);
}// ProductMapper 接口
@Mapper
public interface ProductMapper {@Select("SELECT * FROM products WHERE id IN (SELECT product_id FROM order_items WHERE order_id = #{orderId})")List<Product> getProductsByOrderId(Long orderId);
}

@Results 注解用于手动指定结果集的映射关系。
@Result 注解中,property 表示实体类的属性名,column 表示数据库表的列名。
@Many 注解用于处理一对多的关联关系,select 属性指定了关联查询的方法。



2. 使用 @SelectProvider动态生成 SQL

对于复杂的关联查询,SQL 语句可能会根据不同的条件动态变化,这时可以使用 @SelectProvider 注解动态生成 SQL。比如,如果需要根据用户输入的条件,动态查询订单及其关联的商品信息。

Mapper接口:

import org.apache.ibatis.annotations.*;
import java.util.List;@Mapper
public interface OrderMapper {@SelectProvider(type = OrderSqlProvider.class, method = "getOrderWithProductsSql")@Results({@Result(property = "id", column = "id"),@Result(property = "orderNo", column = "order_no"),@Result(property = "products", javaType = List.class,many = @Many(select = "com.example.shop.ProductMapper.getProductsByOrderId"))})Order getOrderWithProductsByCondition(@Param("orderId") Long orderId, @Param("productName") String productName);
}// 动态SQL提供类
class OrderSqlProvider {public String getOrderWithProductsSql(@Param("orderId") Long orderId, @Param("productName") String productName) {StringBuilder sql = new StringBuilder("SELECT o.id, o.order_no, p.id as product_id, p.name as product_name, p.price as product_price " +"FROM orders o " +"JOIN order_items oi ON o.id = oi.order_id " +"JOIN products p ON oi.product_id = p.id " +"WHERE 1 = 1");if (orderId != null) {sql.append(" AND o.id = #{orderId}");}if (productName != null && !productName.isEmpty()) {sql.append(" AND p.name LIKE CONCAT('%', #{productName}, '%')");}return sql.toString();}
}

@SelectProvider 注解指定了提供 SQL 语句的类和方法。
OrderSqlProvider 类中的 getOrderWithProductsSql 方法根据传入的参数动态生成 SQL 语句。

http://www.dtcms.com/wzjs/392644.html

相关文章:

  • 网页制作与网站建设 论文怎么建网站
  • 做网站系统用什么语言seo综合查询接口
  • 亚洲做性视频网站最好的免费推广平台
  • 深圳网站设计公司电话营销方法有哪几种
  • 做ppt软件怎么下载网站海南百度总代理
  • 企业类网站培训班有哪些
  • 国外做黄色网站磁力多多
  • 网站建设yu媒体平台推广
  • 机械设计制造及其自动化圳建设网站百度网页版主页网址
  • 宿州物流网站建设seo优化顾问服务
  • 有哪些可以做1元夺宝的网站拓客app下载
  • wordpress为艾迪东莞seoseo关键词排名优化
  • 销售用什么软件找客户百度seo关键词优化软件
  • 温州网站建设设计百度的营销中心上班怎么样
  • Mac怎么搭建网站开发环境厦门seo测试
  • 有网站的源代码如何做网站网络优化需要哪些知识
  • 做的新网站到首页又下去了百度top排行榜
  • 长沙新能源建站补贴软文案例400字
  • 论坛网站建设视频北京今日重大新闻
  • 电商网站开发教材最近新闻头条
  • 微商城开发设计seo技术网网
  • 建设银行网站维修图片怎么做互联网营销推广
  • 门户网站开发需要多少钱谷歌浏览器app下载安装
  • 新手如何建站大批量刷关键词排名软件
  • 越南做网站成都营销推广公司
  • 哈尔滨快速建站服务网站怎么优化到首页
  • 网站详情页用哪个软件做qq群推广拉人
  • 设计公司网站怎么做百度搜索推广怎么做
  • 青海网站建设哪家强软件推广是什么工作
  • 如何设计一款appseo知识培训