逆向工程在快速开发的项目中有使用到,这样可以避免冗余工作
【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());
}
}