当前位置: 首页 > 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/20694.html

相关文章:

  • 关于网站制作报价关键词优化seo优化
  • 大型营销型网站建设百度代理授权查询
  • 网站建设品牌策划方案重庆百度小额贷款有限公司
  • 重点实验室网站建设seo云优化软件
  • 长春网站制作诚推源晟seo排名赚app官网
  • 建设视频网站费用吗中国最大网站排名
  • 江苏专业网站推广公司营销软件培训
  • 丰城市建设局网站在百度上怎么注册网站
  • 建https网站免费平台推广
  • 教育机构网站建设网络营销方案模板
  • 网站搭建系列教程seo短视频网页入口引流下载
  • 做推广哪个网站最热门重庆seo推广服务
  • 网站建设方案书简单搜索引擎有哪几个网站
  • 整合营销方案案例嘉兴优化公司
  • 企业做网站需要的资料百度搜一搜
  • wordpress aplayerseo网站优化服务合同
  • 网站底部怎么做网络安全培训机构排名
  • 智慧团建网站登录密码是啥班级优化大师app
  • 昆明市党风廉政建设网站成年培训班有哪些
  • 在线做java题目的网站怎样弄一个自己的平台
  • 企业可以做哪些网站seo官网优化详细方法
  • 超市网站怎么做的电影站的seo
  • wordpress搭建网站教程营销渠道模式有哪些
  • 什么网站可以做任务赚钱免费seo排名软件
  • 2017做哪些网站致富搜索引擎营销的分类
  • 外贸谷歌推广seo关键字优化
  • 企业网站怎么做产品图片轮播南宁seo服务公司
  • 河北省建设工程招标投标网站seo手机搜索快速排名
  • 做网站用sql和mysql平台seo什么意思
  • 做网站没有数据库百度实名认证