Java最强持久层框架MyBatis-Generator-用法详解(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Java最强持久层框架MyBatis-Generator-用法详解(上)

MBG全部指代MyBatis Generator:


XML配置详解

在MBG中,最主要也最重要的就是XML配置文件,因此本文主要就是XML配置

这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。

1. 配置文件头

<?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">

2. 根节点<generatorConfiguration>

generatorConfiguration节点没有任何属性,直接写节点即可,如下:

<generatorConfiguration>
    <!-- 具体配置内容 -->
</generatorConfiguration>  

3. <generatorConfiguration>的子元素

从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration元素的子元素(有严格顺序)

  1. <properties> (0个或1个)
  2. <classPathEntry> (0个或多个)
  3. <context> (1个或多个)


3.1 <properties> 元素

这个元素用来指定外部的属性元素,不是必须的元素。


元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的jdbc信息和targetProject属性会很有用


这个属性可以通过resource或者url来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错


resource:指定classpath下的属性文件,使用类似com/myproject/generatorConfig.properties这样的属性值。


url:可以指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties


3.2 <classPathEntry> 元素

这个元素可以0或多个,不受限制。

最常见的用法是通过这个属性指定驱动的路径,例如:

<classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/>


注意,classPathEntry只在下面这两种情况下才有效

  • 当加载 JDBC 驱动内省数据库时
  • 当加载根类中的 JavaModelGenerator 检查重写的方法时


**因此,**如果你需要加载其他用途的jar包,classPathEntry起不到作用,不能这么写,解决的办法就是将你用的jar包添加到类路径中,在IDE中运行的时候,添加jar包比较容易。当从命令行执行的时候,需要用java -cp xx.jar,xx2.jar xxxMainClass这种方式在-cp后面指定来使用(注意-jar会导致-cp无效)。


3.3 <context> 元素

在MBG的配置中,至少需要有一个<context>元素。


<context>元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的<context>


该元素只有一个必选属性id,用来唯一确定一个<context>元素,该id属性可以在运行MBG时使用


此外还有几个可选属性


defaultModelType

这个属性很重要,这个属性定义了MBG如何生成实体类

这个属性有以下可选值:

  • conditional:这是默认值,这个模型和下面的hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
  • flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用。
  • hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。
  • targetRuntime:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:
  • MyBatis3:这是默认值
  • MyBatis3Simple
  • Ibatis2Java2
  • Ibatis2Java5 一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。
  • introspectedColumnImpl:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn该类的实现类。该属性的作用可以查看扩展MyBatis Generator。

一般情况下,我们使用如下的配置即可:


如果你希望不生成和Example查询有关的内容,那么可以按照如下进行配置:


使用MyBatis3Simple可以避免在后面的<table>中逐个进行配置(后面会提到)

MBG配置中的其他几个元素,基本上都是<context>的子元素,这些子元素(有严格的配置顺序)包括:


其中<property>属性比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解<property>属性前,我们先看看什么是分隔符?


这里通过一个例子说明。假设在Mysql数据库中有一个表名为user info,你没有看错,中间是一个空格,这种情况下如果写出select * from user info这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:

select * from user info

这里的使用的**反单引号()**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。 下面继续看`支持的属性:


  • autoDelimitKeywords
  • beginningDelimiter
  • endingDelimiter
  • javaFileEncoding
  • javaFormatter
  • xmlFormatter

由于这些属性比较重要,这里一一讲解。


首先是autoDelimitKeywords,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加分隔符。


然后这里继续上面的例子来讲beginningDelimiter和endingDelimiter属性。

由于beginningDelimiter和endingDelimiter的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号()**,配置如下: <property name="beginningDelimiter" value=""/>


属性javaFileEncoding设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。


最后两个javaFormatter和xmlFormatter属性可能会很有用,如果你想使用模板来定制生成的java文件和xml文件的样式,你可以通过指定这两个属性的值来实现。


接下来分节对其他的子元素逐个进行介绍。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
11天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
13天前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
21天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
81 8
|
21天前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
52 7
|
1月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1027 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
SQL XML Java
48 0
|
1月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
123 12
|
19天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
85 1
|
19天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
73 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案