MyBatis-Plus使用自定义xml查询并分页

MyBatis-Plus使用自定义xml查询并分页

在MyBatis-Plus的基础上加载自定义的xml且分页

一、Mapper接口和xml编写

注意事项:

  1. 此处mapper接口根据官网文档 可以集成BaseMapper 也可不继承
  2. 传递参数 Page 即自动分页,必须放在第一位
  3. 对象类参数要加@Param注解;value值要和xml中 #{user.user_name} 保持一致
@Mapper
public interface UserMapper extends BaseMapper<User>{
	public Page<User> listUser(Page<User> page,@Param("user") User user);
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="com.ch.mapper.UserMapper">

	<select id="listUser" parameterType="com.ch.vo.User" resultType="com.ch.vo.User">
		select * from user where 1=1
		<if test="user.user_name!=null and user.user_name !=''">
			and user_name like '%'#{user.user_name}
		</if>
		<if test="user.age!=null and user.age !=''">
			
			<![CDATA[
		    and age > #{user.age}
		    ]]>
		</if>
	</select>
	
</mapper>

二、yml配置

server:
  port: 8080
 
spring:
  datasource:
    username: root
    password: 1234
    #指定时区和编码参数
    url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  configuration:
    # 关闭驼峰命名
    map-underscore-to-camel-case: false
  mapper-locations:
  #此处注意classpath后面要加* 表示加载多个jar下的xml
  - classpath*:/mapper/**.xml
  

三、分页插件的配置

@Configuration
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  
        // 默认false 为false时 会返回空数据
        paginationInterceptor.setOverflow(true);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

四、User实体类

此处使用了lombok插件

@Getter
@Setter
@TableName("user")
public class User {
	@TableId(value = "id")
	private Long id;
	@TableField(value = "user_name")
	private String user_name;
	@TableField(value = "addr")
	private String addr;
	@TableField(value = "age")
	private Integer age;
	@TableField(value = "password")
	private String password;
}

五、Service接口及实现类

public interface IUserService extends IService<User>{
	
	/**
	 * 自定义xml分页查询
	 * @param page
	 * @param user
	 * @return
	 */
	public Page<User> listUser(Page<User> page,User user);
}

@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService{

	@Override
	public Page<User> listUser(Page<User> page, User user) {
		return getBaseMapper().listUser(page, user);
	}

}

六、Controller代码

此处只是测试直接new一个Page对象,current表示当前第几页,10 为每页显示的条数据

@RestController
public class UserController {
	@Autowired
	private IUserService userService;
	
	@GetMapping("/user/list")
	public ReturnResult<?> list(User user,Long current){
		Page<User> page=new Page<>(current, 10);
		return ReturnResult.ok(userService.listUser(page, user));
	}
}

七、运行测试

启动服务访问 http://localhost:8080/user/list?current=1
在这里插入图片描述

八、总结

  1. 主要是注意mapper接口的分页参数要放到第一位
  2. 对象类型的参数要添加@Param注解 且value值要和xml #{user.xxx}对应
  3. 当mapper文件存在jar内部时,要把mapper-locations配置为 classpath*:/mapper/**.xml
  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mybatis-Plus 中,我们可以通过自定义 XML 文件来实现复杂的 SQL 操作,包括分页查询。下面是一个示例,演示如何使用自定义 XML 文件实现 Mybatis-Plus 分页查询: ```xml <!-- Mybatis 自定义 XML 文件 --> <mapper namespace="com.example.mapper.UserMapper"> <select id="selectUserList" resultType="com.example.entity.User"> select * from user <where> <if test="name != null and name != ''"> and name like concat('%', #{name}, '%') </if> </where> </select> <!-- 分页查询 --> <select id="selectUserPage" resultMap="userResultMap"> select * from user <where> <if test="name != null and name != ''"> and name like concat('%', #{name}, '%') </if> </where> <if test="page != null"> limit #{page.current}, #{page.size} </if> </select> </mapper> ``` 其中,`selectUserList` 是一个普通的查询语句,`selectUserPage` 则是一个带有分页参数的查询语句。在分页查询中,我们需要使用 `limit` 关键字来控制返回数据的数量,同时,我们也需要将分页信息传递给 SQL 语句。这里,我们通过 Mybatis 的参数处理机制来实现,在 XML 文件中使用 `${paramName}` 取出参数值。 接下来,我们需要在 Java 代码中调用该查询语句,从而实现分页查询。示例代码如下: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public IPage<User> getUserPage(Page<User> page, String name) { return baseMapper.selectUserPage(page, name); } } ``` 在 Service 实现类中,我们通过 `baseMapper` 来调用自定义 SQL 语句,其中 `selectUserPage` 方法返回一个 `IPage<User>` 对象,表示查询结果。最后,我们将该对象返回给控制器,完成分页查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值