mybatis分页功能


/**
 * 
 */
package com.hongjia.mis.oracle.database.mybatis.pojo;

import java.util.List;  

import org.mybatis.generator.api.CommentGenerator;  
import org.mybatis.generator.api.IntrospectedTable;  
import org.mybatis.generator.api.PluginAdapter;  
import org.mybatis.generator.api.ShellRunner;  
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.JavaVisibility;  
import org.mybatis.generator.api.dom.java.Method;  
import org.mybatis.generator.api.dom.java.Parameter;  
import org.mybatis.generator.api.dom.java.PrimitiveTypeWrapper;  
import org.mybatis.generator.api.dom.java.TopLevelClass;  
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Element;
import org.mybatis.generator.api.dom.xml.TextElement;  
import org.mybatis.generator.api.dom.xml.XmlElement;

import com.alibaba.fastjson.JSON; 

/**
* @author owenhuang
* @description classDescription
* @version 创建时间:2017年9月14日 上午11:28:19
* 
* <plugin type="com.hongjia.mis.oracle.database.mybatis.pojo.PaginationPlugin" />
* 
*/
public class PaginationPlugin extends PluginAdapter {
	
	@Override
	public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,IntrospectedTable introspectedTable) {

		addLimit(topLevelClass,introspectedTable,"limitStart");
		addLimit(topLevelClass,introspectedTable,"limitEnd");
		return super.modelExampleClassGenerated(topLevelClass,introspectedTable);
	}
	
	

	@Override
	public boolean sqlMapBaseColumnListElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
		
		System.out.println("---------------"+JSON.toJSONString(element));
		
		Element elementRownum = new Element() {
			
			@Override
			public String getFormattedContent(int arg0) {
				return " , ROWNUM as mis_rownum ";
			}
		}; 
		
		element.addElement(elementRownum);
		return super.sqlMapBaseColumnListElementGenerated(element, introspectedTable);
	}



	@Override
	public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element,
			IntrospectedTable introspectedTable) {
		
		List<Element> elementLists = element.getElements();
//		for (Element ele : elementLists) {
//			System.out.println(">>00>>"+JSON.toJSONString(ele.getFormattedContent(0)));
//		}
		Element ele01 = new Element() {
			@Override
			public String getFormattedContent(int arg0) {
				StringBuilder sb = new StringBuilder();
				sb.append(" select ");
				sb.append(" <include refid=\"Base_Column_List\" />");
				sb.append(" from ( ");
				sb.append(" select ");
				return sb.toString();
			}
		};
		
		element.getElements().remove(0);
		element.getElements().add(0,ele01);
		
		Element eleLast = new Element() {
			@Override
			public String getFormattedContent(int arg0) {
				StringBuilder sb = new StringBuilder();
				sb.append("  ) ");
//				sb.append(" where mis_rownum between 1 and 10  ");
				return sb.toString();
			}
		};
		
		element.getElements().add(eleLast);
		
//		for (Element ele : elementLists) {
//			System.out.println(">>01>>"+JSON.toJSONString(ele.getFormattedContent(0)));
//		}
//		
//		System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>");
//		System.out.println(JSON.toJSONString(element));
//		System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<");
		
		XmlElement isNotNullElement= new XmlElement("if");
		isNotNullElement.addAttribute(new Attribute("test","limitStart != null and limitStart >=1 "));//$NON-NLS-1$ //$NON-NLS-2$
		isNotNullElement.addElement(new TextElement(" where mis_rownum between  ${limitStart} and ${limitEnd}"));
		
		element.addElement(isNotNullElement);
		
		return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,introspectedTable);
	}
	 
	private void addLimit(TopLevelClass topLevelClass, IntrospectedTable introspectedTable, String name){

         CommentGenerator commentGenerator =context.getCommentGenerator();
         Field field= new Field();
         field.setVisibility(JavaVisibility.PROTECTED);
         field.setType(FullyQualifiedJavaType.getIntInstance());
         field.setName(name);
         field.setInitializationString("0");
         commentGenerator.addFieldComment(field,introspectedTable);
         topLevelClass.addField(field);
         char c =name.charAt(0);
         String camel= Character.toUpperCase(c) +name.substring(1);
         Method method= new Method();
         method.setVisibility(JavaVisibility.PUBLIC);
         method.setName("set" +camel);
         method.addParameter(new Parameter(FullyQualifiedJavaType.getIntInstance(),name));
         method.addBodyLine("this." +name+ "=" +name+ ";");
         commentGenerator.addGeneralMethodComment(method,introspectedTable);
         topLevelClass.addMethod(method);
         method= new Method();
         method.setVisibility(JavaVisibility.PUBLIC);
         method.setReturnType(FullyQualifiedJavaType.getIntInstance());
         method.setName("get" +camel);
         method.addBodyLine("return " +name+ ";");
         commentGenerator.addGeneralMethodComment(method,introspectedTable);
         topLevelClass.addMethod(method);

	  }

	  /**
	   * This plugin is always valid -no properties are required
	   */
	  public boolean validate(List<String> warnings) {
	         return true;
	  }
    
      public static void generate() {
    	  String config= PaginationPlugin.class.getClassLoader().getResource("generatorConfig.xml").getFile();
    	  String[] arg= { "-configfile", config, "-overwrite"};
    	  ShellRunner.main(arg);
      }
      
      public static void main(String[] args) {
    	  generate();
      }
}



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- classPathEntry:数据库的JDBC驱动的jar包地址--> 
    <classPathEntry location="D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\lib\ojdbc7.jar" />
