MyBatis Generator ORM层面的代码自动生成器

news2024/11/13 10:18:57

在日常开发工作中,我们往往需要自己去构建各种数据表所对应的持久化对象(POJO)、用于操作数据库的接口(DAO)以及跟 DAO 所绑定的对应 XML。这都是一些重复性的操作,不需要多大技术含量。MyBatis Generator工具,能够帮助我们去自动生成这些文件。

MyBatis Generator 简介
作为一个基于 MyBatis 的独立工具,MyBatis Generator 能够满足我们以上的要求,能够通过简单的配置去帮我们生成数据表所对应的 POJO、DAO、XML 等文件,减去我们手动去生成这些文件的时间,有效提高开发效率。MyBatis Generator 运行方式多样,主要可以通过以下几种方式来运行:

  • 命令行
  • Ant
  • Maven
  • Java
  • IDE

Mybatis Generator简称 MBG,是一个专门为 MyBatis和 ibatis框架使用者提供的代码生成器。也可以快速的根据数据表生成对应的pojo类、Mapper接口、Mapper文件,甚至生成QBC风格的查询对象。

MyBatis Generator的使用
使用 MyBatis Generator,需要在项目中配置了数据库和 MyBatis 的相关依赖。

  • 引入插件
<dependency>         
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency> 


<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>


<!-- mybatis-generator -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

配置生成器文件

<?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>
<!--targetRuntime="MyBatis3"-->
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple">
    <!-- 生成的Java文件的编码 -->
    <property name="javaFileEncoding" value="UTF-8" />
    <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
    <property name="beginningDelimiter" value="`" />
    <property name="endingDelimiter" value="`" />

    <!-- 注释生成器 -->
    <commentGenerator>
        <property name="suppressDate" value="true" />
        <property name="suppressAllComments" value="true" />
    </commentGenerator>

    <!-- 必须要有的,使用这个配置链接数据库 @TODO:是否可以扩展 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mybatis"
                    userId="root"
                    password="1111">
    </jdbcConnection>

    <!-- 生成domain对象 -->
    <javaModelGenerator targetPackage="com.sunny.domain" targetProject="mybatis-11_MBG/src/main/java">
        <property name="enableSubPackages" value="true" />
    </javaModelGenerator>

    <!-- 生成Mapper文件 -->
    <sqlMapGenerator targetPackage="com.sunny.mapper" targetProject="mybatis-11_MBG/\src\main\resources">
        <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- 生成Mapper接口 -->
    <javaClientGenerator targetPackage="com.sunny.mapper" type="XMLMAPPER"
                         targetProject="mybatis-11_MBG/src/main/java">
        <property name="enableSubPackages" value="true" />
    </javaClientGenerator>


    <!-- Table   To   POJO -->
    <!--domainObjectName="User"-->
    <table tableName="user2" delimitIdentifiers="true">
        <property name="useActualColumnNames" value="true" />
        <generatedKey column="id" sqlStatement="JDBC" />
    </table>
  
</context>
</generatorConfiguration>

配置文件极为重要,对应数据库表生成POJO对象的映射关系由配置文件完成。

运行配置文件

在这里插入图片描述

Java代码运行:

public class Generator {
	public static void main(String[] args) throws Exception {
		//MBG执行过程中的警告信息
		List<String> warnings = new ArrayList<String>();
		//生成代码重复时,是否覆盖源代码
		boolean override = false;
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("generatorConfig.xml");
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = cp.parseConfiguration(in);

		DefaultShellCallback callback = new DefaultShellCallback(override);
		//创建MBG
		MyBatisGenerator mbg = new MyBatisGenerator(config, callback, warnings);
		mbg.generate(null);
		//输出警告信息
		for (String warn : warnings) {
			System.out.println(warn);
		}
	}
}

通过Maven插件运行:

如果使用Maven插件,那么不需要引入mybatis-generator-core依赖,只需要引入一个Maven的插件mybatis-generator-maven-plugin

