用Mybatis generator可以自动生成table对应的javaBean和xml,mapper接口。由于表的结构会发生变化,而业务中生成的mapper并不能完全满足需求,因此要自己写sql xml, 不能写在mybatis 生成的文件中,不然下次就会被覆盖了。
解决办法:
1:建自己的Mapper.java接口,目录和mybatis生成的mapper.java相同。先不定义方法
2:见一个自己的mapper xml,和mybatis生成的mapper xml放在一个目录即可。 namespace写自己Mapper.java的全类名,然后写<select>,这里引用mybatis生成的mapper.xml中的Base_Column_List和BaseResultMap,只要写全名即可,就是:com.xxx.xx.XxxMapper.Base_Column_List和com.xxx.xx.XxxMapper.BaseResultMap.
3:补充Mapper java中方法,方法名和<select>的id相同。
PS:
自定义的Mapper.xml和Mapper.java可以不和mybatis自动生成的在一个目录。
mybatis-generator默认是不产生分页语句的。需要加个插件。
参考:http://www.cnblogs.com/iamcui/p/4788910.html
https://github.com/reedF/rmi-demo/blob/master/src/main/java/org/mybatis/generator/plugin/PaginationMysqlPlugin.java
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.TopLevelClass;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
/**
* <pre>
* add pagination using mysql limit.
* This class is only used in ibator code generator.
* </pre>
*/
public class PaginationMysqlPlugin extends PluginAdapter {
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
// add field, getter, setter for limit clause
addLimit(topLevelClass, introspectedTable, "offset");
addLimit(topLevelClass, introspectedTable, "limit");
return super.modelExampleClassGenerated(topLevelClass,
introspectedTable);
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
XmlElement element, IntrospectedTable introspectedTable) {
// XmlElement isParameterPresenteElemen = (XmlElement) element
// .getElements().get(element.getElements().size() - 1);
// XmlElement isNotNullElement = new XmlElement("isGreaterEqual"); //$NON-NLS-1$
// isNotNullElement.addAttribute(new Attribute("property", "limitStart")); //$NON-NLS-1$ //$NON-NLS-2$
// isNotNullElement.addAttribute(new Attribute("compareValue", "0")); //$NON-NLS-1$ //$NON-NLS-2$
XmlElement isNotNullElement = new XmlElement("if");
isNotNullElement.addAttribute(new Attribute("test", "limit >= 0"));
isNotNullElement.addElement(new TextElement(
" limit ${offset} , ${limit}"));
// isParameterPresenteElemen.addElement(isNotNullElement);
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("-1");
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 = PaginationMysqlPlugin.class.getClassLoader()
.getResource("generatorConfig.xml").getFile();
String[] arg = { "-configfile", config, "-overwrite" };
ShellRunner.main(arg);
}
public static void main(String[] args) {
generate();
}
}
原代码是用limitStart和limitEnd2个参数,不符合正常习惯,这里改成offset和limit.
注意offset参数不能为空。
分享到:
相关推荐
4. **Mapper XML文件**: 在MyBatis中,Mapper.xml文件是SQL语句的载体,它定义了数据库操作,如增删查改。每个Mapper.xml文件通常对应一个Mapper接口,接口方法与XML中的SQL ID匹配,实现SQL的执行。 5. **MyBatis-...
MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的Mapper接口、XML映射文件以及对应的实体类。这款工具极大地提高了开发效率,减少了手动编写这些基础代码的工作量,使得开发者能够更专注于业务逻辑...
本文将详细解析"mybatis联表查询mapper.xml"这一主题,包括如何在Mapper XML文件中实现主表与副表的一对多关联查询,以及涉及的实体类和DAO层的设计。 首先,我们要理解MyBatis中的Mapper接口和Mapper XML文件的...
在MyBatis中,Mapper接口和对应的XML配置文件是核心组成部分,它们共同定义了数据库操作的行为。本篇文章将深入探讨MyBatis的Mapper和XML文件生成,以及如何使用`mybatis-generator-core-1.3.2`工具进行自动化生成。...
标题 "自动生成实体类和mybatis的mapper和xml" 涉及到的是在Java开发中使用MyBatis框架时,如何自动化生成与数据库交互所需的代码。MyBatis Generator(MBG)是一个强大的工具,它能够根据数据库表结构自动生成Java...
本文将详细讲解如何使用Java程序生成Mybatis的mapper.xml和mapper.java文件,以便于简化开发过程,提高代码的可维护性和效率。 首先,理解mapper.xml和mapper.java的作用是关键。mapper.xml文件是Mybatis中的SQL...
总结来说,Mybatis Generator是提高开发效率的重要工具,通过合理配置`generatorConfig.xml`文件,可以自动化地生成Mybatis所需的Model、Mapper接口和mapper.xml文件。在SSM项目中,这种自动化代码生成极大地降低了...
在Spring Boot集成MyBatis的过程中,`mapper.xml`配置文件起着至关重要的作用。它用于定义SQL语句,实现数据库的CRUD操作。本示例将深入探讨如何配置`mapper.xml`,并提供新增、修改、删除、查询及分页查询的实践...
在MyBatis的学习过程中,理解其配置和Mapper XML文件的设置是至关重要的。本笔记将详细解析MyBatis的configuration配置文件和Mapper XML配置,帮助你深入掌握这两个核心组件。 首先,我们来看MyBatis的`...
Mapper.xml文件是Mybatis的核心组件,它包含了数据库操作的SQL语句和映射规则。 在处理字符串形式的多选参数时,我们通常会先在服务层将这些参数转换为Java集合,如List或Set。例如,如果用户选择的标签以逗号分隔...
MyBatis-通用Mapper通过逆向工程(Reverse Engineering)和代码生成工具,能够自动生成与数据库表相关的Java实体类、Mapper接口和Mapper XML配置文件,极大地提高了开发效率。下面我们将深入探讨这个工具的使用和...
接下来,定义实体类、Mapper接口和MapperXML文件。实体类对应数据库表,Mapper接口定义了数据库操作的方法,MapperXML文件包含了具体的SQL语句。例如,我们有一个`User`实体类,对应的`UserMapper`接口和`userMapper...
在Java开发领域,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,通过XML或注解方式配置映射器(Mapper),将SQL语句与Java代码分离,提供了更为灵活的数据访问接口。本篇文章将深入探讨MyBatis中配置...
MyBatis逆向生成Mapper是一项高效实用的开发工具功能,它可以帮助Java开发者快速构建数据库操作的Mapper接口和对应的XML配置文件。在SSM(Spring、SpringMVC、MyBatis)框架中,Mapper是数据库操作的主要接口,而...
Mapper映射配置文件是MyBatis的核心组成部分,用于定义SQL查询和结果映射。 首先,我们来看一下Mapper的XML配置文件。Mapper的XML文件通常放在项目的`resources`目录下,以`.xml`为扩展名,与对应的Java接口处于...
- 执行生成命令:运行代码生成器,根据配置文件生成对应的Mapper、XML和Bean文件。 - 引入生成的文件:将生成的文件引入到项目中,进行相应的调整和测试。 7. **优势**:使用代码生成器不仅提高了开发效率,还...
同时,为了处理更复杂的业务逻辑,我们还可以自定义特定的Mapper方法,只需要在Mapper接口中定义,然后在Mapper XML文件中编写对应的SQL。 关于SSM(Spring、SpringMVC、MyBatis)整合,这是一项常见的企业级应用...
本示例"mybatis根据数据库表自动生成mapper和实体及xml项目"就是这样一个实用工具,它能够帮助开发者快速构建MyBatis项目。 首先,MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...
总结来说,本示例展示了如何在不使用Mapper接口的情况下,通过MyBatis的XML配置文件和SqlSession执行SQL查询。这种方式虽然略显繁琐,但对于学习MyBatis的基本操作非常有帮助。在实际开发中,结合Mapper接口和注解...
首先,`mybatis-3-mapper.dtd`是MyBatis中用于验证XML映射文件的文档类型定义(Document Type Definition)。在XML文件中,DTD是用来定义元素和属性的规则,它确保了XML文件的结构正确性。当Eclipse等IDE在解析XML...