文档章节

利用Mytatis Generator插件生成Model的列表查询方法

aduan
 aduan
发布于 2016/04/13 23:09
字数 465
阅读 67
收藏 6
点赞 1
评论 0

直接上代码吧

public class GenerateListPlugin extends PluginAdapter {
    private FullyQualifiedJavaType primaryKeyType;
    private FullyQualifiedJavaType modelType;

    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }

    @Override
    public boolean clientSelectByPrimaryKeyMethodGenerated(Method method, Interface interfaze, IntrospectedTable introspectedTable) {
        primaryKeyType = method.getParameters().get(0).getType();
        modelType = method.getReturnType();
        return super.clientSelectByPrimaryKeyMethodGenerated(method, interfaze, introspectedTable);
    }

    @Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        //batch insert
        {
            Method method = new Method();
            method.setName("batchInsert");
            method.setReturnType(new FullyQualifiedJavaType("int"));
            method.addParameter(new Parameter(new FullyQualifiedJavaType("java.util.List<" + modelType.getShortName() + ">"), "list"));
            interfaze.addMethod(method);
            interfaze.addImportedType(new FullyQualifiedJavaType("java.util.List"));
        }
        //list all
        {
            Method method = new Method();
            method.setName("listAll");
            method.setReturnType(new FullyQualifiedJavaType("java.util.List<" + modelType.getShortName() + ">"));
            interfaze.addMethod(method);
            interfaze.addImportedType(new FullyQualifiedJavaType("java.util.List"));
        }

        //list by primary key
        List<IntrospectedColumn> primaryKeyColumns = introspectedTable.getPrimaryKeyColumns();
        if(primaryKeyColumns != null && primaryKeyColumns.size() == 1) {
            Method listMethod = new Method();
            listMethod.setName("listByPrimaryKey");
            listMethod.setReturnType(new FullyQualifiedJavaType("java.util.List<"+modelType.getShortName()+">"));

            Parameter parameter = new Parameter(new FullyQualifiedJavaType("java.util.List<"+primaryKeyType.getShortName()+">"), "list");
            listMethod.addParameter(parameter);
            interfaze.addMethod(listMethod);
            interfaze.addImportedType(new FullyQualifiedJavaType("java.util.List"));
        }

        return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
    }

    @Override
    public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
        XmlElement root = document.getRootElement();
        //batch insert
        {
            //batch insert
            XmlElement batchInsert = new XmlElement("insert");
            batchInsert.addAttribute(new Attribute("id", "batchInsert"));
            batchInsert.addAttribute(new Attribute("parameterType", "list"));
            StringBuilder cols = new StringBuilder();
            StringBuilder vals = new StringBuilder();
            List<IntrospectedColumn> baseColumns = introspectedTable.getBaseColumns();
            boolean isFirst = true;
            for(IntrospectedColumn column : baseColumns) {
                if(!isFirst) {
                    cols.append(',');
                    vals.append(',');
                } else {
                    isFirst = false;
                }
                cols.append(column.getActualColumnName());
                //#{id,jdbcType=BIGINT}
                vals.append("#{item.").append(column.getJavaProperty()).append(",jdbcType=").append(column.getJdbcTypeName()).append('}');

            }
            StringBuilder insertBuilder = new StringBuilder();
            insertBuilder.append("insert into").append(introspectedTable.getFullyQualifiedTable().getIntrospectedTableName())
                    .append("(").append(cols).append(") values ");
            TextElement insert = new TextElement(insertBuilder.toString());
            batchInsert.addElement(insert);
            XmlElement foreach = new XmlElement("foreach");
            foreach.addAttribute(new Attribute("collection", "list"));
            foreach.addAttribute(new Attribute("item", "item"));
            foreach.addAttribute(new Attribute("separator", ","));
            foreach.addElement(new TextElement("(" + vals.toString() + ")"));
            batchInsert.addElement(foreach);
            root.addElement(batchInsert);
        }

        //list all
        {
            XmlElement selectAll = new XmlElement("select");
            selectAll.addAttribute(new Attribute("id", "listAll"));
            selectAll.addAttribute(new Attribute("resultMap", "BaseResultMap"));

            TextElement selectSql = new TextElement("select");
            selectAll.addElement(selectSql);
            XmlElement include = new XmlElement("include");
            include.addAttribute(new Attribute("refid", "Base_Column_List"));
            selectAll.addElement(include);
            selectAll.addElement(new TextElement("from " + introspectedTable.getTableConfiguration().getTableName()));

            root.addElement(selectAll);
        }

        //list by primary key
        List<IntrospectedColumn> primaryKeyColumns = introspectedTable.getPrimaryKeyColumns();
        if(primaryKeyColumns != null && primaryKeyColumns.size() == 1) {
            XmlElement listByPrimaryKey = new XmlElement("select");
            listByPrimaryKey.addAttribute(new Attribute("id", "listByPrimaryKey"));
            listByPrimaryKey.addAttribute(new Attribute("resultMap", "BaseResultMap"));


            TextElement selectEle = new TextElement("select");
            listByPrimaryKey.addElement(selectEle);
            XmlElement includeEle = new XmlElement("include");
            includeEle.addAttribute(new Attribute("refid", "Base_Column_List"));
            listByPrimaryKey.addElement(includeEle);
            listByPrimaryKey.addElement(new TextElement("from " + introspectedTable.getTableConfiguration().getTableName()));
            TextElement where = new TextElement("where " + primaryKeyColumns.get(0).getActualColumnName() + " in");
            listByPrimaryKey.addElement(where);
            XmlElement foreach = new XmlElement("foreach");
            foreach.addAttribute(new Attribute("collection", "list"));
            foreach.addAttribute(new Attribute("item", "item"));
            foreach.addAttribute(new Attribute("open", "("));
            foreach.addAttribute(new Attribute("separator", ","));
            foreach.addAttribute(new Attribute("close", ")"));
            foreach.addElement(new TextElement("#{item}"));
            listByPrimaryKey.addElement(foreach);
            root.addElement(listByPrimaryKey);
        }

        return super.sqlMapDocumentGenerated(document, introspectedTable);
    }
}

