mybatis generator生成带有分页的Mybatis代码

MyBatis开发,最让人开心的就是可以随意写SQL,这样有多好的性能的SQL都可以进行调优。

但是MyBatis的优点也是它的缺点,不论什么项目都需要编写SQL,令人头疼的要命,一般业务(例如单表操作)的简单查询、修改、删除、插入,都需要自己手工去编写SQL。

还好有第三方的软件给我解决这些事情,可以像使用Hibernate一样使用MyBatis,当需要进行特殊定制的再进行修改。

1.      本文档主要描述

1、表格; 2、视图;3、存储过程;4、自定义的MyBatis

1.1.            表格

com.epublic.cwa.dao.table.entity

com.epublic.cwa.dao.table.mapper

1.2.            视图

com.epublic.cwa.dao.view.entity

com.epublic.cwa.dao.view.mapper

1.3.            存储过程

com.epublic.cwa.dao.procedure.entity

com.epublic.cwa.dao.procedure.mapper

1.4.            自定义MyBatis

com.epublic.cwa.dao.custom.entity

com.epublic.cwa.dao.custom.mapper

2.      安装插件

为了快速进行开发,少做重复性劳动工作,必须使用工具。

经过Google、Bing等工具搜索与对比,选定工具:

在线文档,参考

http://ibatis.apache.org/docs/tools/ibator/

由于ibatis转移为mybatis,所以参考mybatis 最新文档:

http://code.google.com/p/mybatis/wiki/Downloads?tm=2

下载的MyBatis Generator Tool中有文档说明

http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator

2.1.            插件下载地址

http://yunpan.cn/cJaVdf3Fszf5a  访问密码 6479

3.      扩展自定义排序

3.1.            引入项目Jar包

一个是数据库,一个是我们将要扩展的jar

org.mybatis.generator.core_1.3.1.201101032122.jar

mysql-connector-java-5.1.13.jar

3.2.            编写代码

将plugin的生命周期和怎么扩展,

http://ibatis.apache.org/docs/tools/ibator/reference/pluggingIn.html

生命周期和怎么扩展都已经交代明了,接下来就是动手实践了

packagecom.epublic.xzk.db.mybatis.plugin;

import java.util.List;

importorg.mybatis.generator.api.CommentGenerator;

importorg.mybatis.generator.api.IntrospectedTable;

importorg.mybatis.generator.api.PluginAdapter;

importorg.mybatis.generator.api.ShellRunner;

importorg.mybatis.generator.api.dom.java.Field;

importorg.mybatis.generator.api.dom.java.FullyQualifiedJavaType;

importorg.mybatis.generator.api.dom.java.JavaVisibility;

importorg.mybatis.generator.api.dom.java.Method;

importorg.mybatis.generator.api.dom.java.Parameter;

importorg.mybatis.generator.api.dom.java.TopLevelClass;

importorg.mybatis.generator.api.dom.xml.Attribute;

importorg.mybatis.generator.api.dom.xml.TextElement;

importorg.mybatis.generator.api.dom.xml.XmlElement;

/**

* <pre>

* add paginationusing mysql limit.2

* This class isonly used in ibator code generator.

*[generatorConfiguration]

*     [context id="context1"]

*            [plugintype="com.epublic.xzk.db.mybatis.plugin.PaginationPlugin" /]

*

* </pre>

*/

public
class
PaginationPlugin extends PluginAdapter {

@Override

publicbooleanmodelExampleClassGenerated(TopLevelClass
topLevelClass,IntrospectedTable
introspectedTable) {

// addfield, getter, setter for limit clause

addLimit(topLevelClass,introspectedTable,
"limitStart");

addLimit(topLevelClass,introspectedTable,
"limitEnd");

returnsuper.modelExampleClassGenerated(topLevelClass,
introspectedTable);

}

@Override

publicbooleansqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement
element,

IntrospectedTable introspectedTable) {

// LIMIT5,10; // 检索记录行 6-15

XmlElement isNotNullElement=
new
XmlElement("if");
//$NON-NLS-1$

isNotNullElement.addAttribute(new Attribute("test","limitStart != null and limitStart >=0"));
//$NON-NLS-1$ //$NON-NLS-2$

isNotNullElement.addElement(new TextElement("limit${limitStart} , ${limitEnd}"));

element.addElement(isNotNullElement);

// LIMIT 5;//检索前 5
个记录行

returnsuper.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
introspectedTable);

}

