`
lg_asus
  • 浏览: 191907 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

mybatis定义自己的mapper和xml

阅读更多
用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参数不能为空。
分享到:
评论

相关推荐

    spring boot + mybatis +mapper.xml 项目

    4. **Mapper XML文件**: 在MyBatis中,Mapper.xml文件是SQL语句的载体,它定义了数据库操作,如增删查改。每个Mapper.xml文件通常对应一个Mapper接口,接口方法与XML中的SQL ID匹配,实现SQL的执行。 5. **MyBatis-...

    mybatis自动生成mapper文件

    MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的Mapper接口、XML映射文件以及对应的实体类。这款工具极大地提高了开发效率,减少了手动编写这些基础代码的工作量,使得开发者能够更专注于业务逻辑...

    mybatis联表查询mapper.xml

    本文将详细解析"mybatis联表查询mapper.xml"这一主题,包括如何在Mapper XML文件中实现主表与副表的一对多关联查询,以及涉及的实体类和DAO层的设计。 首先,我们要理解MyBatis中的Mapper接口和Mapper XML文件的...

    mybatis mapper 和xml文件生成

    在MyBatis中,Mapper接口和对应的XML配置文件是核心组成部分,它们共同定义了数据库操作的行为。本篇文章将深入探讨MyBatis的Mapper和XML文件生成,以及如何使用`mybatis-generator-core-1.3.2`工具进行自动化生成。...

    自动生成实体类和mybatis的mapper和xml

    标题 "自动生成实体类和mybatis的mapper和xml" 涉及到的是在Java开发中使用MyBatis框架时,如何自动化生成与数据库交互所需的代码。MyBatis Generator(MBG)是一个强大的工具,它能够根据数据库表结构自动生成Java...

    用java程序生成mybatis的mapper.xml和mapper.java文件

    本文将详细讲解如何使用Java程序生成Mybatis的mapper.xml和mapper.java文件,以便于简化开发过程,提高代码的可维护性和效率。 首先,理解mapper.xml和mapper.java的作用是关键。mapper.xml文件是Mybatis中的SQL...

    自动生成Mybatis的 model mapper 和mapper.xml文件

    总结来说,Mybatis Generator是提高开发效率的重要工具,通过合理配置`generatorConfig.xml`文件,可以自动化地生成Mybatis所需的Model、Mapper接口和mapper.xml文件。在SSM项目中,这种自动化代码生成极大地降低了...

    springboot mybatis mapper.xml 配置

    在Spring Boot集成MyBatis的过程中,`mapper.xml`配置文件起着至关重要的作用。它用于定义SQL语句,实现数据库的CRUD操作。本示例将深入探讨如何配置`mapper.xml`,并提供新增、修改、删除、查询及分页查询的实践...

    MyBatis学习笔记(一):MyBatis configuration和mapper xml配置总结

    在MyBatis的学习过程中,理解其配置和Mapper XML文件的设置是至关重要的。本笔记将详细解析MyBatis的configuration配置文件和Mapper XML配置,帮助你深入掌握这两个核心组件。 首先,我们来看MyBatis的`...

    mybatis-通用Mapper-逆向工程-代码生成工具

    MyBatis-通用Mapper通过逆向工程(Reverse Engineering)和代码生成工具,能够自动生成与数据库表相关的Java实体类、Mapper接口和Mapper XML配置文件,极大地提高了开发效率。下面我们将深入探讨这个工具的使用和...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    Mapper.xml文件是Mybatis的核心组件,它包含了数据库操作的SQL语句和映射规则。 在处理字符串形式的多选参数时,我们通常会先在服务层将这些参数转换为Java集合,如List或Set。例如,如果用户选择的标签以逗号分隔...

    springboot整合mybatis基于mapperXML模式.zip

    接下来,定义实体类、Mapper接口和MapperXML文件。实体类对应数据库表,Mapper接口定义了数据库操作的方法,MapperXML文件包含了具体的SQL语句。例如,我们有一个`User`实体类,对应的`UserMapper`接口和`userMapper...

    Mybatis中配置Mapper的方法

    在Java开发领域,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,通过XML或注解方式配置映射器(Mapper),将SQL语句与Java代码分离,提供了更为灵活的数据访问接口。本篇文章将深入探讨MyBatis中配置...

    mybatis逆向生成mapper

    MyBatis逆向生成Mapper是一项高效实用的开发工具功能,它可以帮助Java开发者快速构建数据库操作的Mapper接口和对应的XML配置文件。在SSM(Spring、SpringMVC、MyBatis)框架中,Mapper是数据库操作的主要接口,而...

    Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper映射配置文件是MyBatis的核心组成部分,用于定义SQL查询和结果映射。 首先,我们来看一下Mapper的XML配置文件。Mapper的XML文件通常放在项目的`resources`目录下,以`.xml`为扩展名,与对应的Java接口处于...

    自动生成mybatis的mapper文件和bean

    - 执行生成命令:运行代码生成器,根据配置文件生成对应的Mapper、XML和Bean文件。 - 引入生成的文件:将生成的文件引入到项目中,进行相应的调整和测试。 7. **优势**:使用代码生成器不仅提高了开发效率,还...

    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x

    同时,为了处理更复杂的业务逻辑,我们还可以自定义特定的Mapper方法,只需要在Mapper接口中定义,然后在Mapper XML文件中编写对应的SQL。 关于SSM(Spring、SpringMVC、MyBatis)整合,这是一项常见的企业级应用...

    mybatis根据数据库表自动生成mapper和实体及xml项目示例

    本示例"mybatis根据数据库表自动生成mapper和实体及xml项目"就是这样一个实用工具,它能够帮助开发者快速构建MyBatis项目。 首先,MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...

    MyBatis的helloworld(不使用Mapper接口实现MyBatis查询数据库).zip

    总结来说,本示例展示了如何在不使用Mapper接口的情况下,通过MyBatis的XML配置文件和SqlSession执行SQL查询。这种方式虽然略显繁琐,但对于学习MyBatis的基本操作非常有帮助。在实际开发中,结合Mapper接口和注解...

    mybatis-3-mapper.rar

    首先,`mybatis-3-mapper.dtd`是MyBatis中用于验证XML映射文件的文档类型定义(Document Type Definition)。在XML文件中,DTD是用来定义元素和属性的规则,它确保了XML文件的结构正确性。当Eclipse等IDE在解析XML...

Global site tag (gtag.js) - Google Analytics