最近一直忙于工作,也没想起来写博客,说白了就是懒,但后来发现我上篇文章是有人点赞关注的,于是又重新有了动力。刚好最近在单独做一个小程序后端,就分享一下项目中用到的一些技术吧,希望对你们有用,还望大佬轻喷。
为什么要用Mybatis自动生成
- 方便。能够一键生成持久层所需的Mapper、xml、以及PO类。
- 全面。自动生成的Example类可以动态的加载SQL条件,能满足我们90%甚至更高的SQL需求。
- 安全。自动生成的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类,本篇文章只说怎么生成和使用。
好了,到这里我们生成的持久层文件就能灵活使用了。