其主要的功能就是方便,快捷的创建好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(Listwarnings) { 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{ Listwarnings = 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