逆向工程

逆向工程在快速开发的项目中有使用到,这样可以避免冗余工作

【1】在pom文件中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <!-- 配置文件路径 -->
                <configurationFile>
                    src/main/resources/generatorConfig.xml
                </configurationFile>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
            <executions>
                <execution>
                    <id>Generate MyBatis Artifacts</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <!-- 插件依赖 -->
            <dependencies>
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.7</version>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.47</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                    <version>3.4.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

【2】导入配置文件,即在resources目录下创建generatorConfig.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>
    <!-- 指定数据连接驱动jar地址 -->
    <classPathEntry location="D:\java\maven_repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar"/>

    <context id="context" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
            <!--去除timestamp -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 数据库的相关配置 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mall"
                        userId="root"
                        password="123456"/>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 实体类生成的位置 -->
        <javaModelGenerator targetPackage="com.psjj.mall.model.po" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- *Mapper.xml 文件的位置 ,targetPackage:包名,targetProject:项目下的路径-->
        <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- Mapper 接口文件的位置 -->
        <javaClientGenerator targetPackage="com.psjj.mall.mapper" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 配置表信息 -->
        <table tableName="mall_cart" domainObjectName="Cart">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        <!-- 配置表信息 -->
        <table tableName="mall_category" domainObjectName="Category">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        <!-- 配置表信息 -->
        <table tableName="mall_order" domainObjectName="Order">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        <!-- 配置表信息 -->
        <table tableName="mall_order_item" domainObjectName="OrderItem">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        <!-- 配置表信息 -->
        <table tableName="mall_product" domainObjectName="Product">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        <!-- 配置表信息 -->
        <table tableName="mall_user" domainObjectName="User">
            <!--是否生成有参的构造方法, 默认否-->
            <property name="constructorBased" value="false"/>
            <!--默认值为false,如果为true,在生成的sql语句中表名中不会加上catalog或schema-->
            <property name="ignoreQualifiersAtRuntime" value="false"/>
            <!--默认值为false,如果为true创建不可变类,生成包含所有field参数的构造方法,没有setter方法-->
            <property name="immutable" value="false"/>
            <!--是否只生成模型类,默认值为false-->
            <property name="modelOnly" value="false"/>
            <!--是否使用真实的字段名称作为类中的属性名称,默认值为false-->
            <property name="useActualColumnNames" value="false"/>
            <!--主键生成策略:可选值:MySql、SqlServer、SYBASE、DB2、Derby等
                使用MySql即生成:SELECT LAST_INSERT_ID() 获取主键值
            -->
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
    </context>
</generatorConfiguration>

【3】生成代码,在第一布重新导入pom文件中的依赖后会有mybatis-generator插件,双击mybatis-generator:generate,双击之后需要一点时间才能生成,千万不要多次双击

逆向工程

【4】修改错误代码,将mapper映射文件中的BEFORE替换成AFTER

原因老师讲了,但是我没听懂
逆向工程

【5】给所有po类生成修改时间

逆向工程

【6】用完代码生成后要将之前添加到pom文件中添加的插件注释掉,不然之后使用其他插件时会将该插件前面的插件在运行一次,可能会出现重复生成代码的情况

【7】整合mybaitis,添加需要用到的依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.17</version>
</dependency>
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.2.0</version>
</dependency>

【8】配置数据源

!!!注意虽然前面的generatorConfig.xml里边已经写过配置数据库了,但是那里边只是跟生成代码有关系,项目连接数据库还是需要配置

这里是用的application.yml文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mall
    username: root
    password: 123456
# mybatis相关配置
mybatis:
  mapper-locations: classpath:mappers/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

【9】开启在启动类开启mybatis注解扫描

逆向工程

【10】根据自己生成的代码写一个测试

@SpringBootTest
class MallApplicationTests {
    @Autowired
    private CategoryEntityMapper categoryEntityMapper;
    @Test
    void contextLoads() {
        CategoryEntity categoryEntity = categoryEntityMapper.selectByPrimaryKey(3);
        System.out.println(categoryEntity.getName());
    }
}
上一篇:Apache Log4j2 核弹级漏洞


下一篇:浅谈Log4j和Log4j2的区别