mybati-splus编写xml进行复杂查询
时间: 2023-07-09 22:24:07 浏览: 93
MyBatis-Plus提供了非常方便的XML配置方式来进行复杂查询。下面是一个例子,假设有一个User表,我们需要查询年龄在18到30岁之间,且名字包含“张”的用户列表:
首先,在Mapper接口中定义一个方法,使用@Select注解指定SQL语句的ID:
```java
public interface UserMapper extends BaseMapper<User> {
@Select("<script>select * from user where age between #{minAge} and #{maxAge} and name like concat('%', #{name}, '%')</script>")
List<User> selectByAgeAndName(@Param("minAge") int minAge, @Param("maxAge") int maxAge, @Param("name") String name);
}
```
其中,<script>和</script>标签是必须的,因为MyBatis-Plus会把SQL语句包装在<script>标签中。使用#{minAge}、#{maxAge}、#{name}等占位符来传递参数,同时使用concat函数来拼接字符串。
然后,在XML文件中定义SQL语句:
```xml
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectByAgeAndName" resultMap="BaseResultMap">
select * from user where age between #{minAge} and #{maxAge} and name like concat('%', #{name}, '%')
</select>
</mapper>
```
其中,namespace属性指定Mapper接口的全限定名,id属性指定方法名,resultMap属性指定结果映射,这里使用了BaseResultMap。
最后,在Service中调用Mapper方法进行查询:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> selectByAgeAndName(int minAge, int maxAge, String name) {
return userMapper.selectByAgeAndName(minAge, maxAge, name);
}
}
```
这样,就可以通过XML配置来进行复杂查询了。需要注意的是,MyBatis-Plus的XML配置方式与MyBatis的略有不同,需要使用<script>标签和concat函数来拼接SQL语句。
阅读全文