【框架集成】spring boot + mybatis plus + pagehelper

环境及版本
JDK:1.8
Spring Boot:2.1.6
Mybatis Plus:3.1.2
Pagehelper:5.1.10

1. 添加 maven 依赖

除了数据库驱动,其他都用当前最新版本

Spring Boot


    org.springframework.boot
    spring-boot-starter
    2.1.6.RELEASE


    org.springframework.boot
    spring-boot-starter-test
    2.1.6.RELEASE
    test

Mybatis Plus


    com.baomidou
    mybatis-plus-boot-starter
    3.1.2

Pagehelper 依赖 5.1.10 版本,需要去掉 mybatis 依赖,否则会和 mybatis plus 冲突


    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.2.12
    
        
            org.mybatis
            mybatis
        
        
            org.mybatis
            mybatis-spring
        
    

其他

 
     mysql
     mysql-connector-java
     5.1.47
 
 
     com.alibaba
     druid
     1.1.19
 

2. 配置文件

最简配置,木有多余的

application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.0.200:3306/mysql?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root123

# mybatis-plus
mybatis-plus:
  mapper-locations: classpath:mapper/**/*Mapper.xml

# pageHelper
pagehelper:
  helperDialect: mysql

3. Dao 示例

3.1 mybatis plus 的 CRUD

添加表

CREATE TABLE `t_sys_user`  (
  `id` bigint(0) NOT NULL,
  `username` varchar(32) NULL,
  `password` varchar(32) NULL,
  `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  PRIMARY KEY (`id`)
);

修改启动类

@SpringBootApplication
@MapperScan("ricky.learn.dao")
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

添加 User 对象

@TableName("t_sys_user")
public class User {

    @TableId(type = IdType.ID_WORKER)
    private Long id;
    private String name;
    private String username;
    private String password;

    // 省略 getter setter 和构造方法
}

添加 mapper 继承 BaseMapper

@Mapper
public interface UserDao extends BaseMapper {
}

测试方法

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {

    @Autowired
    private UserDao userDao;

    @Test
    public void add() {
        User user = new User("王山支", "wsz", "wsz123");
        userDao.insert(user);
    }
}

结果

id username password name
1156954967293677569 wsz wsz123 王山支

解释

  • 启动类的@MapperScan("ricky.learn.dao")会扫描ricky.learn.dao下带有@Mapper的类
  • User@TableName("t_sys_user")指定表名为t_sys_user
  • id 字段的@TableId(type = IdType.ID_WORKER)在添加时会自动生成 id(雪花算法)
  • UserDao 继承了 BaseMapper 之后可以使用 mybatis plus 自带的 CRUD 方法

更多方法参考 Mybatis-Plus官方文档

3.2 分页与自定义SQL

多加几条数据

INSERT INTO `t_sys_user`(`id`, `username`, `password`, `name`) VALUES (1156958453683032065, 'wsz', 'wsz123', '王山支2');
INSERT INTO `t_sys_user`(`id`, `username`, `password`, `name`) VALUES (1156958475006885889, 'wsz', 'wsz123', '王山支3');
INSERT INTO `t_sys_user`(`id`, `username`, `password`, `name`) VALUES (1156958505272868866, 'wsz', 'wsz123', '王山支4');
INSERT INTO `t_sys_user`(`id`, `username`, `password`, `name`) VALUES (1156958534389747714, 'wsz', 'wsz123', '王山支5');

Mybatis Plus 分页

创建 MybatisPlusConfig 使用分页插件

@EnableTransactionManagement
@Configuration
@MapperScan("ricky.learn.**.dao*")
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
        return paginationInterceptor;
    }
}

使用自带的分页查询

加一个测试方法

@Test
public void page() {
    List userList = userDao.selectPage(new Page<>(2, 2), null).getRecords();
    userList.forEach(System.out::println);
}

输出:

User{id=1156958475006885889, name='王山支3', username='wsz', password='wsz123'}
User{id=1156958505272868866, name='王山支4', username='wsz', password='wsz123'}

自定义SQL和mybatis plus的分页

UserDao 添加方法

@Mapper
public interface UserDao extends BaseMapper {
    IPage pageList(Page page);
}

新建 UserMapper.xml





    
        
        
        
        
    
    
    


添加测试方法试试

@Test
public void pageList() {
    List userList = userDao.pageList(new Page<>(2, 2)).getRecords();
    userList.forEach(System.out::println);
}

当 page.size < 0 则不分页,查询时不会有分页条件

@Test
public void pageList() {
    List userList = userDao.pageList(new Page<>(0, -1)).getRecords();
    userList.forEach(System.out::println);
}
User{id=1156954967293677569, name='王山支', username='wsz', password='wsz123'}
User{id=1156958453683032065, name='王山支2', username='wsz', password='wsz123'}
User{id=1156958475006885889, name='王山支3', username='wsz', password='wsz123'}
User{id=1156958505272868866, name='王山支4', username='wsz', password='wsz123'}
User{id=1156958534389747714, name='王山支5', username='wsz', password='wsz123'}

Pagehelper 分页

UserDao 添加

List pageList2();

UserMapper.xml 添加


添加测试方法

@Test
public void pageList2() {
    PageHelper.startPage(2, 2);
    List userList = userDao.pageList2();
    PageInfo pageInfo = new PageInfo<>(userList);
    pageInfo.getList().forEach(System.out::println);
    System.out.println("页大小" + pageInfo.getPageSize());
    System.out.println("当前页" + pageInfo.getPageNum());
    System.out.println("总页数" + pageInfo.getPages());
    System.out.println("总条数" + pageInfo.getTotal());
    System.out.println("当前条数" + pageInfo.getSize());
}
User{id=1156958475006885889, name='王山支3', username='wsz', password='wsz123'}
User{id=1156958505272868866, name='王山支4', username='wsz', password='wsz123'}
页大小2
当前页2
总页数3
总条数5
当前条数2

4. 在 service 中使用

创建 UserService

public interface UserService extends IService {
    UserDto findById(String id);
}

创建 UserServiceImpl,使用自带的 CRUD

@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
    @Override
    public UserDto findById(String id) {
        User user = getById(id);
        return ConvertUtil.convert(user, UserDto.class);
    }
}

如果自己的方法名和 mybatis plus 自带的方法一样的话,使用 super

@Override
public UserDto getById(String id) {
    User user = super.getById(id);
    return ConvertUtil.convert(user, UserDto.class);
}

使用自定义方法
添加方法(省略其他方法)

public interface UserService extends IService {
    IPage pageList(Page page);
}

注入 UserDao ,调用 UserDao 的自定义方法

@Service
public class UserServiceImpl extends ServiceImpl implements UserService {

    private UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public IPage pageList(Page page) {
        return userDao.pageList(page);
    }
}

测试一下

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceImplTest {

    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;

    @Test
    public void pageList() {
        List userList = userService.pageList(new Page(2, 2)).getRecords();
        userList.forEach(System.out::println);
    }
}

你可能感兴趣的:(【框架集成】spring boot + mybatis plus + pagehelper)