<plugins>
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
            <execution>
                <id>Generate MyBatis Artifacts</id>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <!-- 输出详细信息 -->
            <verbose>true</verbose>
            <!-- 覆盖生成文件 -->
            <overwrite>true</overwrite>
            <!-- 定义配置文件 -->
            <configurationFile>${basedir}/src/main/resources/generator-configuration.xml</configurationFile>
        </configuration>
    </plugin>
</plugins>

通过mvn mybatis-generator:generate运行,或者IDE一键运行。

参考自:Mybatis代码生成器Mybatis-Generator使用详解感谢作者!

MyBatis Generator 超详细配置感谢作者!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优思学院|Minitab中的子组大小应该怎样填写?

关于SPC中的均值极差控制图&#xff08;X-bar-R Chart&#xff09;&#xff0c;都是质量管理和六西格玛最常用的工具之一&#xff0c;学生经常都会问及SPC和子组的问题。 所谓的子组&#xff08;Subgroup&#xff09;&#xff0c;是指在同一组条件&#xff08;包括人、机、物、…

人工智能辅助药物发现(2)苗头化合物筛选

目录AI辅助苗头化合物筛选概述AI辅助CPICPI数据库蛋白质和化合物的特征表示深度学习CPI预测经典Y型架构基于注意力的架构基于复合物的架构CPI性能评估苗头化合物筛选的发展前景挑战与趋势实际应用AI辅助苗头化合物筛选概述 新型小分子药物的开发通常从生物学家确定疾病靶标开始…

oracle数据库初始化问题及处理方法记录

环境&#xff1a; 服务器装机是redhat7.9&#xff0b;oracle19&#xff0c;用户是oracle&#xff0c;用户组dba 装机后进行初始化&#xff1a; 1.配置oracle用户环境变量&#xff1a;~/.bash_profile export ORACLE_SIDxxx export ORACLE_BASE/oracle/app/oracle export OR…

海康visionmaster-在WPF中使用Winform控件的方法

描述 环境&#xff1a;VM4.0.0 VS2013及以上 现象&#xff1a;在算子SDK开发过程中&#xff0c;用户如何使用封装好的Winform模板匹配等控件&#xff1f; 解答 首先添加对如下两个dll文件的引用&#xff1a;WindowsFormsIntegration.dll&#xff0c;System.Windows.Forms.…

深入MySQL字符编码与对照规则

前言 本篇和大家一起深入MySQL的字符集与对照规则&#xff0c;剖析下我们存储在MySQL中的字段是如何进行存储和校验比对的。 先看问题&#xff1a;unique key为什么失效了&#xff1f;拉齐共识&#xff1a;回顾下字符编码的基础知识&#xff0c;回炉下ASCII和Unicode。深入了解…

算法训练营 day22 二叉树 二叉搜索树的最近公共祖先 二叉搜索树中的插入操作 删除二叉搜索树中的节点

算法训练营 day22 二叉树 二叉搜索树的最近公共祖先 二叉搜索树中的插入操作 删除二叉搜索树中的节点 二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度…

第三章 逻辑与推理

命题逻辑谓词逻辑知识图谱推理因果推理 3.1 命题逻辑 逻辑和推理是基于知识的操作。 命题逻辑是应用一套形式化规则对以符号表示的描述性陈述进行推理的系统。在命题逻辑中&#xff0c;一个或真或假的描述性陈述被称为原子命题&#xff0c;对原子命题的内部结构不做任何解析。…

UnityC#的lock用法简记

UnityC#的lock用法简记简述代码实例一、单线程二、多线程无lock三、多线程使用lock死锁注意拓展lock->InvokeMonitor参考链接简述 多线程环境中&#xff0c;不使用lock锁&#xff0c;会形成竞争条件&#xff0c;导致错误。 使用lock锁可以保证当有线程操作某个共享资源时&a…

【ONE·C || 操作符详解】

总言 C语言&#xff1a;各种操作符的使用介绍。 文章目录总言1、算术操作符2、移位操作符2.1、整体介绍2.2、左移操作符2.3、右移操作符&#xff08;逻辑右移、算术右移&#xff09;3、位操作符3.1、整体介绍3.2、演示实例3.2.1、按位与3.2.2、按位或3.2.3、按位异或3.2.4、按位…

