文章目录
1. Mybatis
2. Mybatis Plus
3. PageHelper
参考资料
1. Mybatis
1.1. 代码实现
package com. example. demo ;
import org. mybatis. spring. annotation. MapperScan ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ;
@MapperScan ( value = "com.example.demo.mapper" )
@SpringBootApplication
public class DemoApplication {
public static void main ( String [ ] args) {
SpringApplication . run ( DemoApplication . class , args) ;
}
}
package com. example. demo. mapper ;
import com. example. demo. model. SysUser ;
import com. example. demo. model. page. BasePageReq ;
import org. apache. ibatis. annotations. Mapper ;
import org. apache. ibatis. annotations. Param ;
import java. util. List ;
@Mapper
public interface UserMapper {
List < SysUser > page ( @Param ( value = "pageReq" ) BasePageReq pageReq) ;
}
<?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.example.demo.mapper.UserMapper" >
< select id = " page" resultType = " com.example.demo.model.SysUser" >
< bind name = " startIndex" value = " (pageReq.pageNum-1)*pageReq.pageSize" />
SELECT
ID AS id,
NAME AS name,
AGE AS age
FROM SYS_USER
ORDER BY ID ASC
LIMIT #{startIndex}, #{pageReq.pageSize}
</ select>
</ mapper>
mybatis :
mapper-locations : classpath: mapper/*.xml
type-aliases-package : com.example.demo.model
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
< dependency>
< groupId> org.mybatis.spring.boot</ groupId>
< artifactId> mybatis-spring-boot-starter</ artifactId>
< version> 2.3.0</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.15</ version>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.24</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> com.google.guava</ groupId>
< artifactId> guava</ artifactId>
< version> 30.1-jre</ version>
</ dependency>
2. Mybatis Plus
2.1. 代码实现
package com. example. demo ;
import org. mybatis. spring. annotation. MapperScan ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ;
@MapperScan ( value = "com.example.demo.mapper" )
@SpringBootApplication
public class DemoApplication {
public static void main ( String [ ] args) {
SpringApplication . run ( DemoApplication . class , args) ;
}
}
import com. baomidou. mybatisplus. extension. plugins. pagination. Page ;
Page < SysUser > list = userMapper. page ( new Page < > ( pageReq. getPageNum ( ) , pageReq. getPageSize ( ) ) ) ;
package com. example. demo. mapper ;
import com. baomidou. mybatisplus. core. metadata. IPage ;
import com. baomidou. mybatisplus. extension. plugins. pagination. Page ;
import com. example. demo. model. SysUser ;
import org. apache. ibatis. annotations. Mapper ;
import org. apache. ibatis. annotations. Param ;
import java. util. List ;
@Mapper
public interface UserMapper {
Page < SysUser > page ( @Param ( value = "pageReq" ) IPage < SysUser > pageReq) ;
}
< ? 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.example.demo.mapper.UserMapper" >
< select id= "page" resultType= "com.example.demo.model.SysUser" >
SELECT ID AS id, NAME AS name, AGE AS age
FROM SYS_USER
ORDER BY ID ASC
< / select>
< / mapper>
mybatis-plus :
mapper-locations : classpath*:mapper/*.xml
type-aliases-package : com.example.demo.model
configuration :
log-impl : org.apache.ibatis.logging.stdout.StdOutImpl
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
< dependency>
< groupId> com.baomidou</ groupId>
< artifactId> mybatis-plus-boot-starter</ artifactId>
< version> 3.5.1</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.15</ version>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.24</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> com.google.guava</ groupId>
< artifactId> guava</ artifactId>
< version> 30.1-jre</ version>
</ dependency>
2.2. 特别注意
Mybatis Plus
分页功能中使用了 CCJSqlParser
,其中 CCJSqlParser#Statement
在处理 复杂 SQL
时,存在 性能问题
3. PageHelper
3.1. 代码实现
package com. example. demo ;
import org. mybatis. spring. annotation. MapperScan ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ;
@MapperScan ( value = "com.example.demo.mapper" )
@SpringBootApplication
public class DemoApplication {
public static void main ( String [ ] args) {
SpringApplication . run ( DemoApplication . class , args) ;
}
}
import com. github. pagehelper. Page ;
import com. github. pagehelper. PageHelper ;
Page < SysUser > list = PageHelper . startPage ( pageReq. getPageNum ( ) , pageReq. getPageSize ( ) ) . doSelectPage ( ( ) -> userMapper. page ( ) ) ;
package com. example. demo. mapper ;
import com. example. demo. model. SysUser ;
import org. apache. ibatis. annotations. Mapper ;
import org. apache. ibatis. annotations. Param ;
import java. util. List ;
@Mapper
public interface UserMapper {
List < SysUser > page ( ) ;
}
<?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.example.demo.mapper.UserMapper" >
< select id = " page" resultType = " com.example.demo.model.SysUser" >
SELECT ID AS id, NAME AS name, AGE AS age
FROM SYS_USER
ORDER BY ID ASC
</ select>
</ mapper>
mybatis-plus :
mapper-locations : classpath*:mapper/*.xml
type-aliases-package : com.example.demo.model
configuration :
log-impl : org.apache.ibatis.logging.stdout.StdOutImpl
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
< dependency>
< groupId> com.baomidou</ groupId>
< artifactId> mybatis-plus-boot-starter</ artifactId>
< version> 3.5.1</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.15</ version>
</ dependency>
< dependency>
< groupId> com.github.pagehelper</ groupId>
< artifactId> pagehelper</ artifactId>
< version> 5.0.0</ version>
</ dependency>
< dependency>
< groupId> com.github.jsqlparser</ groupId>
< artifactId> jsqlparser</ artifactId>
< version> 4.3</ version>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.24</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> com.google.guava</ groupId>
< artifactId> guava</ artifactId>
< version> 30.1-jre</ version>
</ dependency>
3.2. 特别注意
PageHelper
分页功能中使用了 CCJSqlParser
,其中 CCJSqlParser#Statement
在处理 复杂 SQL
时,存在 性能问题
参考资料
Mybatis PageHelper编译SQL引发的一次性能问题.18286262