springboot集成tkbatis,并借助PageHelper进行分页
添加依赖
spring依赖
jdbc依赖
tkmybatis依赖
pagehelper依赖
pagehelper-autoconfigure依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
依赖中的pagehelper依赖相关的有3个, 不要掉哦
- pagehelper
- pagehelper-spring-boot-autoconfigure
- pagehelper-spring-boot-starter
结构图
配置相关
-
application.properties:
datasource.jdbc-url=jdbc:mysql://localhost:3306/common?characterEncoding=utf-8 datasource.driver-class-name=com.mysql.cj.jdbc.Driver datasource.username=root datasource.password=root spring.profiles.active=develop server.port=9090 /#控制台打印mybatis语句 logging.level.com.example.mybatisplus.demo=debug mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
-
配置数据源
-
配置datasource:
pprefix = "datasource"
在application.properties里找以datasource
开头的配置,然后spring自动创建datasource@Bean @ConfigurationProperties(prefix = "datasource") public DataSource dataSource(){ return DataSourceBuilder.create().build(); }
-
配置sqlSessionFactory
@Qualifier("datasource")
是指定名为 datasource 的bean, 也就是上面的datasource
方法, 默认以方法名为bean的名称(如果方法名为Datasource()
, bean的名称为 dataSource, 首字母变小写)@Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setVfs(SpringBootVFS.class); ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); //设置mapper.xml的位置 sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources("classpath:mapper/*.xml")); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); return sqlSessionFactory; }
-
配置mapper
@Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); //设置mapper接口的位置 mapperScannerConfigurer.setBasePackage("com.example.mybatisplus.demo.mapper.primary"); Properties properties = new Properties(); //配置的通用mapper, 集成tkbatis的多个接口,可以实现大多数增删改查方法 properties.setProperty("mappers", "com.example.mybatisplus.demo.mapper.core.CustomMapper"); mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer; }
-
业务处理层
-
UserService.java
定义一个简单的接口
public interface UserService { ResultPage<User> getUserByPage(int pageNo, int pageSize); }
-
UserServiceImpl.java
实现UserService接口
@Service public class UserServiceImpl implements UserService { @Autowired UserMapper userMapper; @Override public ResultPage<User> getUserByPage(int pageNo, int pageSize) { //分页的主要方法, pageNo: 第几页 pageSize: 每页条数 PageHelper.startPage(pageNo,pageSize); //创建condition Condition condition = new Condition(User.class); Example.Criteria criteria = condition.createCriteria(); //条件类似于: select * from User where name = 'wuwei' criteria.andEqualTo("name", "wuwei"); List<User> users = userMapper.selectByCondition(condition); PageInfo<User> pageInfo = new PageInfo(users); ResultPage<User> resultPage = new ResultPage(pageInfo.getList(),pageInfo.getPageNum(),pageInfo.getPageSize(),pageInfo.getPages()); return resultPage; } }
-
ResultPage.java
封装分页信息的类
package com.example.mybatisplus.demo.model; /** * @Author wuwei * @Date 2019/11/28 10:52 下午 */ public class ResultPage<T> { private T data; private int pageNo; private int pageSize; private int allPages; public ResultPage(T data, int pageNo, int pageSize, int allPages) { this.data = data; this.pageNo = pageNo; this.pageSize = pageSize; this.allPages = allPages; } public T getData() { return data; } public void setData(T data) { this.data = data; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getAllPages() { return allPages; } public void setAllPages(int allPages) { this.allPages = allPages; } }
-
CustomMapper接口
继承tkbatis的接口, 这些接口里面有通用方法, 我们可以不用写sql语句,
上文中,我们在 mapperScannerConfigurer 中配置了此CustomMapper
public interface CustomMapper<T> extends IdsMapper<T>, ConditionMapper<T>, SelectMapper<T>, Mapper<T> { }
-
UserMapper继承CustomMapper
@Repository public interface UserMapper extends CustomMapper<User> { }
###控制层controller
-
ResultResponse
作为一个响应接口返回值的类, 对接口返回进行封装
达到是接口返回值结构 统一 的目的
public class ResultResponse<T> { private T data; private int code; private String msg; public T getData() { return data; } public void setData(T data) { this.data = data; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
-
BaseController
作为controller的基类, 提供方法将接口数据统一封装成ResultResponse类型的数据
public class BaseController<T> { protected ResultResponse<T> handleResult(List<T> data){ return handleResult(data, 0, "OK"); } protected ResultResponse<T> handleResult(T data){ ResultResponse resultResponse = new ResultResponse(); resultResponse.setData(data); resultResponse.setMsg("OK"); resultResponse.setCode(0); return resultResponse; } private ResultResponse<T> handleResult(List<T> data, int code, String msg){ ResultResponse resultResponse = new ResultResponse(); resultResponse.setData(data); resultResponse.setCode(code); resultResponse.setMsg(msg); return resultResponse; } }
-
UserController
@RestController @RequestMapping("/start") public class UserController extends BaseController{ @Autowired UserMapper userMapper; @Autowired UserService userService; @RequestMapping("/mybatisplus") public ResultResponse<ResultPage<User>> getUSer(int pageNo, int pageSize){ return handleResult(userService.getUserByPage(pageNo,pageSize)); } }
-
User类
model
public class User { @Id private Long id; private String name; private Integer age; private String email; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
表结构
运行
ps: 如果需要完整代码, GitHub springboot+mybatis+pagehelper简单demo