自动生成通用接口分为两步,第一步是编写生成配置文件,注释已经添加了,直接看代码。
<?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 targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property value="`"/> <property value="`"/> <property value="UTF-8"/> <!-- 是否使用通用 Mapper 提供的注释工具,默认 true 使用,这样在生成代码时会包含字段的注释(目前只有 mysql 和 oracle 支持)--> <property value="true"/> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <!-- 配置后生成的 Mapper 接口都会自动继承这个接口--> <property value="tk.mybatis.mapper.common.MySqlMapper"/> </plugin> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <!-- 配置后生成的 Mapper 接口都会自动继承这个接口 --> <property value="tk.mybatis.mapper.common.Mapper"/> <!-- 是否区分大小写,默认 false --> <property value="true"/> </plugin> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true" userId="root" password="123"> </jdbcConnection> <!-- 对于生成的pojo所在包 --> <javaModelGenerator targetPackage="net.codingme.boot.domain" targetProject="src/main/java"/> <!-- 对于生成的mapper所在目录 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/> <!-- 配置mapper对应的java映射 --> <javaClientGenerator targetPackage="net.codingme.boot.domain.mapper" targetProject="src/main/java" type="XMLMAPPER"/> <!-- 要生成那些表(更改tableName和domainObjectName就可以) --> <table tableName="book" domainObjectName="Book"/> </context> </generatorConfiguration>与上次不同的是这次增加了两个 plugin,后面生成的 Mapper 接口都会自动继承这些类。
自动生成代码写好配置文件之后,还需要写一个生成程序,用于加载配置文件,运行就可以生成相关的实体类、Mapper 接口、Mapper xml .
import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.File; import java.util.ArrayList; /** * <p> * Mybatis generator的逆向生成工具类 * * @Author niujinpeng */ public class MybatisGenerator { public void generator() throws Exception { ArrayList<String> warnings = new ArrayList<>(); boolean overwrite = true; // 指定你想工程配置文件 File configFile = new File("generatorConfig.xml"); System.out.println(configFile.getAbsolutePath()); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); for (String warning : warnings) { System.out.println(warning); } } public static void main(String[] args) throws Exception { MybatisGenerator mybatisGenerator = new MybatisGenerator(); mybatisGenerator.generator(); } } 自动生成结果运行完毕上面程序之后,自动生成了 Book.java.
@Table(name = "book") @ToString // 手动添加的 tostring 注解 public class Book { @Id private Integer id; /** * 书籍作者 */ private String author; /** * 书籍名称 */ private String name; /** * 书籍价格 */ private Float price; // 省略下面的自动生成代码 通用 Mapper上面的程序也自动生成了 BookMapper 接口,且继承了配置的 MySqlMapper 和 Mapper 接口。
import net.codingme.boot.domain.Book; import org.springframework.stereotype.Repository; import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; @Repository public interface BookMapper extends MySqlMapper<Book>, Mapper<Book> { }这两个接口里实现了很多常用操作。
生成完成之后要在 Springboot 启动器上添加 MapperScan 注解指定要扫描的 mapper 位置。
@tk.mybatis.spring.annotation.MapperScan(basePackages = "net.codingme.boot.domain.mapper") @SpringBootApplication public class BootApplication { public static void main(String[] args) { SpringApplication.run(BootApplication.class, args); } } 单元测试和分页测试