privatevoid 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("-1");

commentGenerator.addFieldComment(field,
introspectedTable);

topLevelClass.addField(field);

charc =
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

*/

publicboolean validate(List<String>
warnings) {

returntrue;

}

publicstatic
void
generate() {

String config= PaginationPlugin.class.getClassLoader().getResource("mybatisConfig.xml").getFile();

String[] arg= {
"-configfile", config,
"-overwrite"};

ShellRunner.main(arg);

}

publicstatic
void
main(String[]
args) {

generate();

}

}

4.      生成脚本的样例

4.1.            表

建立文件“generatorConfig-java-table.xml”

<?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPEgeneratorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >

<generatorConfiguration >

<context id="context1" >

<plugin type="com.epublic.xzk.db.mybatis.plugin.PaginationPlugin" />

<commentGenerator>

<!-- 避免生成注解

<propertyname="suppressDate" value="true" />

-->

<property name="suppressAllComments" value="true" />

</commentGenerator>

<jdbcConnection driverClass="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://192.168.0.128:3306/faceserver_xzk"

userId="root"

password="admin"

/>

<!-- Model文件保存位置 -->

<javaModelGenerator targetPackage="com.epublic.cwa.dao.table.entity" targetProject="01.cwa-web\src\main\java-dao">

<property name="trimStrings" value="true" />

</javaModelGenerator>

<!-- 生成的mapper文件-->

<sqlMapGenerator targetPackage="com.epublic.cwa.dao.table.mapper" targetProject="01.cwa-web\src\main\java-dao"
>

</sqlMapGenerator>

<!-- 生成的查询条件的类 -->

<javaClientGenerator type="XMLMAPPER" targetPackage="com.epublic.cwa.dao.table.mapper" targetProject="01.cwa-web\src\main\java-dao">

</javaClientGenerator>

<!-- 该表作为字典表参考数据,不再使用

<tableschema="" tableName="CWA_SYS_ROLES" ></table>

<tableschema="" tableName="CWA_SYS_USER_ROLE" ></table>

-->

<table schema=""tableName="cwa_sys_functions" ></table>

<table schema=""tableName="CWA_SYS_ROLE_FUNCTION" ></table>

<table schema=""tableName="cwa_sys_users" ></table>

<table schema=""tableName="cwa_sys_model_view_dic" ></table>

<table schema=""tableName="cwa_dept" ></table>

<table schema=""tableName="CWA_USER" ></table>

<table schema=""tableName="cwa_sys_log" ></table>

</context>

</generatorConfiguration>

生成的代码如下:

4.2.            视图

建立文件“generatorConfig-java-view.xml”

<?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPEgeneratorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis GeneratorConfiguration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >

<generatorConfiguration >

<context id="MySQL_Context" >

<plugin type="com.epublic.xzk.db.mybatis.plugin.PaginationPlugin" />

<commentGenerator>

<!-- 避免生成注解

<propertyname="suppressDate" value="true" />

-->

<property name="suppressAllComments" value="true" />

</commentGenerator>

<jdbcConnection driverClass="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://192.168.0.128:3306/faceserver_xzk"

userId="root"

password="admin"

/>

<javaTypeResolver >

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

<!-- Model文件保存位置 -->

<javaModelGenerator targetPackage="com.epublic.cwa.dao.view.entity" targetProject="01.cwa-web\src\main\java-dao">

<property name="trimStrings" value="true" />

</javaModelGenerator>

<!-- 生成的mapper文件-->

<sqlMapGenerator targetPackage="com.epublic.cwa.dao.view.mapper" targetProject="01.cwa-web\src\main\java-dao">

</sqlMapGenerator>

<!-- 生成的查询条件的类 -->

<javaClientGenerator type="XMLMAPPER" targetPackage="com.epublic.cwa.dao.view.mapper" targetProject="01.cwa-web\src\main\java-dao">

</javaClientGenerator>

<table schema=""tableName="v_cwa_sys_users"

enableCountByExample="true"

enableSelectByExample="true"

enableInsert="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

selectByExampleQueryId="true"></table>

<table schema=""tableName="v_cwa_device"

enableCountByExample="true"

enableSelectByExample="true"

enableInsert="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

selectByExampleQueryId="true"></table>

</context>

</generatorConfiguration>

生成脚本如下:

4.3.            自定义

自己随便写了,只要符合MyBatis就可以了。