离线文章画像计算--Tfidf计算

2.4.2 Tfidf计算 2.4.2.1 目的 计算出每篇文章的词语的TFIDF结果用于抽取画像 2.4.2.2TFIDF模型的训练步骤 读取N篇文章数据文章数据进行分词处理TFIDF模型训练保存&#xff0c;spark使用count与idf进行计算利用模型计算N篇文章数据的TFIDF值 2.4.2.3 实现 想要用TFIDF进行…

【数据结构初阶(Java)】认识时间复杂度和空间复杂度

目录 前言&#xff1a; 1、算法效率 2、时间复杂度 1、大O的渐近表示法&#xff08;不是一个准确的&#xff09; 2、时间复杂度练习题&#xff08;没有明确要求&#xff0c;计算的时间复杂度就是最坏情况下&#xff09; 3、空间复杂度 前言&#xff1a; 如何衡量一个算法的…

Java中多线程wait和notify的用法

目录 一、wait和notify/notifyAll的由来 二、wait()方法 三、notify方法 3.1 notify的作用 3.2 wait和notify的 相互转换代码图 3.3 notifyAll 四、为什么需要notify和wait都需要上锁&#xff1f; 五、wait和sleep的对比 前言&#xff1a;由于线程之间是抢占式执行的&a…

Linux常用命令——tftp命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tftp 在本机和tftp服务器之间使用TFTP协议传输文件 补充说明 tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件。 TFTP是用来下载远程文件的最简单网络协议&#xff0c;它其于UDP协议而实现。嵌入式linu…

RTMP协议封装H264和H265协议详解

RTMP协议封装H264和H265协议详解 文章目录RTMP协议封装H264和H265协议详解1 RTMP和FLV2 RTMP协议封装H264视频流2.1 RTMP发送AVC sequence header2.2 RTMP发送AVCC视频帧数据‘3 RTMP协议封装H265视频流1 RTMP和FLV 有关RTMP和FLV格式详细介绍可查看如下文章&#xff1a; http…

2022 Moonbeam的点点滴滴离不开社区支持

Moonbeam成为首个上线波卡的平行链已经有一周年&#x1f382;啦&#xff0c;这是一段疯狂的旅程&#x1f3cd;。 为了纪念这一时刻&#xff0c;我们通过公开数据来回顾这一年的众多里程碑、更新和整体发生的一切。 让我们来回顾一下Moonbeam在2022年取得了哪些成就吧。 &…

GIS二维电子地图开发总结

二维平面地图&#xff0c;目前支撑设备渲染&#xff0c;真实场景&#xff0c;后期电子围栏&#xff0c;运动轨迹等业务需求做铺垫 一、所涉及的技术栈&#xff1a; 1.Openlayers,加载渲染地图 2.Geoserver 发布wms和wfs&#xff08;&#xff09;服务 3.Arcgis,Arcmap,进行源文件…

3.1、Ubuntu20桌面版远程连接SSHMobaXterm远程连接编辑器

连接SSH 安装系统完成并登陆后&#xff0c;输入 修改源码地址 进入apt文件夹 cd /etc/apt 备份文件 cp sources.list sources.list.bak 修改源码地址 vi sources.list # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of…

数据结构初级<排序>

本文已收录至《数据结构(C/C语言)》专栏&#xff01; 作者&#xff1a;ARMCSKGT 你的阅读和理解将是我极大的动力&#xff01; 目录 前言 排序的概念 常见排序简述 正文 直接插入排序 原理 代码实现 分析 希尔排序 原理 代码实现 分析 直接选择排序 原理 代码…

类加载的时机与过程

------ 摘自 周志明 《深入理解Java虚拟机》类加载的时机一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparati…

6、数组的常见运算

目录 一、数组的算术运算 二、数组的关系运算 三、数组的逻辑运算 一、数组的算术运算 &#xff08;1&#xff09;数组的加减运算&#xff1a;通过格式AB或A-B可实现数组的加减运算。但是运算规则要求数组A和B的维数相同。 示例1&#xff1a; A[1 2 3 4]B[2 4 6 8]C[1 1 …