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

浏览器收录网站qq群推广软件

浏览器收录网站,qq群推广软件,ftp服务器怎么搭建,广州投标平台在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/793086.html

相关文章:

  • 做公司网站的流程小企业网站建设多少钱
  • 广州专业网站长春做网站seo的
  • 哈尔滨网站搭建南昌做网站市场报价
  • html 网站添加悬浮二维码常用的网络营销工具有哪些?
  • 如何用ps做网站平面图霍邱网站设计
  • 谁有做网站比较厉害的网站建设及推广方案ppt模板
  • 免费html网站制作成品企业网站建设运营的灵魂
  • 机构网站建设晋城中英文网站建设
  • 粪池怎样建设长沙公交优化
  • 建设银行境外汇款申请书网站做电商网站公司
  • 企业网站每年续费吗个人网站推荐
  • asp网站知道用户名是admin深圳网站建设公司收费
  • 北京城乡和住房建设部网站唐山网站开发公司
  • 织梦xml网站地图网页微信版官方下载
  • 如何做网站系统网站的后期维护自己怎么做
  • 建网站卖产品怎么样自己怎么做网站建设
  • 黑客怎么攻击网站网站建设平台讯息
  • 深圳做网站google推广网站建设数据表设计 性别
  • 网站下拉框怎么做做网站的上海公司有哪些
  • 四川网络推广公司seo金融术语
  • 桂林网站制作培训学校中国最大的招标网
  • 浙江省住建和城乡建设厅官方网站盛世阳光-网站建设
  • 微信里有人发做任务网站中建八局第一建设有限公司董事长
  • 建设网站需要花费app网站制作要多少费用
  • 要点营销网站北京app开发流程
  • 做网站龙头wordpress 模板制作软件
  • mooc网站开发流程图网站建设评比办法
  • 广州网站制作报价棋牌网站建设要多少钱
  • 娱乐网站设计与实现wordpress 又拍云
  • 门户网站开发投标文件.doc软件开发平台建设