4.4.            存储过程

自己随便写了,只要符合MyBatis就可以了。

5.      调用示例

5.1.            范例代码

/**

* 查询分页

*

* @param formDto

*            查询表单

* @param orderByDto

* @param pageDto

* @return

*/

public PageModel<VCwaDevice>queryByPage(MachineDeviceQueryDto
formDto, CommonQueryByOrderByDto
orderByDto,

PageDtopageDto) {

VCwaDeviceExampleexample = new VCwaDeviceExample();

// Step02.查询总数

int
totalRecord = vCwaDeviceMapper.countByExample(example);

// Step04.增加排序对象

String queryOrderBy =
orderByDto.getQueryOrderBy();

if (StringUtils.isEmpty(queryOrderBy)==
false) {

example.setOrderByClause(queryOrderBy);

} else {

example.setOrderByClause("id desc");

}

// Step03.计算分页对象

int
pageSize = pageDto.getPageSize();

int
curPage = pageDto.getCurPage();

PageModel<VCwaDevice>borrowList =
new
PageModel<VCwaDevice>(pageSize,
curPage, totalRecord);

int
startRow = borrowList.getStartRow();

example. setLimitStart(startRow);

example.setLimitEnd(pageSize);

// Step05.查询数据库,获取分页数据

List<VCwaDevice>dataList =
vCwaDeviceMapper.selectByExample(example);

borrowList.setDataList(dataList);

return
borrowList;

}

5.2.            DTO对象

5.2.1. PageDto

packagecom.epublic.cwa.common.web.page;

import java.util.ArrayList;

import java.util.List;

/**

* 分页对象

*

* @author Ken.xu

* @version 2015年2月8日下午7:03:21

*/

public
class
PageDto {

// 每页显示的页码个数

privateint
SHOW_PAGE_COUNT= 5;

privateint
curPage= 0;//
当前页码

privateint
pageSize= 15;//
每页大小

// 以下两个参数不初始化设置

privateint
totalRows= 0;//
总记录数

privateint
pageNum= 0;//
总页数

publicList<Integer> getShowPageNumList() {

List<Integer> showPageNumList =
new
ArrayList<Integer>();

intpageNumBegin = 1,
pageNumEnd= pageNum;

if(pageNum <=
SHOW_PAGE_COUNT){//
总页码小于5个

pageNumEnd=
pageNum;

} else{

// 获取中间的位置

intpageCenterNum =
SHOW_PAGE_COUNT/ 2;

if(curPage -
pageCenterNum> 0) {//
超过第三个,那么左侧-2为中间即可

pageNumBegin=
curPage - pageCenterNum;

} else{

pageNumBegin= 0;

}

pageNumEnd=
pageNumBegin + SHOW_PAGE_COUNT;

}

for(int
pageNum= pageNumBegin;
pageNum<= pageNumEnd;
pageNum++){

showPageNumList.add(pageNum);

}

returnshowPageNumList;

}

publicPageDto() {

}

/**

* 默认构造器,初始化成员变量

*

* @param totalRows

*           总记录数

* @param curPage

*           当前页码

* @param pageSize

*           每页大小

* @param items

*           存放数据

*/

publicPageDto(int
totalRows,int
curPage,int
pageSize){

this.setPage(totalRows,
curPage,pageSize);

}

/**

* 默认构造器,初始化成员变量

*

* @param totalRows

*           总记录数

* @param curPage

*           当前页码

* @param pageSize

*           每页大小

*/

publicvoid setPage(int
totalRows,int
curPage,int
pageSize){

this.pageSize =
pageSize;

this.totalRows =
totalRows;

this.curPage =
curPage;

// 计算总页码

this.pageNum = (int)Math.ceil((double)
totalRows / pageSize);

}

publicint getPageSize() {

returnpageSize;

}

publicvoid setPageSize(int
pageSize){

this.pageSize =
pageSize;

}

publicint getTotalRows() {

returntotalRows;

}

publicvoid setTotalRows(int
totalrows){

this.totalRows =
totalrows;

}

publicint getPageNum() {

returnpageNum;

}

publicvoid setPageNum(int
pageNum){

this.pageNum =
pageNum;

}

publicint getCurPage() {

returncurPage;

}

publicvoid setCurPage(int
curPage){

this.curPage =
curPage;

}

}

 

5.2.2. CommonQueryByOrderByDto

