文档章节

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

aduan
 aduan
发布于 2016/04/13 23:09
字数 465
阅读 68
收藏 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
博文 17
码字总数 10328
作品 0
海口
架构师
ht896632/mybatis-generator-core

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

ht896632
2016/04/20
0
0
ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

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

长平狐
2012/09/04
865
0
TRY_To_TRY/mybatis-generator-xplugin

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

TRY_To_TRY
2016/11/05
0
0
k3cloud开发实例

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

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

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

walb呀
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

职场老人谈:Linux学习分享

随着Linux系统慢慢渗透到生活的方方面面,对Linux的基本操作就越来越必要了。 我是一位软件测试工程师,初次接触Linux主要是因为需要配置Linux服务器。因为Linux系统是一套开源的操作系统,安...

linux-tao
31分钟前
1
0
Oracle chr() ascii()

函数简介 实用函数 chr() 和 ascii() chr() 函数将ASCII码转换为字符: ASCII码 –> 字符; ascii() 函数将字符转换为ASCII码: 字符 –> ASCII码; 在 Oracle 中 chr() 函数和 ascii() 是一对...

taadis
33分钟前
2
0
职场老人谈:Linux学习分享

随着Linux系统慢慢渗透到生活的方方面面,对Linux的基本操作就越来越必要了。 我是一位软件测试工程师,初次接触Linux主要是因为需要配置Linux服务器。因为Linux系统是一套开源的操作系统,安...

linuxprobe16
42分钟前
1
0
Confluence 6 Windows 中以服务方式自动重启的原因

针对长时间使用的 Confluence,我们推荐你配置 Confluence 自动随操作系统重启而启动。针对一些 Windows 的服务器,这意味着需要让 Confluence 以服务的方式运行。 有下面 2 种方式来以服务的...

honeymose
今天
4
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部