springboot配置mybatis并且使用pageHelper工具分页

Mybatis使用Demo

springboot配置Mybatis流程
1. 引入依赖,在gradle中添加
mybatis-spring-boot-starter
2. 配置datasource

    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        //初始化
        return dataSource;
    }
  1. 在applictaion.yml中配置
mybatis:
    //其路径是mybatis的xml文件所在路径
    mapper-locations: classpath:mapper/*.xml
  1. 编写一个xml文件


//namespace对应着mybatis的接口位置
<mapper namespace="com.dullbird.demo.mybaits.mapper.UserBaseInfoMapper">
    <resultMap id="UserBaseInfoTotal" type="com.dullbird.demo.mybaits.po.UserBaseInfo">
        <result column="user_id" property="userId" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
    resultMap>
    <select id="listUserInfos" resultMap="UserBaseInfoTotal">
        select * from user_base_info
    select>
mapper>
  1. 需要在spring配置文件中加入如下注解
//用于扫描mapper
@MapperScan("com.dullbird.demo.mybaits.mapper")
@Configuration
//用于开启事务
@EnableTransactionManagement

6.写测试类测试结果即可

mybatis-pageHelper:
1. 引入依赖包,由于是springboot 引入pagehelper-spring-boot-starter
2. 配置拦截器插件(注意:是在SqlSessionFactory中配置), 有两种配置方法,一种是在mybatis的主配置xml中。二、在SqlSessionFactory对象中配置。
由于我的项目没有mybatis的主配置xml,所以使用第二种
该方式没有配置成功,报错NPE,需要给对象传入配置文件,申明一个空的即可。然后又报错java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!,暂时未解决

@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    //如果需要往拦截器中配置参数还可以调用setProperties
    Interceptor[] interceptors = {new PageInterceptor()};
    //添加拦截插件
    sqlSessionFactoryBean.setPlugins(interceptors);
    sqlSessionFactoryBean.setDataSource(dataSource);
    SqlSessionFactory sqlSessionFactory  = null;
    try {
         sqlSessionFactory = sqlSessionFactoryBean.getObject();
    } catch (Exception e) {
        logger.error("=============",e);
    }
    return sqlSessionFactory;
}

第三种方式,直接配置,并测试可用

@Bean
public PageHelper getPageHelper() {
    PageHelper pageHelper = new PageHelper();
    Properties properties = new Properties();
    properties.setProperty("helperDialect", "mysql");
    pageHelper.setProperties(properties);
    return pageHelper;
}

第三种方式的application.yml配置方式,和java配置一样

pagehelper:
    helperDialect: mysql
#    reasonable: true
    supportMethodsArguments: true
    params: pageNum=pageNum;pageSize=pageSize
  1. 具体分页方式选择
    1). RowBounds方式的调用。(不使用,如果需要查看参考文章的分页工具)
    2). PageHelper.startPage 静态方法调用
    即在调用sql的上一句执行
    PageHelper.startPage(1, 10);或PageHelper.offsetPage(1, 10);
    然后调用sql查询。此处可能会有安全问题。详见参考文章
    3). 使用参数方式
    有两种方式,一种是接口种添加参数,另外一种是实体中。
    演示第二种
    首先配置application.yml
pagehelper:
    helperDialect: mysql
    //需要开启支持参数
    supportMethodsArguments: true
    //接收pageNum和pageSize
    params: pageNum=pageNum;pageSize=pageSize

然后修改bean

public class UserBaseInfo {
    private Long userId;
    private String name;
    //增加如下两个字段
    private Integer pageNum;
    private Integer pageSize;
    //省略getter/setter
}

修改接口接收一个UserBaseInfo的参数,不需要显示的处理pageNum,pageSize

public interface UserBaseInfoMapper {
    List listUserInfos(UserBaseInfo userBaseInfo);
}
测试代码
UserBaseInfo userBaseInfo = new UserBaseInfo();
userBaseInfo.setPageNum(1);
userBaseInfo.setPageSize(5);
System.out.println(userBaseInfoMapper.listUserInfos(userBaseInfo));

需要注意的是,利用参数的方式分页。必须开启supportMethodsArguments: true
且必须传入pageNum=pageNum;pageSize=pageSize两个参数,否则不会分页。

参考文章:
1.https://blog.csdn.net/zhoujiyu123/article/details/79786847 springboot如何继承mybatis
2.https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md mybatis分页工具

你可能感兴趣的:(mybatis,pageHelper)