程序员程序员养成记职场——软实力

代码生成工具???

2018-12-27  本文已影响31人  娶个好听的昵称

“代码自动生成”,第一次知道这个词语是从大学的Java web课上,一位外聘老师口中得知。

从他的闲聊中了解到,许多企业公司都会有这么一个自动生成代码的东西,做Java项目的时候会直接生成代码甚至是一个项目,只需要人工改改细节就OK了。当时就比较感兴趣,就问老师哪里有这样的工具下载。

老师也坦(zhi)率(zhang),说他就有但是不给我们,等我们期末考试95分以上的可以找他要。
当时还以为是什么高大上的神秘工具,还努力的学习,结果嘛,不提了。
现在工作后,又想起这个东西,特意去百度了一下。

自动代码生成器根本原理就是根据实现写事先好的模板,再根据你提供的数据库结构,生成一系列的增删改查方法。的确是可以减少程序员的工作量,但是不能包含复杂或者特殊的业务逻辑
1.不同的架构,需要不同的生成器
2.生成器一般需要模板技术,如freeMarker、velocity等
3.生成器也是Java项目,可以自己修改、设计、开发

因为最近在学习SSM,然后了解到MyBatis GeneratorMyBatis-Plus

一.MyBatis Generator

mybaits需要一大堆的配置文件,以及各种mapper和dao和实体的关联,导致使用mybatis还是不够简洁,后来mybatis也发现了这个弊端,开发了mybatis generator工具来自动化生成实体类、mapper配置文件、dao层代码来减轻开发工作量,在后期也是实现了抛弃mapper配置文件基于注解的开发模式.
mybtis提供了一个mybatis generator工具来帮我们自动创建pojo类、mapper文件以及dao类并且会帮我们配置好它们的依赖关系,而我们只需要关系我们的业务逻辑直接使用就行了。

在spring boot + mybatis中如何使用

1.在pom.xml文件中添加一个generator的maven工具

<build> 
    <plugins> 
        <plugin> 
            <groupId>org.mybatis.generator</groupId> 
            <artifactId>mybatis-generator-maven-plugin</artifactId> 
            <version>1.3.2</version> 
            <executions> 
                <execution> 
                    <id>Generate MyBatis Artifacts</id> 
                    <phase>deploy</phase> 
                    <goals> 
                        <goal>generate</goal> 
                    </goals> 
                </execution> 
            </executions> 
            <configuration> 
                <!-- generator 工具配置文件的位置 --> 
                <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile> 
                <verbose>true</verbose> 
                <overwrite>true</overwrite> 
            </configuration> 
            <dependencies> 
                <dependency> 
                    <groupId>mysql</groupId> 
                    <artifactId>mysql-connector-java</artifactId> 
                    <version>5.1.34</version> 
                </dependency> 
                <dependency> 
                    <groupId>org.mybatis.generator</groupId> 
                    <artifactId>mybatis-generator-core</artifactId> 
                    <version>1.3.2</version> 
                </dependency> 
            </dependencies> 
        </plugin> 
        <plugin> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId> 
            <configuration> 
                <classifier>exec</classifier> 
            </configuration> 
        </plugin> 
    </plugins> 
</build>

