mapper查询两个库的书写

本文深入探讨了SQL查询语句的高级用法,包括联表查询、子查询、条件筛选等,通过具体案例展示了如何优化数据库查询效率,适用于各类数据库系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<select id="selectStation" resultType="Select_Static" parameterType="java.util.Map">
SELECT s.`name`,s.location addr,r.comstatus,r.id ,
(SELECT COUNT(1)
         FROM icloud_hst_#{icloud_hst_date}.hst_event_#{station_id} h,static_ied i,static_dgt d
               WHERE h.deviceID = i.id AND i.station_id = #{station_id} AND d.warning = 1 AND h.varID = d.id  AND h.knowFlag = 0 AND h.updateDT LIKE  CONCAT(#{updateDT},'%')) notice
   FROM static_user u,static_station s,real_station r
      WHERE u.owner_id = s.owner_id AND s.id = r.id AND u.owner_id = #{owner_id}

</select>
### MyBatis Mapper.XML 编写连表查询 在MyBatis中,`mapper.xml` 文件是定义 SQL 语句和 Java 方法之间映射关系的核心配置文件。对于复杂的业务逻辑需求,如多表联查,可以通过 `select` 标签配合相应的属性来完成。 #### 使用 `<select>` 实现两表或多表连接查询 为了执行连表查询,在 `mapper.xml` 中主要利用 `<select>` 元素,并在其内部书写标准的 SQL JOIN 语法[^2]: ```sql <select id="findUsersWithOrders" resultMap="UserOrderResult"> SELECT u.id, u.name, o.order_id, o.product_name FROM users u LEFT JOIN orders o ON u.id = o.user_id; </select> ``` 上述例子展示了如何从两个不同的表格 (`users`, `orders`) 获取数据并将其关联起来。这里使用的是左外连接 (LEFT JOIN),这意味着即使右边的订单表中有匹配项缺失,左边用户表中的记录也会被返回。 #### 定义复杂的结果映射 当涉及到多个实体类之间的映射时,则需借助于自定义的结果集映射——即设置 `resultMap` 属性指向一个预定义好的结果映射规则[^1]: ```xml <resultMap id="UserOrderResult" type="map"> <id column="id" property="userId"/> <result column="name" property="userName"/> <association property="orderInfo" javaType="hashmap"> <id column="order_id" property="orderId"/> <result column="product_name" property="productName"/> </association> </resultMap> ``` 这段代码片段说明了怎样把来自不同表的数据字段分配给目标对象的不同属性;特别是通过 `<association>` 子元素处理一对多的关系。 #### 处理特殊字符 如果 SQL 查询条件涉及到了不等号或其他可能引起 XML 解析错误的操作符,应该采用 CDATA 或者转义的方式避免冲突[^3][^4]: ```xml <!-- 使用<![CDATA[]]>包裹 --> <select id="getYoungerThanAge" parameterType="int" resultType="string"> <![CDATA[ SELECT name FROM persons WHERE age < #{age} ]]> </select> <!-- 或者使用转义字符 --> <select id="getOlderThanOrEqualAge" parameterType="int" resultType="string"> SELECT name FROM persons WHERE age >= #{age} </select> ``` 以上就是有关 MyBatis 的 `mapper.xml` 如何编写连表查询的一个简单介绍及实例展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值