Mybatis官方生成器學(xué)習(xí)教程
本文介绍了MyBatis官方生成器的使用方法和配置过程,包括生成Mapper接口、Entity类和XML映射文件的步骤,以及如何通过配置文件定制生成的代码。此外,还探讨了MyBatis Generator的优势、常用标签和高级特性,帮助开发者更高效地进行MyBatis官方生成器学习。
MyBatis简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,并将接口和 Java 的 POJO 传递给它。MyBatis 是一个比 JPA 或 Hibernate 这类 ORM 框架更轻量级的选择,非常适合那些 SQL 语句相对固定的项目。
MyBatis的基本概念
MyBatis 的核心接口是 SqlSession
,它是执行 SQL 语句的会话对象,它负责维护事务和结果集。SqlSession
可以通过 SqlSessionFactory
获得,SqlSessionFactory
通过 SqlSessionFactoryBuilder
创建。SqlSessionFactory
是线程安全的,可以在多个线程中共享,而 SqlSession
不是线程安全的,每次使用都应该创建一个新的 SqlSession
。
MyBatis 的配置文件 mybatis-config.xml
包含了数据库配置、环境配置、事务管理器、数据源、映射文件等信息。在映射文件中,定义了 SQL 语句,参数映射,结果映射等内容。Mapper
接口则定义了数据库操作的方法。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
MyBatis的优势和适用场景
MyBatis 的优势在于提供了灵活的 SQL 语句操作,可以针对不同的数据库进行优化,同时支持动态 SQL 语句,可以减少 SQL 语句的硬编码,提高代码的可读性和可维护性。MyB研讨会的适用场景包括但不限于:
- 需要手动控制 SQL 语句的项目
- 需要高度灵活的 SQL 语句操作的项目
- 需要快速开发和部署的项目
MyBatis 官方生成器 (MyBatis Generator) 是一个强大的工具,它可以根据数据库表生成 MyBatis 的 Mapper 接口、Entity 类和 XML 映射文件。该工具可以减少手工编写这些重复代码的工作,从而提高开发效率。
官方生成器的用途和优势
MyBatis Generator 可以自动生成 Mapper 接口、Entity 类、XML 映射文件,简化了 MyBatis 的开发流程。通过自动生成这些文件,可以减少开发人员的重复劳动,提高开发效率。
优势包括:
- 自动化:自动生成代码,减少手动编写代码的工作量
- 标准化:生成的代码结构一致,便于维护
- 可配置性:可以通过配置文件定制生成的代码结构和内容
- 可扩展性:支持编写自定义模板,可以满足不同的需求
官方生成器的安装和依赖配置
MyBatis Generator 可以通过 Maven 或 Gradle 依赖管理工具进行安装。以下是 Maven 中的依赖配置示例:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
安装完成后,需要编写配置文件 generatorConfig.xml
,用于配置数据库连接信息、表名、生成的实体类包名、Mapper 接口包名等信息。
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java"/>
<table tableName="t_user"/>
</context>
</generatorConfiguration>
配置完成后,可以通过运行 MyBatis Generator 的主类 MyBatisGenerator
来生成代码。
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.ConfigParser;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.ObjectFactory;
import org.mybatis.generator.internal.ObjectFactoryImpl;
import org.mybatis.generator.internal.db.DatabaseIntrospector;
import org.mybatis.generator.internal.db.DatabaseVersion;
import org.mybatis.generator.internal.db.IntrospectedTable;
import org.mybatis.generator.internal.util.FileHelper;
import org.mybatis.generator.internal.util.JavaBeansUtil;
import org.mybatis.generator.internal.util.StringUtility;
import org.mybatis.generator.internal.util.messages.Messages;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class MyBatisGeneratorRunner {
public static void main(String[] args) throws Exception {
String configFilePath = "path/to/generatorConfig.xml";
File configFile = new File(configFilePath);
FileInputStream fis = new FileInputStream(configFile);
ConfigurationParser cp = new ConfigurationParser(null);
Configuration config = cp.parseConfiguration(fis);
fis.close();
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, new ObjectFactoryImpl());
myBatisGenerator.generate(null);
}
}
配置官方生成器
编写配置文件
配置文件 generatorConfig.xml
包含了生成代码时需要的所有信息。以下是一个完整的配置文件示例:
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java"/>
<table tableName="t_user">
<columnOverride column="id" property="id"/>
<columnOverride column="name" property="name"/>
</table>
</context>
</generatorConfiguration>
解析配置文件的常用标签
<generatorConfiguration>
:根标签,包含全局配置信息。<context>
:配置生成代码的上下文环境,可以包含多个<context>
标签。<commentGenerator>
:配置注释生成器,可以设置是否生成注释,注释的内容等。<jdbcConnection>
:配置数据库连接信息,包括驱动类、URL、用户名和密码。<javaModelGenerator>
:配置生成的 Java 模型类的属性,例如包名、文件路径等。<sqlMapGenerator>
:配置生成的 XML 映射文件的属性,例如包名、文件路径等。<javaClientGenerator>
:配置生成的 Mapper 接口的属性,例如包名、文件路径等。<table>
:配置生成指定表的代码,可以设置表名、列名等。<columnOverride>
:覆盖表中的列名和实体中的属性名。
如何生成Mapper接口和XML文件
通过配置文件 generatorConfig.xml
,可以生成指定表的 Mapper 接口和 XML 映射文件。下面是一个生成 t_user
表的配置示例:
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java"/>
<table tableName="t_user">
<columnOverride column="id" property="id"/>
<columnOverride column="name" property="name"/>
</table>
</context>
</generatorConfiguration>
运行 MyBatis Generator 的主类 MyBatisGenerator
,会根据配置生成对应的 Mapper 接口和 XML 映射文件:
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.ConfigParser;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.ObjectFactory;
import org.mybatis.generator.internal.ObjectFactoryImpl;
import org.mybatis.generator.internal.util.FileHelper;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class MyBatisGeneratorRunner {
public static void main(String[] args) throws Exception {
String configFilePath = "path/to/generatorConfig.xml";
File configFile = new File(configFilePath);
FileInputStream fis = new FileInputStream(configFile);
ConfigurationParser cp = new ConfigurationParser(null);
Configuration config = cp.parseConfiguration(fis);
fis.close();
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, new ObjectFactoryImpl());
try {
myBatisGenerator.generate(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
如何生成Entity和Mapper XML文件
在配置文件 generatorConfig.xml
中,设置 <javaModelGenerator>
和 <sqlMapGenerator>
标签,可以生成指定表的 Entity 类和 Mapper XML 文件。
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java"/>
<table tableName="t_user">
<columnOverride column="id" property="id"/>
<columnOverride column="name" property="name"/>
</table>
</context>
</generatorConfiguration>
在上面的配置中,<javaModelGenerator>
标签设置生成的 Java 模型类的包名和文件路径,<sqlMapGenerator>
标签设置生成的 XML 映射文件的包名和文件路径。
定制生成的代码
MyBatis Generator 支持通过配置文件定制生成的代码。例如,可以通过设置 <property>
标签来控制生成的代码中注释的生成。
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java"/>
<table tableName="t_user">
<columnOverride column="id" property="id"/>
<columnOverride column="name" property="name"/>
</table>
</context>
</generatorConfiguration>
在上面的配置中,<commentGenerator>
标签中的 suppressAllComments
属性设置为 true
,表示不生成任何注释。
使用自定义模板生成代码
MyBatis Generator 支持使用自定义模板生成代码,可以通过 <template>
标签来引用自定义模板文件。
<generatorConfiguration>
<classPathEntry location="path/to/mysql-connector-java.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<templateLocation>path/to/custom/templates/JavaModel</templateLocation>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources">
<templateLocation>path/to/custom/templates/SqlMap</templateLocation>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java">
<templateLocation>path/to/custom/templates/JavaClient</templateLocation>
</javaClientGenerator>
<table tableName="t_user">
<columnOverride column="id" property="id"/>
<columnOverride column="name" property="name"/>
</table>
</context>
</generatorConfiguration>
在上面的配置中,<javaModelGenerator>
、<sqlMapGenerator>
和 <javaClientGenerator>
标签中的 templateLocation
属性指定了自定义模板文件的路径。
配置和生成过程中遇到的常见问题
- 数据库连接失败:请检查数据库连接信息,确保驱动类、URL、用户名和密码正确。
- 生成代码结构不一致:请检查配置文件中的
targetPackage
和targetProject
属性是否正确。 - 生成代码缺少某些字段:请检查配置文件中的
<columnOverride>
标签是否正确设置,确保列名和属性名映射正确。
解决问题的方法和技巧
- 数据库连接失败:确保数据库服务已经启动,并且配置文件中的连接信息正确。
- 生成代码结构不一致:检查配置文件中的
targetPackage
和targetProject
属性是否正确设置,确保生成的代码路径一致。 - 生成代码缺少某些字段:检查配置文件中的
<columnOverride>
标签是否正确设置,确保列名和属性名映射正确。
通过以上步骤,可以有效地使用 MyBatis Generator 生成 MyBatis 所需的代码,减少手动编写代码的工作量,提高开发效率。更多关于 MyBatis Generator 的使用方法和高级特性可以在官方文档中找到。
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章