2.上面指定了mybatis generator工具配置文件的位置,在这个位置创建一个xml文件,并做如下配置:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 
        <!-- 配置生成器 --> 
        <generatorConfiguration> 
            <!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e --> 
            <!-- 引入配置文件 --> 
            <properties resource="mybatis-generator/mybatisGeneratorinit.properties"/> 
            <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 --> 
            <!--<classPathEntry location="D:\generator_mybatis\mysql-connector-java-5.1.24-bin.jar" /> --> 
            <!-- 一个数据库一个context --> <!--defaultModelType="flat" 大数据字段,不分表 --> 
            <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat"> 
            <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
             一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 --> 
                <property name="autoDelimitKeywords" value="true" /> 
                <!-- 生成的Java文件的编码 --> 
                <property name="javaFileEncoding" value="utf-8" /> 
                <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --> 
                <property name="beginningDelimiter" value="`" /> 
                <property name="endingDelimiter" value="`" /> 
                <!-- 格式化java代码 --> 
                <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> 
                <!-- 格式化XML代码 --> 
                <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> 
                <plugin type="org.mybatis.generator.plugins.SerializablePlugin" /> 
                <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> 
                <!-- 注释 --> 
                <commentGenerator > 
                    <property name="suppressAllComments" value="false"/>
                    <!-- 是否取消注释 --> 
                    <property name="suppressDate" value="true" /> 
                    <!-- 是否生成注释代时间戳--> 
                </commentGenerator> 
                <!-- jdbc连接 --> 
                <jdbcConnection driverClass="${jdbc_driver}" connectionURL="${jdbc_url}" userId="${jdbc_user}" password="${jdbc_password}" /> 
                <!-- 类型转换 --> 
                <javaTypeResolver> 
                    <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --> 
                    <property name="forceBigDecimals" value="false"/> 
                </javaTypeResolver> <!-- 生成实体类地址 --> 
                <javaModelGenerator targetPackage="com.cuit.springboot.gentry" targetProject="${project}" > 
                    <property name="enableSubPackages" value="false"/> 
                    <property name="trimStrings" value="true"/> 
                </javaModelGenerator> 
                <!-- 生成mapxml文件 --> 
                <sqlMapGenerator targetPackage="mappers" targetProject="${resources}" > 
                    <property name="enableSubPackages" value="false" /> 
                </sqlMapGenerator> 
                <!-- 生成mapxml对应client,也就是接口dao --> 
                <javaClientGenerator targetPackage="com.cuit.springboot.gdao" targetProject="${project}" type="XMLMAPPER" > 
                    <property name="enableSubPackages" value="false" /> 
                </javaClientGenerator> 
                <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 --> 
                <table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"> 
                    <property name="useActualColumnNames" value="false" /> 
                    <!-- 数据库表主键 --> 
                    <generatedKey column="id" sqlStatement="Mysql" identity="true" /> 
                </table> 
             </context> 
        </generatorConfiguration>

在MBG中,最主要也最重要的就是XML配置文件,配置详解

3.在同目录下创建mybatisGeneratorinit.properties文件:

//Mybatis Generator configuration
//dao类和实体类的位置 project =src/main/java #mapper文件的位置 resources=src/main/resources
//根据数据库中的表生成对应的pojo类、dao、mapper
jdbc_driver =com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/demo
jdbc_user=root
jdbc_password=root

4.建立数据库表,当数据库表建立好后在pom.xml文件所在的目录执行如下命令:

mvn mybatis-generator:generate

二.MyBatis-Plus

MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

如何使用

1.pom.xml引入相应的jar包(核心的jar)。



<!-- 阿里巴巴druid数据库连接池 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.3</version>
</dependency>


<!-- mysql驱动 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.38</version>
</dependency>


<!-- mybatisplus与springboot整合 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatisplus-spring-boot-starter</artifactId>
  <version>1.0.5</version>
</dependency>
<!-- MP 核心库 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus</artifactId>
  <version>2.1.8</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.0</version>
</dependency>


<!-- springboot整合mybatis(核心就这一个) -->
<!-- 注意顺序,这个一定要放在最下面 -->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.3.1</version>

</dependency>

2写自动生成代码的java类

public class CodeGeneration {
    /**
     * 
     * @Title: main
     * @Description: 生成
     * @param args
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("C://code");
        gc.setFileOverride(true);
        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("Walle");// 作者


        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setControllerName("%sAction");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        mpg.setGlobalConfig(gc);


        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/itcast");
        mpg.setDataSource(dsc);


        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { "itcast_" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(new String[] { "itcast_user" }); // 需要生成的表


        strategy.setSuperServiceClass(null);
        strategy.setSuperServiceImplClass(null);
        strategy.setSuperMapperClass(null);


        mpg.setStrategy(strategy);


        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.zhm");
        pc.setController("action");
        pc.setService("service");
        pc.setServiceImpl("serviceImpl");
        pc.setMapper("mapper");
        pc.setEntity("entity");
        pc.setXml("xml");
        mpg.setPackageInfo(pc);


        // 执行生成
        mpg.execute();

    }
}

其中重要的有
outputDir(生成文件的输出目录)
TablePrefix(表前缀)
Include(需要包含的表名,允许正则表达式(与exclude二选一配置))
parent(父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名)
更多配置参考:官方解析

3.执行main方法,就会生成好dao,entity,service ,serviceimpl和controller.


我得赶快让某个闲置起来智障队友用起来,大量的给我生成项目,明年看能不能找点外快*_*.

上一篇下一篇

猜你喜欢

热点阅读