<context id="MysqlTables" targetRuntime="MyBatis3">

<plugin type="com.hongjia.mis.oracle.database.mybatis.pojo.PaginationPlugin" />

<!-- 注释 -->  
<commentGenerator>
<property name="suppressAllComments" value="true"/> <!-- 是否取消注释 --> 
<property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->  
</commentGenerator>
<!-- JDBC连接 -->  
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" 
connectionURL="jdbc:oracle:thin:@10.1.2.101:1521:misdev"
userId="ecology"
password="ecology">
</jdbcConnection>
<!-- 类型转换 -->  
<javaTypeResolver >
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->  
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成实体类地址 -->    
<javaModelGenerator targetPackage="com.hongjia.mis.oracle.database.mybatis.pojo" targetProject="D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\src\main\java">
<property name="enableSubPackages" value="true" /> <!-- 是否在当前路径下新加一层-->
<property name="trimStrings" value="true" /> <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
</javaModelGenerator>
<!-- 生成MAPXML文件 -->
<sqlMapGenerator targetPackage="sqlmap"  targetProject="D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\src\main\resources">
<property name="enableSubPackages" value="true" /> <!-- 是否在当前路径下新加一层-->
</sqlMapGenerator>
<!-- 生成DAO -->      
<javaClientGenerator type="XMLMAPPER" targetPackage="com.hongjia.mis.oracle.database.mybatis.dao"  targetProject="D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\src\main\java">
<property name="enableSubPackages" value="true" /> <!-- 是否在当前路径下新加一层-->
</javaClientGenerator>
<!-- 配置表信息 
java -jar D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\lib\mybatis-generator-core-1.3.2.jar -configfile D:\SVN\mis-20170829\realease_02\hongjia-mis-webservice-pojo\src\main\resources\generatorConfig.xml -overwrite
-->

<table tableName="formtable_main_198" enableCountByExample="true"  enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" ></table>


<!-- 
<table tableName="zdy_bankpaymentjob_t" enableCountByExample="true"  enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" ></table>

<table tableName="workflow_base" enableCountByExample="true"  enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" ></table>
<table tableName="formtable_main_198" enableCountByExample="true"  enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" ></table>
 -->

</context>
</generatorConfiguration>



好的,以下是一个简单的示例: 1. 首先,需要在pom.xml文件中添加相关依赖: ```xml <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Starter JDBC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MySQL Connector Java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- MyBatis Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> ``` 2. 配置数据源和MyBatis: ```properties # 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver # MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.configuration.map-underscore-to-camel-case=true ``` 3. 创建实体类和Mapper接口: ```java public class User { private Long id; private String name; private Integer age; // 省略getter和setter方法 } @Mapper public interface UserMapper { List<User> selectAll(); } ``` 4. 创建Mapper XML文件: ```xml <?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"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap> <select id="selectAll" resultMap="BaseResultMap"> SELECT * FROM user </select> </mapper> ``` 5. 创建分页查询的Service和Controller: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public PageInfo<User> findAll(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.selectAll(); return new PageInfo<>(userList); } } @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/list") public PageInfo<User> findAll(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { return userService.findAll(pageNum, pageSize); } } ``` 6. 启动应用程序并测试分页查询接口。访问 http://localhost:8080/user/list 即可查看分页查询结果。 以上就是一个简单的Spring Boot + MyBatis分页查询的示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值