Mybatis Plus分頁及自定義SQL語句
阿新 • • 發佈:2020-12-26
**
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());
}