使用abel533大神的mybatis分页插件总结

今天使用了abel533大神的mybatis分页插件,遇到了写问题,特意在这里做个总结,方便以后查找。

首先该测试是在本人的ssm基础框架上实现的,有兴趣的可以先看看本人的博客置顶帖。高手就略过吧。

主要使用abel533的两个东西,一个是mapper,主要作用是单表的通用mapper;另一个是mybatis的分页插件pageHelper

ok,开始吧。

(一)集成

首先是jar包,此处我们使用maven管理jar包,引入下面两个jar包就可以了:

	<!-- 通用mapper -->
	<dependency>
	    <groupId>tk.mybatis</groupId>
	    <artifactId>mapper</artifactId>
	    <version>3.1.2</version>
	</dependency>
	<!-- pagehelper jar包 -->
	<dependency>
	    <groupId>com.github.pagehelper</groupId>
	    <artifactId>pagehelper</artifactId>
	    <version>4.0.0</version>
	</dependency>

然后是mybatis.xml的配置,主要是两个拦截器(更多属性配置请查看abel533大神的开发文档):

        <plugins>
	
	    <!-- com.github.pagehelper为PageHelper类所在包名 -->
	    <plugin interceptor="com.github.pagehelper.PageHelper">
	        <property name="dialect" value="mysql"/>
	    </plugin>
    
    	<!-- mapper插件放在最下面 -->
    	<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
    		<!--================================================-->
		    <!--可配置参数说明(一般无需修改)-->
		    <!--================================================-->
		    <!--UUID生成策略-->
		    <!--配置UUID生成策略需要使用OGNL表达式-->
		    <!--默认值32位长度:@java.util.UUID@randomUUID().toString().replace("-", "")-->
		    <!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->
		    <!--主键自增回写方法,默认值MYSQL,详细说明请看文档-->
		    <property name="IDENTITY" value="mysql"/>
		    <!--序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle-->
		    <!--可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName,PropertyName-->
		    <property name="seqFormat" value="{0}.nextval"/>
		    <!--主键自增回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER)-->
		    <!--<property name="ORDER" value="AFTER"/>-->
		    <!--通用Mapper接口,多个通用接口用逗号隔开-->
		    <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
    	</plugin>
    
	</plugins>

两步就可以集成mapper和pageHelper插件。

(二)具体使用

1.首先是mapper,需要继承通用的Mapper<T>,必须指定泛型<T>,下面是例子:

public interface UserInfoMapper extends Mapper<UserInfo> {
  //其他必须手写的接口...

}

2.泛型(实体类)<T>的类型必须符合要求(此处引用,gen更多请查阅文档http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md

实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:

    表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。

    表名可以使用@Table(name = "tableName")进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.

    字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.

    可以使用@Column(name = "fieldName")指定不符合第3条规则的字段名

    使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用.

    建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.

    默认情况下,实体类中如果不存在包含@Id注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).

    实体类可以继承使用,可以参考测试代码中的tk.mybatis.mapper.model.UserLogin2类.

    由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型.

3.将继承的Mapper接口添加到mybatis配置中,有两种写法,此处采用spring的方式:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.isea533.mybatis.mapper"/>
</bean>

4.就是在代码中使用了,此处,我将粘贴上mapper,service和controller的示例代码:

(1)首先是controller:

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.aodong.mybatisTest.model.Student;
import com.aodong.mybatisTest.service.PageTestService;

@Controller
@RequestMapping("/pageHelper")
public class PageHelperController {
	
	@Autowired
	private PageTestService pageTestService;
	
	@RequestMapping(value="/requestTest", method=RequestMethod.GET)
	@ResponseBody
	public List<Student> requestTest(
			@RequestParam(value="pageNum", required=false, defaultValue="1")int pageNum,
			@RequestParam(value="pageSize", required=false, defaultValue="10")int pageSize
			){
		return pageTestService.selectPage(pageNum, pageSize);
	}
}

(2)然后是service:

1.BaseService

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.pagehelper.PageHelper;
import tk.mybatis.mapper.common.Mapper;

public abstract class BaseService<T> {
	@Autowired
	protected Mapper<T> mapper;
	
    public int save(T entity){
        return mapper.insert(entity);
    }

    public int delete(T entity){
        return mapper.deleteByPrimaryKey(entity);
    }

    /**
     * 单表分页查询
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    public List<T> selectPage(int pageNum,int pageSize){
        PageHelper.startPage(pageNum, pageSize);
        List<T> list = mapper.select(null);
        System.out.println(list.size());
        //Spring4支持泛型注入
        return list;
    }
}

2.service接口

import java.util.List;
import com.aodong.mybatisTest.model.Student;

public interface PageTestService {
	public List<Student> selectPage(int pageNum, int pageSize);
}

3.serviceImpl实现类

import org.springframework.stereotype.Service;
import com.aodong.mybatisTest.model.Student;
import com.aodong.mybatisTest.service.BaseService;
import com.aodong.mybatisTest.service.PageTestService;

@Service("pageTestService")
public class PageTestServiceImpl extends BaseService<Student> implements PageTestService {

}
(3)然后是mapper

import tk.mybatis.mapper.common.Mapper;
import com.aodong.mybatisTest.model.Student;

public interface PageTestMapper extends Mapper<Student> {
}

(4)最后是model,一般要求最少有个id注解

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

public class Student implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
     * 主键
     */
    @Id
    @Column(name = "Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	private Integer age;
	private String name;
	private String nicename;
	
	public Student() {
		
	}
	
	public Student(long id, Integer age, String name, String nicename) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
		this.nicename = nicename;
	}

	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	
	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNicename() {
		return nicename;
	}
	public void setNicename(String nicename) {
		this.nicename = nicename;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", age=" + age + ", name=" + name
				+ ", niceName=" + nicename + "]";
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值