packagecom.epublic.cwa.common.web.dto;

/**

* 查询分页

*

* @author Ken.xu

* @version 2015年2月9日上午8:54:28

*/

public
class
CommonQueryByOrderByDto {

/**

* 排序的中文描述

*/

privateString
queryOrderByChsText;

/**

* 排序的字符串(SQL脚本的OrderBy一部分)

*/

privateString
queryOrderBy;

publicString getQueryOrderByChsText() {

returnqueryOrderByChsText;

}

publicvoid setQueryOrderByChsText(String
queryOrderByChsText) {

this.queryOrderByChsText =
queryOrderByChsText;

}

publicString getQueryOrderBy() {

returnqueryOrderBy;

}

publicvoid setQueryOrderBy(String
queryOrderBy) {

this.queryOrderBy =
queryOrderBy;

}

}

时间: 2024-08-25 03:57:45

mybatis generator生成带有分页的Mybatis代码的相关文章

mybatis generator生成代码工具的使用

mybatis generator生成代码工具的使用, 附demo 使用Hibernate时, 可以很方便的生成model,dao,和映射配置文件.在mybatis里, 也有生成器, 即mybatis generator, 简称MBG. 下面为大家介绍一下MBG的使用. 下载mybatis-generator-core-1.3.1-bundle.zip之后, 解压得到mybatis-generator-core-1.3.1.jar, 即生成器的jar包, 将mybatis-3.0.6.jar和m

MyBatis Generator生成DAO——序列化

MyBatis Generator生成DAO 的时候,生成的类都是没有序列化的. 还以为要手工加入(開始是手工加入的),今天遇到分页的问题,才发现生成的时候能够加入插件. 既然分页能够有插件.序列化是不是也有呢. 果然SerializablePlugin,已经给我们提供好了. <plugin type="org.mybatis.generator.plugins.SerializablePlugin" /> 立即高端大气了起来.每一个model对象都乖乖的带上了Serial

MyBatis Generator实现MySQL分页插件

MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求.但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能.本文介绍如何让MyBatis Generator生成的代码具有分页功能. MyBatis Generator结合Maven的配置和使用 在实现分页之前,首先简单介绍MyBatis Generator如何使用. MyBatis Generator配置文件 MyBatis Generator通常会有一个xml配置文件,用来指

去掉Mybatis Generator生成的一堆Example类

上篇讲了如何使用Mybatis Generator生成代码,但是再生成过程中,往往出现一大堆的Example类,而这些Example中的很多方法我们是不需要用到的,因此在生成之前我们可以添加如下代码: <table schema="general" tableName="tb_table_name" domainObjectName="EntityName" enableCountByExample="false" en

mybatis generator 生成中文注释

mybatis generator默认生成 的注释太奇葩了,完全不能拿到生产去用,不过幸亏提供了接口可以自己扩展.长话短说,要生成如下的domain, package com.demo.domain; /** test_mybatis */ public class TestMybatis { /** 主键 */ private Integer id; /** 字段说明 */ private String name; public Integer getId() { return id; } p

Maven下用MyBatis Generator生成文件

使用Maven命令用MyBatis Generator生成MyBatis的文件步骤如下: 1.在mop文件内添加plugin <build> <finalName>KenShrio</finalName> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <

mybatis generator生成连接mysql与sqlserver的区别

mybatis generator生成连接mysql与sqlserver所在的区别在于驱动和数据库URL不同 mybatis generator连接mysql的配置文件是: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.

mybatis Generator生成代码及使用方式

作者:偶尔记一下 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置. 本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息. 注:本文后面提到的MBG全部指代MyBatis Generator. MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀 运行MyBatis Generator 有4种运行MBG的方法,具体请看文档 运行 My

Mybatis入门实例(三)——使用MyBatis Generator生成DAO(转载http://qiuqiu0034.iteye.com/blog/1163026)

接上回 http://qiuqiu0034.iteye.com/blog/1162952 虽然MyBatis很方便,但是想要手写全部的mapper还是很累人的,好在MyBatis官方推出了自动化工具,可以根据数据库和定义好的配置直接生成DAO层及以下的全部代码,非常方便. 需要注意的是,虽然自动化工具需要一个配置文件,但是MyBatis的配置文件仍然不能少,自动化工具的配置文件用于对生成的代码的选项进行配置,MyBatis的配置文件才是运行时的主要配置文件. 这个工具叫做MyBatis_Gene