1. 程式人生 > 其它 >Mybatis Plus分頁及自定義SQL語句

Mybatis Plus分頁及自定義SQL語句

技術標籤:javamybatis

**

1、資料庫的連線配置

首先我們要配置資料的連線等相關資訊,因此我們需要在application.properties檔案中,增加如下定義:

##
spring.application.name=server-page-helper
server.port=8000

## Mybits
spring.datasource.url=jdbc:mysql://localhost:3306/db_books?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

mybatis.typeAliasesPackage=com.shenmazong.serverpagehelper.mapper
mybatis.mapperLocations=classpath:/mapper/*.xml
logging.level.com.shenmazong.serverpagehelper.mapper=debug
mybatis-plus.configuration.map-underscore-to-camel-case=false

2、新增依賴

 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</
groupId
>
<artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 分頁外掛 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</
artifactId
>
<version>3.1.2</version> </dependency>

3、建立與表對應的實體類


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "tb_book")
public class TbBook {

    @TableId(value = "BookId", type = IdType.AUTO)
    private Long BookId;

    private Integer TaskId;
    private String BookName;
    private String BookAuthor;
    private String BookUrl;

}

4、建立Mapper檔案

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shenmazong.serverpagehelper.pojo.TbBook;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import java.util.List;

@Mapper
@Component(value = "iTbBookMapper")
public interface ITbBookMapper extends BaseMapper<TbBook> {

    @Select("select * from tb_book")
    IPage<TbBook> selectBookByPage(Page<TbBook> page);

    List<TbBook> selectBookForEachPage(List<Integer> ids);

    IPage<TbBook> selectBookByMyPage(Page<TbBook> page);
}

需要注意的是,這裡面有一個坑點。就是需要把分頁的引數放到函式的第一個引數,而不能把分頁引數放到其他位置,否則分頁機制不起作用。

5、定義對映xml檔案

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.shenmazong.serverpagehelper.mapper.ITbBookMapper">

    <select id="selectBookForEachPage" resultType="com.shenmazong.serverpagehelper.pojo.TbBook" parameterType="list">
        select * from tb_book
        <where>
            TaskId in
            <foreach item="item" collection="list" separator="," open="(" close=")" index="">
                #{item, jdbcType=NUMERIC}
            </foreach>
        </where>
    </select>

<!--    <select id="countByUserList" resultType="_int" parameterType="list">-->
<!--        select count(*) from users-->
<!--        <where>-->
<!--            id in-->
<!--            <foreach item="item" collection="list" separator="," open="(" close=")" index="">-->
<!--                #{item.id, jdbcType=NUMERIC}-->
<!--            </foreach>-->
<!--        </where>-->
<!--    </select>-->

    <select id="selectBookByMyPage" resultType="com.shenmazong.serverpagehelper.pojo.TbBook">
        select * from tb_book
    </select>
</mapper>

6、增加MyBatis Plus分頁攔截器

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

注意:這個攔截器非常重要,不能缺少,否則分頁功能不會生效。
**

7、使用非結構化返回結果

當SQL語句是一個動態語句,而又不想重新定義一個物件,則可以直接使用map來代替實體類,具體程式碼如下:

    @Select("select a.id,a.title,a.dyid,a.dynasty,a.authorid,a.author,a.content,\n" +
            "b.clicks,b.collections,b.difficult,b.voice\n" +
            "from tb_poetry_info as b\n" +
            "left join tb_poetry as a on b.poetryid=a.id\n" +
            "order by b.clicks desc")
    IPage<Map<String, Object>> selectMapPoetry4ClickByPage(Page<Map<String,Object>> page);

8、測試mapper檔案

@Test
    void testMyPage() {

        Page<TbBook> page = new Page<>(1, 10);
        IPage<TbBook> listByAuthorId = iTbBookMapper.selectBookByPage(page);
        System.out.println(listByAuthorId);
    }

    @Test
    void testForEach() {
        ArrayList<Integer> integers = new ArrayList<>();
        integers.add(20);
        integers.add(21);
        integers.add(22);
        integers.add(23);

        List<TbBook> books = iTbBookMapper.selectBookForEachPage(integers);
        books.forEach(book->{
            System.out.println(book);
        });
    }

    @Test
    void testSelectBookByMyPage() {
        Page<TbBook> page = new Page<>(1, 10);
        IPage<TbBook> books = iTbBookMapper.selectBookByMyPage(page);

        System.out.println(books.getTotal());
        System.out.println(books.getRecords());
    }