阅读量:0
在 MyBatis 中,你可以通过编写 XML 映射文件或注解来实现使用 UNION ALL 的复杂查询
- 首先,创建一个实体类(例如 User)来表示查询结果:
public class User { private int id; private String name; // 省略 getter 和 setter 方法 }
- 在 MyBatis 的映射文件中,编写两个不同的查询语句,分别对应你想要合并的两个查询。例如,我们有两个查询:一个查询年龄大于 18 的用户,另一个查询名字包含 “John” 的用户。
<mapper namespace="com.example.mapper.UserMapper"> <resultMap id="userResultMap" type="com.example.entity.User"> <result property="id" column="id"/> <result property="name" column="name"/> </resultMap> <select id="selectUsersByAge" resultMap="userResultMap"> SELECT id, name FROM user WHERE age > 18 </select> <select id="selectUsersByName" resultMap="userResultMap"> SELECT id, name FROM user WHERE name LIKE '%John%' </select> </mapper>
- 接下来,我们需要创建一个新的查询,将这两个查询通过 UNION ALL 合并起来。在同一个映射文件中添加以下代码:
( SELECT id, name FROM user WHERE age > 18 ) UNION ALL ( SELECT id, name FROM user WHERE name LIKE '%John%' ) </select>
- 最后,在对应的 Mapper 接口中添加方法声明:
public interface UserMapper { List<User> selectUsersByAge(); List<User> selectUsersByName(); List<User> selectUsersByUnion(); }
现在你可以在你的服务类中调用 selectUsersByUnion()
方法来获取合并后的查询结果。请注意,这里的示例是基于 XML 映射文件的,如果你使用的是注解,你可以将查询语句直接放在对应的方法上,而不是在映射文件中。