最近一直忙于工作,也没想起来写博客,说白了就是懒,但后来发现我上篇文章是有人点赞关注的,于是又重新有了动力。刚好最近在单独做一个小程序后端,就分享一下项目中用到的一些技术吧,希望对你们有用,还望大佬轻喷。

为什么要用Mybatis自动生成

  1. 方便。能够一键生成持久层所需的Mapper、xml、以及PO类。
  2. 全面。自动生成的Example类可以动态的加载SQL条件,能满足我们90%甚至更高的SQL需求。
  3. 安全。自动生成的Mybatis代码几乎没有bug,或许有,但目前我还没有遇到过。而且,我自认为我写的代码和自动生成的代码是没有可比性的。

怎么用

1、导入Mybatis自动生成依赖

spring依赖和mybatis依赖这里省略。有需要的可以找spring整合Mybatis。一搜全都是。

<!--mybatis自动生成-->
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-core</artifactId>
  <version>1.3.7</version>
</dependency>

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>
  <!-- 数据库驱动 -->
  <context id="DB2tables" targetRuntime="MyBatis3">
  
    <!-- 去掉生成出来的代码的注解 -->
    <commentGenerator>
      <property name="suppressAllComments" value="true" />
      <property name="suppressDate" value="true" />
    </commentGenerator>
    
    <!--数据库链接URL,用户名、密码 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/你的数据库名称?serverTimezone=UTC" userId="你的数据库账号" password="你的数据库密码">
      <property name="nullCatalogMeansCurrent" value="true" />
    </jdbcConnection>
    
    <!--类型解析-->
    <javaTypeResolver>
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
    
    <!-- 生成模型的包名和位置 -->
    <javaModelGenerator targetPackage="com.example.xcx.dao.po.product" targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
      <!--从数据库返回的值去除前后空格-->
      <property name="trimStrings" value="true" />
    </javaModelGenerator>
    
    <!-- 生成映射文件的包名和位置 -->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
      <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>
    
    <!-- 生成DAO的包名和位置 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.xcx.dao.api.product" targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>
    
    <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 -->
    <table tableName="你的数据库表名" domainObjectName="对应要生成的实体类的名称" />
  </context>
</generatorConfiguration>

里面每个配置的注释我都写在里面了,根据自己的项目情况配置。

3、将这个配置文件路径配置到项目的pom文件中,告诉spring自动生成的时候扫描加载这个配置文件

<build>
  <plugins>
    <plugin>
    
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.7</version>
      
      <configuration>
        <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
        <overwrite>true</overwrite>
        <verbose>true</verbose>
      </configuration>
      
      <dependencies>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.18</version>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
      
    </plugin>
  </plugins>
</build>

看到这里想必很多小伙伴都不理解为什么就加一个扫描路径,还需要mysql依赖包呢? 况且我在build外面的dependency中已经配置过mysql的包了,这里为什么还要再配置一遍呢?

这是因为mybatis自动生成本就是一个插件,它只依赖了我们前面导入的mybatis自动生成的jar包,它不知道我们会拿它去连什么数据库可能是mysql,也可能是Oracle、SqlServer、sqllite.....所以需要我们自己添加数据库依赖。我们前面在dependency中添加的数据库依赖是用于我们项目操作数据库的,而这里的引入,是为了使mybatis-generator知道我们数据库中都有什么表,什么字段,什么类型。可能两处依赖有共用的方法,只是我还不知道,如果真的有,还望不吝赐教。

好了。配置到这里就结束了,很简单,却很好用。这时候我们更新一下项目(eclipse可以使用maven update ;IDEa可以点击import或reimport)就能看到我们的mybatis自动生成插件了。如图:

把配置文件中需要配置的信息都配置正确,我们就可以双击mybatis-generator生成代码了:

看看我们生成的mapper文件:

po实体类文件:

xml文件:

好的,生成的文件都生成完了,那应该怎么用呢?文章前面有提到,mybatis自动生成的代码非常全面,能解决我们90%甚至以上的SQL需求,首先我们大概讲解一下example文件

Example文件是mybatis根据我们的表字段生成的条件类。我们可以用改文件中的方法组合出任何我们想要的where条件,mybatis在Example文件中创建了一个内部的抽象类GeneratedCriteria,里面封装了我们表中各个字段的各种方法。

调用的时候,我们通过创建Example类然后example.createCriteria()创建GeneratedCriteria对象就可以调用其中的方法了。下面是示例

关于 GeneratedCriteria对象里面对我们各个字段的各种方法的释义,由于是在是太多了,可以看我下篇文章专门讲解Example类,本篇文章只说怎么生成和使用。

好了,到这里我们生成的持久层文件就能灵活使用了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