返回顶部
扩大
缩小

Heaton

mybatis ----- baseMapper、pagehelper、generator整合(springboot)

mybatis ----- baseMapper、pagehelper、generator整合(springboot)

加入引用




org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1



tk.mybatis
mapper-spring-boot-starter
1.3.1



com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3


加入build 插件



org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2

${basedir}/src/main/resources/generator/generatorConfig.xml
true
true



mysql
mysql-connector-java
${mysql.version}


tk.mybatis
mapper
${mapper.version}





>将逆向工程文件放入/src/main/resources/下,如图 ![](https://images2018.cnblogs.com/blog/1235870/201805/1235870-20180517110958251-988363317.png)

config.properties文件

数据库配置

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test #数据库名字,账号,密码
jdbc.user=root
jdbc.password=root
#c3p0
jdbc.maxPoolSize=50
jdbc.minPoolSize=10
jdbc.maxStatements=100
jdbc.testConnection=true
# 通用Mapper配置
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=com.tzy.test.lib.MyBaseMapper #生成mapper继承哪个mapper(因为tk.mapper有所有常用单表查询),路径对应


>而这个通用mapper一般放在lib下

package com.tzy.test.lib;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface MyBaseMapper extends Mapper, MySqlMapper {
}


generatorConfig.xml 用于生成配置

















>然后通过插件启动就可以了,去自己设定的目录里面找找看吧 ![](https://images2018.cnblogs.com/blog/1235870/201805/1235870-20180517112254983-600322811.png)

对分页工具的封装

首先是Page.java

import java.io.Serializable;

public final class Page implements Serializable {

private int pageNum;
private int pageSize;

public int getPageNum() {
return pageNum;
}

public int getPageSize() {
return pageSize;
}

private Page() {
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + pageNum;
result = prime * result + pageSize;
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Page other = (Page) obj;
if (pageNum != other.pageNum) return false;
if (pageSize != other.pageSize) return false;
return true;
}

@Override
public String toString() {
return "Page [pageNum=" + pageNum + ", pageSize=" + pageSize + "]";
}

public static class PageBuilder {

private PageBuilder() {
}

public static final Page build(String pageNum, String pageSize) {
if (pageNum == null || !pageNum.matches("[1-9]\d")) return null;
if (pageSize == null || !pageSize.matches("[1-9]\d
")) pageSize = "10";
return build(new Integer(pageNum), new Integer(pageSize));
}

public static final Page build(Integer pageNum, Integer pageSize) {
if (pageNum == null || pageNum.intValue() == 0) return null;
if (pageSize == null || pageSize.intValue() < 1) pageSize = 10;
Page page = new Page();
page.pageNum = pageNum.intValue();
page.pageSize = pageSize.intValue();
return page;
}
}

}


>然后是sort.java

import java.io.Serializable;

public final class Sort implements Serializable {

private String orderBy;

public String getOrderBy() {
return orderBy;
}

private Sort() {
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((orderBy == null) ? 0 : orderBy.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Sort other = (Sort) obj;
if (orderBy == null) {
if (other.orderBy != null) return false;
} else if (!orderBy.equals(other.orderBy)) return false;
return true;
}

@Override
public String toString() {
return "Sort [orderBy=" + orderBy + "]";
}

public static class SortBuilder {

private SortBuilder() {
}

public static final Sort build(String sortBy, String sortType) {
return build(new String[]{sortBy}, new String[]{sortType});
}

public static final Sort build(String[] sortBys, String[] sortTypes) {
if (sortBys == null || sortBys.length == 0 || sortTypes == null || sortTypes.length != sortBys.length)
return null;
StringBuilder builder = new StringBuilder();
for (int i = 0, l = sortBys.length; i < l; i++) {
String sortBy = toUnderline(sortBys[i]);
String sortType = sortTypes[i];
if (sortBy == null || sortBy.trim().length() == 0) return null;
if (sortType == null || !sortType.equalsIgnoreCase("desc")) sortType = "asc";
if (i > 0) builder.append(",");
builder.append(sortBy).append(" ").append(sortType);
}
Sort sort = new Sort();
sort.orderBy = builder.toString();
return sort;
}

/**
* 驼峰转下划线
*
* @param str
* @return
*/
private static final String toUnderline(String str) {
if (str == null) return null;
StringBuilder builder = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
boolean nextUpperCase = true;
if (i < str.length() - 1) nextUpperCase = Character.isUpperCase(str.charAt(i + 1));

if (i >= 0 && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) if (i > 0) builder.append("_");
upperCase = true;
} else upperCase = false;
builder.append(Character.toLowerCase(c));
}
return builder.toString();
}
}
}


>其次是

import com.github.pagehelper.PageHelper;

public class PageSortUtil {
/**
* 执行分页和排序
*
* @param page
* @param sort
*/
public static void doPagingAndSorting(Page page, Sort sort) {
if (page != null) PageHelper.startPage(page.getPageNum(), page.getPageSize());
if (sort != null) PageHelper.orderBy(sort.getOrderBy());
}

/**
* 执行分页
*
* @param page
*/
public static void doPaging(Page page) {
doPagingAndSorting(page, null);
}

/**
* 执行分页
*
* @param pageNum
* @param pageSize
*/
public static void doPaging(Integer pageNum, Integer pageSize) {
Page page = Page.PageBuilder.build(pageNum, pageSize);
doPaging(page);
}

/**
* 执行分页
*
* @param pageNum
*/
public static void doPaging(Integer pageNum) {
doPaging(pageNum, null);
}

/**
* 执行排序
*
* @param sort
*/
public static void doSorting(Sort sort) {
doPagingAndSorting(null, sort);
}

/**
* 执行排序
*
* @param sortBys
* @param sortTypes
*/
public static void doSorting(String[] sortBys, String[] sortTypes) {
Sort sort = Sort.SortBuilder.build(sortBys, sortTypes);
doSorting(sort);
}

/**
* 执行排序
*
* @param sortBy
* @param sortType
*/
public static void doSorting(String sortBy, String sortType) {
doSorting(new String[]{sortBy}, new String[]{sortType});
}

/**
* 执行排序
*
* @param sortBy
*/
public static void doSorting(String sortBy) {
doSorting(sortBy, null);
}
}


>在封装一层使调用更加方便吧。

import java.io.Serializable;

/**
* @Created by Heaton on 2018/5/14.
* @describe 分页执行者
*/
public class PojoPageHandler implements Serializable {

/**
* @param
* @return
* @date 2018/5/14 11:31
* @describe 执行分页和排序
*/
public static void doPagingAndSorting(Object obj) {
try {
Class<?> clazz = obj.getClass();
String sort = (String) clazz.getMethod("getSort").invoke(obj);
String order = (String) clazz.getMethod("getOrder").invoke(obj);
Integer pageNum = (Integer) clazz.getMethod("getPageNum").invoke(obj);
Integer pageSize = (Integer) clazz.getMethod("getPageSize").invoke(obj);
Sort sortObj = Sort.SortBuilder.build(sort, order);
Page pageObj = Page.PageBuilder.build(pageNum, pageSize);
PageSortUtil.doPagingAndSorting(pageObj, sortObj);
} catch (Exception e) {
e.printStackTrace();
}
}
}


>好了,怎么调用呢?首先分页流程是,前台将传递4个参数给我们,当前页码,需要显示条数,按什么字段排序,按升序还是降序。 >这里创建一个公用的来接收这几个参数的类,下面用的swagger注解,不喜欢可以去掉。查询条件是用来做模糊查询的(这里可以不管),详情参考--动态mapper写法贴。 >注意,分页设置只对第一次查询的sql语句生效。

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@ApiModel(description = "公用查询对象")
public class CommonSelectVo {
@ApiModelProperty(value = "页码")
private Integer pageNum;
@ApiModelProperty(value = "每页条数")
private Integer pageSize;
@ApiModelProperty(value = "排序字段")
private String sort;
@ApiModelProperty(value = "排序方式")
private String order;
@ApiModelProperty(value = "查询条件")
private String queryCriteria;
}


>调用方法 ![](https://images2018.cnblogs.com/blog/1235870/201805/1235870-20180517113443828-611564085.png)

然后将查询出来的数据丢给Json.ok处理

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.longe.nuclear.exception.CommonErrorCode;
import com.longe.nuclear.exception.ErrorCode;
import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class JsonData {

private final static Integer CODE_SUCCESS = 200;
private final static String msgSuccess = "success";

public final static Integer CODE_FAILURE = -1;

private Integer code;
private String msg;
private T data;
private Long timestamp;

public JsonData(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
timestamp = System.currentTimeMillis();
}

public JsonData(Integer code, String msg) {
this.code = code;
this.msg = msg;
timestamp = System.currentTimeMillis();
}

public static JsonData ok(T data) {
return new JsonData<>(CODE_SUCCESS, msgSuccess, data);
}

public static JsonData ok(List data) {
if (data instanceof Page) {
Map<String, Object> map = new HashMap();

List list = new ArrayList();
for (T object : data) {
list.add(object);
}
map.put("list", list);
PageInfo info = new PageInfo(data);
map.put("total", info.getTotal());
map.put("pages", info.getPages());
map.put("size", info.getSize());
map.put("pageSize", info.getPageSize());
map.put("pageNum", info.getPageNum());
return new JsonData(CODE_SUCCESS, msgSuccess, map);
} else {
return new JsonData(CODE_SUCCESS, msgSuccess, data);
}
}

public static JsonData ok() {
return new JsonData(CODE_SUCCESS, msgSuccess);
}

public static JsonData error(ErrorCode errorCode) {
return new JsonData(errorCode.getCode(), errorCode.getErrorMsg());
}

public static JsonData error() {
return error(CommonErrorCode.INNER_ERROR);
}

public static JsonData error(Integer errorCode, String msg) {
return new JsonData(errorCode, msg);
}
}


>我们将集合传递给了json.OK(),然后判断他是否是Page类, ![](https://images2018.cnblogs.com/blog/1235870/201805/1235870-20180517113954187-886741345.png)

posted on 2018-05-17 10:56  咘雷扎克  阅读(272)  评论(0)    收藏  举报

导航