博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis generator生成工具简单介绍
阅读量:4315 次
发布时间:2019-06-06

本文共 7447 字,大约阅读时间需要 24 分钟。

Mybatis generator

   其主要的功能就是方便,快捷的创建好Dao,entry,xml 加快了开发速度,使用方面根据其提供的规则配置好就OK

  这里还有一个重要的开发场景,开发过程中,对数据库的操作肯定很多,比如新增字段什么的,你只要将原先自动生成的一套代码删除,重新再生成一份,这就完美解决了,但是这样做的前提是,你必须对生成后的代码不改动,只是使用。不需要想手动开发写代码那样到处改代码,还担心改漏地方。

  其实这个的实现方式也是五花八门的,写一种比较常见的


 主要流程

  第一步:添加依赖

  主要是jdbc和generator

org.mybatis.generator
mybatis-generator-core
1.3.6
mysql
mysql-connector-java
5.1.38

   第二步:配置 generatorConfig.xml 

    这个文件主要是对  从哪来,到哪去的描述,还有一些特殊要求的配置

  


 

    第三步:主要看你个人的需求,对注释,分页啥的有啥要求不,可以重写几个方法对其进行改造

      主要举几个例子  

    对注释的修改 NewbatisGenerator 

public class NewbatisGenerator extends DefaultCommentGenerator {    private Properties properties;    private Properties systemPro;    private boolean suppressDate;    private boolean suppressAllComments;    private String currentDateStr;    public NewbatisGenerator() {        super();        properties = new Properties();        systemPro = System.getProperties();        suppressDate = false;        suppressAllComments = false;        currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());    }    /**     * 对类的注解     * @param topLevelClass     * @param introspectedTable     */    @Override    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {        topLevelClass.addJavaDocLine("/**");        topLevelClass.addJavaDocLine(" * 这是MyBatis Generator自动生成的Model Class.");        StringBuilder sb = new StringBuilder();        sb.append(" * 对应的数据表是 : ");        sb.append(introspectedTable.getFullyQualifiedTable());        topLevelClass.addJavaDocLine(sb.toString());        String tableRemarks = introspectedTable.getRemarks();        if (!StringUtils.isEmpty(tableRemarks)) {            sb.setLength(0);            sb.append(" * 数据表注释 : ");            sb.append(tableRemarks);            topLevelClass.addJavaDocLine(sb.toString());        }        sb.setLength(0);        sb.append(" * @author ");        sb.append(systemPro.getProperty("user.name"));        topLevelClass.addJavaDocLine(sb.toString());        String curDateString = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());        sb.setLength(0);        sb.append(" * @date ");        sb.append(curDateString);        topLevelClass.addJavaDocLine(sb.toString());        topLevelClass.addJavaDocLine(" */");    }    /**     * 生成的实体增加字段的中文注释     */    public void addFieldComment(Field field, IntrospectedTable introspectedTable,                                IntrospectedColumn introspectedColumn) {        if (suppressAllComments) {            return;        }        StringBuilder sb = new StringBuilder();        field.addJavaDocLine("/**");        sb.append(" * ");        sb.append(introspectedColumn.getRemarks());        field.addJavaDocLine(sb.toString().replace("\n", " "));        field.addJavaDocLine(" */");    }}

  对分页的添加  MysqlPaginationPlugin  自动生成带分页插件

public class MysqlPaginationPlugin extends PluginAdapter {    public MysqlPaginationPlugin() {}    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,            IntrospectedTable introspectedTable) {        this.addLimit(topLevelClass, introspectedTable, "limitStart");        this.addLimit(topLevelClass, introspectedTable, "limitSize");        return super.modelExampleClassGenerated(topLevelClass, introspectedTable);    }    public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element,            IntrospectedTable introspectedTable) {        XmlElement isNotNullElement = new XmlElement("if");        isNotNullElement                .addAttribute(new Attribute("test", "limitStart != null and limitSize >= 0"));        isNotNullElement.addElement(new TextElement("limit #{limitStart} , #{limitSize}"));        element.addElement(isNotNullElement);        return super.sqlMapSelectByExampleWithoutBLOBsElementGenerated(element, introspectedTable);    }    public boolean sqlMapSelectByExampleWithBLOBsElementGenerated(XmlElement element,            IntrospectedTable introspectedTable) {        XmlElement isNotNullElement = new XmlElement("if");        isNotNullElement                .addAttribute(new Attribute("test", "limitStart != null and limitSize >= 0"));        isNotNullElement.addElement(new TextElement("limit #{limitStart} , #{limitSize}"));        element.addElement(isNotNullElement);        return super.sqlMapSelectByExampleWithBLOBsElementGenerated(element, introspectedTable);    }    private void addLimit(TopLevelClass topLevelClass, IntrospectedTable introspectedTable,            String name) {        CommentGenerator commentGenerator = this.context.getCommentGenerator();        Field field = new Field();        field.setVisibility(JavaVisibility.PROTECTED);        field.setType(PrimitiveTypeWrapper.getIntegerInstance());        field.setName(name);        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(PrimitiveTypeWrapper.getIntegerInstance(), name));        StringBuilder sb = new StringBuilder();        sb.append("this.");        sb.append(name);        sb.append(" = ");        sb.append(name);        sb.append(";");        method.addBodyLine(sb.toString());        commentGenerator.addGeneralMethodComment(method, introspectedTable);        topLevelClass.addMethod(method);        Method getterMethod = AbstractJavaGenerator.getGetter(field);        commentGenerator.addGeneralMethodComment(getterMethod, introspectedTable);        topLevelClass.addMethod(getterMethod);    }    public boolean validate(List
warnings) { return true; } /** * 生成mapper.xml,文件内容会被清空再写入 * */ @Override public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) { sqlMap.setMergeable(false); return super.sqlMapGenerated(sqlMap, introspectedTable); }}

  最后一步:运行生成

  这些官网都是有的

public class Generator {    public static void main(String[] args) throws Exception{        List
warnings = new ArrayList
(); boolean overwrite = true; File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); }}

  这个比较简单明了,个性化也不错,值得推荐

  转载请注明出处

 

转载于:https://www.cnblogs.com/zhouguanglin/p/11239583.html

你可能感兴趣的文章
javascript中的string对象
查看>>
CString的成员函数详解
查看>>
Appium Studio 初体验(windows做ios自动化,录制appium脚本)
查看>>
学习java前端 两种form表单提交方式
查看>>
Linux常用命令
查看>>
整体二分&cdq分治 ZOJ 2112 Dynamic Rankings
查看>>
【POJ2976】Dropping tests (01分数规划入门题)
查看>>
通过正则表达式获取url中参数
查看>>
86.运算符重载
查看>>
cxx signal信号捕获
查看>>
《Android开发艺术探索》读书笔记——Cha3.2.3改变布局参数实现View的滑动
查看>>
python闭包与装饰器
查看>>
Acegi 源码解释
查看>>
Activity的几种启动跳转方式
查看>>
LCA最近公共祖先Tarjan(离线)
查看>>
牛客练习赛16 E求值
查看>>
matlab rank
查看>>
Asp.net系列--基础篇(三)
查看>>
css基础
查看>>
如何在tomcat中如何部署java EE项目
查看>>