文档章节

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

aduan
 aduan
发布于 2016/04/13 23:09
字数 465
阅读 72
收藏 6

直接上代码吧

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
博文 21
码字总数 11751
作品 0
海口
架构师
私信 提问
基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

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

walb呀
2017/12/04
0
0
ht896632/mybatis-generator-core

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

ht896632
2016/04/20
0
0
基于高德在线地图及REST API 的 QGIS插件开发

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

GIS开源
2016/11/09
0
0
TRY_To_TRY/mybatis-generator-xplugin

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

TRY_To_TRY
2016/11/05
0
0
PgSQL · 特性分析 · Plan Hint

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

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

没有更多内容

加载失败,请刷新页面

加载更多

nginx的内容

1、nginx 稳定,由俄国人开发, nginx.org 分支: tengine,由淘宝开发; tengine.taobao.com nginx的功能:http服务, 负载均衡 反向代理 邮件代理 缓存加速 SSL, 功能完善;高并发 可以用来处理...

芬野de博客
18分钟前
0
0
websocket 接口简单测试工具,webcoket实用测试工具

chorme 插件 Simple WebSocket Client 对开发来说够用了,能连互联网,也能连本地的。 之前用jmeter 带复杂了,而且登录不好弄,这个基于浏览器,共享浏览器的登录信息。方便!...

SimonAt
23分钟前
2
0
Ext中 get、getDom、getCmp的区别

getDom方法能够得到文档中的DOM节点,该方法中包含一个参数,该参数可以是DOM节点的id、DOM节点对象或DOM节点对应的Ext元素(Element)等。 (与getElementById是一个效果) •Ext.onReady(funct...

休辞醉倒
31分钟前
1
0
springboot jpa 访问数据库

spring boot(五):spring data jpa的使用 SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql

颖辉小居
46分钟前
4
0
Quartz + Oracle 分布式Job实现

简述 实现 依赖包 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.3</version><exclusions><exclusion><groupId>com.zax......

呼呼南风
51分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部