`
lg_asus
  • 浏览: 185062 次
  • 性别: 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参数不能为空。
分享到:
评论

相关推荐

    MyBatisCodeHelper免费版idea插件

    根据mybatis接口中的方法名生成mybatis的sql 支持find,update,delete,count方法 只需定义一个方法名就可以得到完整mybatis xml代码 可生成大部分单表操作sql 极大提升效率 mybatis接口文件的mapper xml之间的相互...

    springmybatis

    在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。 运行这个测试程序,就可以看到结果了。 除非...

    mybatisCodeHelper

    根据mybatis接口中的方法名生成mybatis的sql 支持find,update,delete,count方法 只需定义一个方法名就可以得到完整mybatis xml代码 可生成大部分单表操作sql 极大提升效率 mybatis接口文件的mapper xml之间的相互...

    __mybatisCodeHelper_

    支持mysql和oracle和sqlite 根据java对象生成mybatis crud代码和建表sql 根据mybatis接口中的方法名生成mybatis的sql 支持find,update,delete,count方法 只需定义一个方法名就可以得到完整mybatis xml代码 可生成大...

    MyBatisCodeHelper_1.4.5

    根据mybatis接口中的方法名生成mybatis的sql 支持find,update,delete,count方法 只需定义一个方法名就可以得到完整mybatis xml代码 可生成大部分单表操作sql 极大提升效率 mybatis接口文件的mapper xml之间的相互...

    MyBatis 需要注意的地方junit注解

    5.mapper.xml中$和#取值的区别 4.mybatis的xml中如何设置返回值 resultType返回的数据类型 5.$和#区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入的值...

    MyBatis环境配置及入门

    2、Configure.xml 里面 的&lt;mapper resource="com/yiibai/mybatis/models/User.xml"/&gt;是包含要映射的类的 xml 配置文件。 3、在User.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等...

    mybatis学习笔记

    4.3.1 Mapper.xml定义 36 4.3.2 定义resultMap 36 4.3.3 Mapper接口定义 37 4.4 动态sql(重点) 37 4.4.1 If 37 4.4.2 Where 38 4.4.3 foreach 38 4.4.4 Sql片段 43 5 关联查询 44 5.1 商品订单数据模型 45 5.2 一对...

    基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分

    在实现时,您应该在 MyBatis 的 Mapper 接口和 XML 配置文件中,定义动态的数据源路由逻辑,根据查询条件选择合适的数据源。 在垂直切分中,您可能将不同类型的数据表,如用户信息表、订单表等,存储到不同的数据库节点上...

    全面学习Mybatis插件之Mybatis-Plus_Java框架视频教程

    使用原生的Mybatis编写持久层逻辑时,所需要的代码是比较繁琐的,需要定义Mapper接口和Mapper.xml文件,每一个方法都需要编写对应的sql语句,会存在很多大量的重复工作,使用MP之后,对通用的方法做了高度的抽取,...

    MyBatis3.2.3帮助文档(中文版).zip

    mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)。 不使用 XML 构建 SqlSessionFactory 如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,...

    mybatis-3-mybatis-3.5.13.zip

    3. 映射文件解析: 映射文件(Mapper XML文件)定义了SQL语句、参数映射关系、结果集映射关系等。MyBatis使用XML解析器解析映射文件,将SQL语句和数据库操作转化为Java对象。 4. SQL执行: 当执行SQL操作时,...

    mybatis笔记.zip

    映射器文件(Mapper XML)定义了SQL语句和映射规则。每个映射器文件对应一个数据访问接口。 映射器文件中定义了SQL语句、参数映射、结果映射等。 4. SQL语句映射: MyBatis支持静态SQL和动态SQL。使用、、、等元素...

    mybatis知识点总结.docx

    映射器文件(Mapper XML)定义了SQL语句和映射规则。每个映射器文件对应一个数据访问接口。 映射器文件中定义了SQL语句、参数映射、结果映射等。 4. SQL语句映射: MyBatis支持静态SQL和动态SQL。使用、、、等元素...

    mybatis-mapper:mybatis单表通用CURD插件和分页插件

    发现一些通用的操作,比如单表的CURD,在每一个xml文件中都需要定义一遍。而且每个人写的风格又不统一。于是寻找了一个解决 办法,使用maven插件mybatis-generator。使用一段时间之后,发现还是不能令人满意。每次...

    mybatis类生成器

    mybatis生成器,配置数据库的连接,定义表面和实体类名,能自动生成dao,实体类,mapper.xml等文件

    mybatisGenerator配置文件示例

    mybatisGenerator配置文件示例, java开发利器, 使用mybatisGenerator可以快速根据数据库表定义生成java实体类mapper.xml映射文件或者注解sql代码, 强烈推荐.

    mybatis基本使用

    4. 创建 Mapper 接口和 XML 映射文件 Mapper 接口定义了与数据库交互的方法。每个方法都对应一个 SQL 语句。这些 SQL 语句可以在 XML 映射文件中定义,也可以使用注解的方式直接写在接口方法上。 5. 编写测试代码 ...

    mybatis-generator生成代码完整示例

    在java项目开发中一般都用到mybatis框架,就会涉及到实体和表的映射,mapper的生成,mybatis-generator插件可以根据表结构自动生成实体和mapper,大大简化了开发的工作量 目前这个插件生成的原始实体没有字段注释,...

    ssm整合(springmvc+mybatis+myshoo+jsl)学生管理系统

    写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。 写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。 写Service....

Global site tag (gtag.js) - Google Analytics