生成batchInsert、listByPrimaryKey、listAll方法

listByPrimaryKey方法不支持复合主键。

© 著作权归作者所有

共有 人打赏支持
aduan
粉丝 4
博文 17
码字总数 10328
作品 0
海口
架构师
ht896632/mybatis-generator-core

重点:在使用之前,请认真阅读,请不要在自己写的地方添加 WARNING - @mbg.generated 这个注释,也不要删除自动生成的 WARNING - @mbg.generated 注释,因为合并是根据这个注释进行做操作的,...

ht896632 ⋅ 2016/04/20 ⋅ 0

ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的。服务端验证最终实现在相应的ModelValidator中,而最终的验证...

长平狐 ⋅ 2012/09/04 ⋅ 0

k3cloud开发实例

开发工具 Visual studio 2012 IE插件Silverlight5 SQLServer 2008R2 或 Oracle 11G R2 跟踪工具(HttpWatchPro6.0) 插件Building路径(K3CloudK3CloudServerBin) 注意事项: 使用SQLServer......

51GT ⋅ 2017/08/17 ⋅ 0

TRY_To_TRY/mybatis-generator-xplugin

mybatis-generator-xplugin 收集了很多mybatis-generator的插件,都是自己项目中用到的,为了方面使用,会上传到中心maven库,凡是用了其他人的插件,都会说明,如有冒犯,请告知,立马删除。...

TRY_To_TRY ⋅ 2016/11/05 ⋅ 0

基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往...

walb呀 ⋅ 2017/12/04 ⋅ 0

MVC 框架和 ORM 框架--YangMVC

开发目的 @copyright 杨同峰 保留所有权利 本文可以转载,但请保留版权信息。 SSH框架配置复杂、难用。个人认为这不是一个框架应该有的样子。框架应该使用简单、配置简单、代码简洁。于是参照...

taiji1986 ⋅ 2016/05/30 ⋅ 1

Hibernate4实战 之第六部分:基本实现原理

整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Session打开事务 5:通过session的api操作数据库 6:事务提...

jinnianshilongnian ⋅ 2012/06/29 ⋅ 0

PgSQL · 特性分析 · Plan Hint

背景 有一个功能,是社区官方版”永远”不考虑引入的(参见PG TODO,查找”Oracle-style”),即类似Oracle的Plan Hint。社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷...

阿里云RDS-数据库内核组 ⋅ 2016/01/10 ⋅ 0

基于高德在线地图及REST API 的 QGIS插件开发

一、 简述 地理信息系统(以下简称GIS)的造价一般是比较昂贵的。GIS平台和地图数据是GIS的重要组成部分,其价格(商业GIS平台的价格和商业地图资源的价格)一般都比较贵,因此很多中小用户想...

GIS开源 ⋅ 2016/11/09 ⋅ 0

Laravel5.2之Seeder填充数据小技巧

说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。 备注:在设计个人博客软...

botkenni ⋅ 2016/10/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 45分钟前 ⋅ 0

【每天一个JQuery特效】根据可见状态确定是否显示或隐藏元素(3)

效果图示: 主要代码: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>根据可见状态确定 是否显示或隐藏元素</title><script src="js/jquery-3.3.1.min.js" ty......

Rhymo-Wu ⋅ 55分钟前 ⋅ 0

OSChina 周四乱弹 —— 初中我身体就已经垮了,不知道为什么

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @加油东溪少年 :下完这场雨 后弦 《下完这场雨》- 后弦 手机党少年们想听歌,请使劲儿戳(这里) @马丁的代码 :买了日本 日本果然赢了 翻了...

小小编辑 ⋅ 今天 ⋅ 12

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部