Logo

郎哥编程

自动创建数据库操作类和XML映射文件

2019-07-10 187

在《解读MyBatis数据库开发框架》一课中,我们了解了MyBatis的数据层技术架构。MyBatis会自动创建三类文件:一类文件是实体文件,也就是每个数据库表对应的类文件,该类文件一般存放到POJO目录下;一类文件是数据层接口文件,由业务层的业务类调用,该类文件一般存放到DAO目录;一类文件是Mapper文件,Mapper文件是XML文件,该文件是DAO接口的实现文件,该类文件一般存放到Mapper目录。

在eshop项目的src目录com.eshop包下,分别建立pojo包、dao包、mapper包。

image.png

                                          

图 1 eshop目录结构

下一步我们可以利用MyBatisGenerator插件来自动生成pojo、dao、mapper文件。MyBatis框架本身不包含MyBatisGenerator插件,因此需要从网上下载MyBatisGenerator插件。GitHub地址:

https://github.com/yundianzixun/mybatis-generator-1.35

下载后解压缩包,将下图所有的jar包复制到eshop项目WEB-INF目录下的lib目录,并刷新lib目录。


建立MyBatis代码自动生成类,该类调用MyBatis的MyBatisGenerator类来自动生成数据库操作类和XML映射文件。在eshop项目的src目录com.eshop包下新建util包,在util包下新建GeneratorUtil.java类文件(选择创建main函数)。

package com.hgzp.ebook.util;
 
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
 
public class GeneratorUtil {
    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
     boolean overwrite = true;
     File configFile = new File("generatorConfig.xml");
     ConfigurationParser cp = new ConfigurationParser(warnings);
     try {
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
         myBatisGenerator.generate(null);
         Iterator<String> it = warnings.iterator();
         while (it.hasNext())
         {
            System.out.println(it.next());
         }
         System.out.println("mapper&&pojo生成完毕");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Mybatis代码自动生成插件需要从配置文件中读取数据库的访问地址、登录账号和密码,还需要从配置文件中读取数据库的哪些表需要生成POJO类、DAO接口类和Mapper实现类,以及这些类存储到什么位置。配置文件为generatorConfig.xml,在eshop项目的根目录下新建generatorConfig.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="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
       <jdbcConnection driverClass="com.mysql.jdbc.Driver"
           connectionURL="jdbc:mysql://192.168.62.90:3306/shop?useUnicode=true&amp;characterEncoding=utf8" userId="root" password="~123456q">
        </jdbcConnection>
       <!-- 数据库类型与java类型转换 -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成pojo类存放位置 -->
        <javaModelGenerator targetPackage="com.eshop.pojo" targetProject="D:\javeworkspace\eshop\src">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="false"/>
        </javaModelGenerator>
        <!-- 生成映射文件存放位置 -->
        <sqlMapGenerator targetPackage="com.eshop.mapper" targetProject="D:\javeworkspace\eshop\src">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成Dao类存放位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.eshop.dao" targetProject="D:\javeworkspace\eshop\src">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 生成对应表及类名 -->
        <table schema="shop" tableName="category" />
        <table schema="shop" tableName="goods" />
        <table schema="shop" tableName="order" />
        <table schema="shop" tableName="shopcart" />
        <table schema="shop" tableName="shoper" />
        <table schema="shop" tableName="user" />
    </context>
</generatorConfiguration>

注意:配置文件的数据库访问路径和相关物理路径,与数据库部署和项目路径有关,请根据数据库部署和项目路径情况修改。

配置文件中比较重要的是五个配置项:

<jdbcConnection>主要用于配置MySQL数据库的访问路径,访问账号和密码。这里需要注意的是,如果MySQL数据库采用的是utf8编码,还需要在数据库访问路径后面缀上utf8编码的设置语句。

<javaModelGenerator>主要用于配置实体文件pojo类的存放位置,targetPackage配置存放在哪个包下,targetProject配置pojo类的物理存储位置。

<sqlMapGenerator>主要用于配置mapper文件的存放位置。

<javaClientGenerator>主要用于配置doc类的存放位置。

<table>主要用于配置所连接数据库的哪些表需要自动创建类和XML映射文件。tableName配置数据库相对应的表名。schema配置对应的数据库名。

配置文件配置完成后,以Java Application方式运行GeneratorUtil类文件。GeneratorUtil类会根据配置文件内容自动创建数据库操作类和XML映射文件。

image.png


图 2 GeneratorUtil自动创建的代码文件

上图中dao包、mapper包、pojo包下面的类文件和XML文件都是由MyBatisGenerator插件自动创建的文件。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论