项目分享 | 使用MyBatis Generator自动生成数据库映射文件

请添加图片描述

大家好,我是中国码农摘星人。
欢迎分享/收藏/赞/在看!

Mybatis-demo

1 专业名词解释

1.1 Dao

Dao层叫数据访问层、持久层,全称为Data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个Dao一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,完全根据Domain的要求来查询数据,建议Dao只做原子操作,增删改查。

1.2 Domain

Domain层考虑业务逻辑,例如过滤条件,放行或者返回,以及数据的处理,为调用Dao层做好准备,一个Domain可以调用一个或者一组相关的Dao层。

1.3 Service

Service层叫服务层,被称为服务。Service层调用一个或者一组Domain层,主要是展现需要开放出去的接口,其中Domain层不是所有的接口都要再Dervice层体现的,可能仅在Service层开放几个接口出去。此外,主要接口需要对接受的参数要尽量的扩大化,也就是说可以容纳各种类型的参数的接入(Object),然后需要在Service层做好转换,以备Domain层使用。

1.4 Controler

Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。

1.5 业务逻辑

用户发出请求 -> Controller处理传过来的参数 -> Domain接收控制数据转向(可以返回也可以进入Service -> Service验证数据正确性或者是否符合业务要求 -> Dao存入

2 MyBatis Generator简介

MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写SQL和对象代码。

2.1 MyBatis Generator将生成

2.1.1 与表结构匹配的Java POJO

这可能包括:

  • 一个匹配表的主键的类(如果有主键)
  • 一个匹配表的非主键字段的类(BLOB字段除外)
  • 包含表的BLOB字段的类(如果表具有BLOB字段)
  • 用于启用动态选择,更新和删除的类

这些类之间存在适当的继承关系。请注意,生成器可以配置为生成不同类型的POJO层次结构 - 例如,如果您愿意,可以选择为每个表生成单个域对象。

2.1.2 MyBatis / iBATIS兼容的SQL Map XML文件

MBG在配置中的每个表上为简单的CRUD函数生成SQL。生成的SQL语句包括:

  • 插入
  • 按主键更新
  • 通过示例更新(使用动态where子句)
  • 按主键删除
  • 按示例删除(使用动态where子句)
  • 按主键选择
  • 按示例选择(使用动态where子句)
  • 以身作则

根据表的结构,这些语句有不同的变体(例如,如果表没有主键,则MBG不会通过主键功能生成更新)。

2.1.3 适当使用上述对象的Java客户端类

Java客户端类的生成是可选的。MBG将为MyBatis 3.x生成以下类型的Java客户端:

  • 适用于MyBatis 3.x映射器基础结构的映射器接口

MBG将为iBATIS 2.x生成以下类型的Java客户端:

  • 符合Spring框架的DAO
  • 仅使用iBATIS SQL映射API的DAO。这些DAO可以生成两种:通过构造函数或setter注入提供SqlMapClient。
  • 符合iBATIS DAO框架的DAO(iBATIS的可选部分,现在不推荐使用此框架,我们建议您使用Spring框架)

MyBatis生成器设计为在迭代开发环境中运行良好,并且可以作为Ant任务或Maven插件包含在连续构建环境中。迭代运行MBG时需要注意的重要事项包括:

  • 如果存在与新生成的XML文件同名的现有文件,MBG将自动合并XML文件。MBG不会覆盖您对其生成的XML文件所做的任何自定义更改。您可以反复运行它,而不必担心会丢失对XML的自定义更改。MBG将替换先前运行中生成的任何XML元素。
  • MBG 不会合并Java文件,它可以覆盖现有文件或使用不同的唯一名称保存新生成的文件。如果对生成的Java文件进行更改并以迭代方式运行MBG,则必须手动合并更改。当作为Eclipse 插件运行时 ,MBG可以自动合并Java文件。

3 MyBatis Generator下载

3.1 源码地址

https://github.com/mybatis/generator/releases

3.2 官方文档

http://www.mybatis.org/generator/index.html

4 Mybatis Generator配置和使用

4.1 数据库及数据表创建

4.1.1 新建数据库:Mybatis-demo
4.1.2 新建数据表ad
--
-- Table structure for table `ad`
--

DROP TABLE IF EXISTS `ad`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ad`
(
    `id`          int(11) NOT NULL AUTO_INCREMENT,
    `name`        varchar(63)  NOT NULL DEFAULT '' COMMENT '广告标题',
    `link`        varchar(255) NOT NULL DEFAULT '' COMMENT '所广告的商品页面或者活动页面链接地址',
    `url`         varchar(255) NOT NULL COMMENT '广告宣传图片',
    `position`    tinyint(3) DEFAULT '1' COMMENT '广告位置:1则是首页',
    `content`     varchar(255)          DEFAULT '' COMMENT '活动内容',
    `start_time`  datetime              DEFAULT NULL COMMENT '广告开始时间',
    `end_time`    datetime              DEFAULT NULL COMMENT '广告结束时间',
    `enabled`     tinyint(1) DEFAULT '0' COMMENT '是否启动',
    `add_time`    datetime              DEFAULT NULL COMMENT '创建时间',
    `update_time` datetime              DEFAULT NULL COMMENT '更新时间',
    `deleted`     tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
    PRIMARY KEY (`id`),
    KEY           `enabled` (`enabled`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='广告表';
4.1.3 往数据表中插入数据
--
-- Dumping data for table `ad`
--

LOCK
TABLES `ad` WRITE;
/*!40000 ALTER TABLE `ad` DISABLE KEYS */;
INSERT INTO `ad`
VALUES (1, '合作 谁是你的菜', '', 'http://yanxuan.nosdn.127.net/65091eebc48899298171c2eb6696fe27.jpg', 1, '合作 谁是你的菜', NULL,
        NULL, 1, '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0),
       (2, '活动 美食节', '', 'http://yanxuan.nosdn.127.net/bff2e49136fcef1fd829f5036e07f116.jpg', 1, '活动 美食节', NULL, NULL,
        1, '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0),
       (3, '活动 母亲节', '', 'http://yanxuan.nosdn.127.net/8e50c65fda145e6dd1bf4fb7ee0fcecc.jpg', 1, '活动 母亲节5', NULL, NULL,
        1, '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0);
/*!40000 ALTER TABLE `ad` ENABLE KEYS */;
UNLOCK
TABLES;

4.2 新建项目Mybatis-demo

4.2.1 在pom.xml中导入插件
<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.7</version>
    <configuration>
        <configurationFile>
            mybatis-generator/generatorConfig.xml
        </configurationFile>
        <overwrite>true</overwrite>
        <verbose>true</verbose>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>com.itfsw</groupId>
            <artifactId>mybatis-generator-plugin</artifactId>
            <version>1.2.12</version>
        </dependency>

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
    </dependencies>
</plugin>
4.2.2 编写配置文件

在项目根目录下新建文件夹mybatis-generator,并创建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="mysqlgenerator" targetRuntime="MyBatis3">
        <property name="autoDelimitKeywords" value="true"/>
        <!--可以使用``包括字段名,避免字段名与sql保留字冲突报错-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 自动生成toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- 自动生成equals方法和hashcode方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>

        <!-- 非官方插件 https://github.com/itfsw/mybatis-generator-plugin -->
        <!-- 查询单条数据插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
        <!-- 查询结果选择性返回插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.SelectSelectivePlugin"/>
        <!-- Example Criteria 增强插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin"/>
        <!-- 数据Model属性对应Column获取插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
        <!-- 逻辑删除插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
            <!-- 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 -->
            <!-- 逻辑删除列类型只能为数字、字符串或者布尔类型 -->
            <property name="logicalDeleteColumn" value="deleted"/>
            <!-- 逻辑删除-已删除值 -->
            <property name="logicalDeleteValue" value="1"/>
            <!-- 逻辑删除-未删除值 -->
            <property name="logicalUnDeleteValue" value="0"/>
        </plugin>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!--<property name="suppressAllComments" value="true"/>-->
        </commentGenerator>

        <!--数据库连接信息-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/Mybatis-demo?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;verifyServerCertificate=false&amp;useSSL=false"
                        userId="root"
                        password="root"/>

        <javaTypeResolver>
            <property name="useJSR310Types" value="true"/>
        </javaTypeResolver>

        <javaModelGenerator targetPackage="com.hyd.mybatisdemo.domain" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.hyd.mybatisdemo.dao" targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.hyd.mybatisdemo.dao" targetProject="src/main/java"/>
        <!--表名-->
        <table tableName="ad">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>

    </context>
</generatorConfiguration>
4.2.3 运行插件

打开窗口右侧的Maven,依次展开Mybatis-demo->Plugin->mybatis-generator,双击mybatis-generator:generate,可以看到控制台的相关信息以及生成的 dao、domain、com.hyd.mybatisdemo.dao

在这里插入图片描述

4.3 开始使用

4.3.1 新建AdService.java
@Service
public class AdService {
    @Resource
    private AdMapper adMapper;

    public List<Ad> queryIndex() {
        AdExample example = new AdExample();
        example.or().andPositionEqualTo((byte) 1).andDeletedEqualTo(false).andEnabledEqualTo(true);
        return adMapper.selectByExample(example);
    }

    public List<Ad> querySelective(String name, String content, Integer page, Integer limit, String sort, String order) {
        AdExample example = new AdExample();
        AdExample.Criteria criteria = example.createCriteria();

        if (!StringUtils.isEmpty(name)) {
            criteria.andNameLike("%" + name + "%");
        }
        if (!StringUtils.isEmpty(content)) {
            criteria.andContentLike("%" + content + "%");
        }
        criteria.andDeletedEqualTo(false);

        if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
            example.setOrderByClause(sort + " " + order);
        }

        PageHelper.startPage(page, limit);
        return adMapper.selectByExample(example);
    }

    public int updateById(Ad ad) {
        ad.setUpdateTime(LocalDateTime.now());
        return adMapper.updateByPrimaryKeySelective(ad);
    }

    public void deleteById(Integer id) {
        adMapper.logicalDeleteByPrimaryKey(id);
    }

    public void add(Ad ad) {
        ad.setAddTime(LocalDateTime.now());
        ad.setUpdateTime(LocalDateTime.now());
        adMapper.insertSelective(ad);
    }

    public Ad findById(Integer id) {
        return adMapper.selectByPrimaryKey(id);
    }
}
4.3.2 新建AdController.java
@RestController
@RequestMapping
public class AdController {

    @Autowired
    private AdService adService;

    @GetMapping("/getad")
    public Object getad() {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        Map<String, Object> data = new HashMap<>();
        Callable<List> bannerListCallable = () -> adService.queryIndex();
        FutureTask<List> bannerTask = new FutureTask<>(bannerListCallable);
        executorService.submit(bannerTask);
        try {
            data.put("banner", bannerTask.get());
        } catch (Exception e) {
            e.printStackTrace();
        }
        executorService.shutdown();
        return ResponseUtil.ok(data);
    }

}
4.3.3 测试接口
http://localhost:8080/getad

在这里插入图片描述

5 项目地址

Gitee - Mybatis-demo

整理不易,欢迎 StarFork _ ,谢谢~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mybatis也能方向生成代码,能方向生成实体类(po)、mapper接口和Mapper接口映射文件,能减少我们代码的工作量。详细步骤如下 1、下载mybatis生成架包工具MyBatis_Generator_1.3.1.zip,解压架包把features、plugins文件夹下的架包分别拷贝到eclipse安装目录下的features、plugins文件夹。重启eclipse就行。 解压后图片如下: Eclipse路径如图: 拷贝替换如图: 2、创建generatorConfig.xml文件,安装好mybatis 就能创建generatorConfig.xml 3、配置generatorConfig.xml配置文件,详细如下 [html] view plain copy <?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> <!-- <classPathEntry location="D:\\rep\\mysql\\mysql-connector-java\\5.1.19\\mysql-connector-java-5.1.19.jar" /> --> <classPathEntry location="D:\\repo\\com\\oracle\\ojdbc14\\10.2.0.1.0\\ojdbc14-10.2.0.1.0.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> <property name="suppressDate" value="true" /> </commentGenerator> <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:orcl4" userId="xxx" password="xxxx" /> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> </javaTypeResolver> <javaModelGenerator targetPackage="com.pcmall.domain.sale.order" targetProject="pos-service/src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <sqlMapGenerator targetPackage="mybatis.mapper.sale.order" targetProject="pos-service/src/main/resources"> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <javaClientGenerator targetPackage="com.pcmall.dao.sale.order" targetProject="pos-service/src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <table tableName="hs_zxzflx" enableSelectByExample="false" enableDeleteByExample="false" enableCountByExample="false" selectByExampleQueryId="true" enableUpdateByExample="false"> <!-- <generatedKey column="ID" sqlStatement="oracle" identity="true" /> --> </table> </context> </generatorConfiguration> 4、右击generatorConfig.xml 点击Generate MyBatis/iBATIS Artifacts 生成对应接口、接口映射文件、实体类 5、查看结果
### 回答1: MyBatis Generator 是一个可以自动化生成MyBatis代码的工具,包括 Mapper 接口、Mapper XML 文件以及 POJO 类等。如果你想要生成 Mapper XML 文件,可以按照以下步骤进行操作: 1. 配置 MyBatis Generator 插件:在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> ``` 2. 编写 MyBatis Generator 配置文件:创建一个名为 generatorConfig.xml 的文件,并按照以下格式进行配置: ```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="context1"> <!-- 配置数据库连接信息 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root"> </jdbcConnection> <!-- 配置生成的 Java 模型类的包名和位置 --> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 配置生成的 Mapper 接口的包名和位置 --> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 配置生成的 Mapper XML 文件的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 配置要生成的表 --> <table tableName="user" domainObjectName="User" /> </context> </generatorConfiguration> ``` 其中,`jdbcConnection` 标签用于配置数据库连接信息,`javaModelGenerator` 标签用于配置生成的 Java 模型类的包名和位置, `sqlMapGenerator` 标签用于配置生成的 Mapper 接口的包名和位置,`javaClientGenerator` 标签用于配置生成的 Mapper XML 文件的位置,`table` 标签用于配置要生成的表。 3. 运行 MyBatis Generator:在工程根目录下执行以下命令: ``` mvn mybatis-generator:generate ``` 执行命令后,MyBatis Generator自动生成 Mapper XML 文件,并放置在 `target/generated-sources/mybatis-generator` 目录下。 注意:在执行命令之前,需要先将 Maven 的 settings.xml 文件中的本地仓库地址修改为你自己的仓库地址,否则可能会出现找不到 MyBatis Generator 插件的情况。 ### 回答2: MyBatis Generator是一个在Java项目自动生成MyBatis数据库访问层代码的工具。它能够根据数据库表结构自动生成包含增删改查等基本方法的Mapper接口和对应的XML映射文件生成Mapper接口和XML映射文件的过程非常简单。首先需要配置MyBatis Generator生成规则,配置文件中包括数据库连接信息以及要生成的表名等。其次,可以使用命令行或者Maven插件来执行生成命令,工具会连接数据库读取表信息,并据此生成对应的Mapper接口和XML映射文件生成的Mapper接口中包含了常见的数据库操作方法,如插入insert、删除delete、更新update和查询select。这些方法会在对应的XML映射文件中被实现,通过SQL语句与数据库进行交互。可以根据需要自定义SQL语句,也可以使用MyBatis提供的动态SQL特性来灵活地构建查询条件。 生成的XML映射文件中,会将Mapper接口中定义的方法与对应的SQL语句进行映射映射时需要指定SQL语句的类型,如insert、delete、update或select,并在对应的标签中编写具体的SQL语句。可以使用占位符来引用Mapper接口方法中的参数,从而实现动态SQL的拼接。 总之,使用MyBatis Generator可以方便地自动生成Mapper接口和XML映射文件,减少了手动编写代码的工作量,提高了开发效率。同时,生成的代码结构清晰,易于维护和扩展。 ### 回答3: MyBatis Generator是一个用于自动生成持久层代码的工具,它可以根据数据库表结构自动生成代码,包括mapper.xml文件中的方法。 MyBatis Generator生成mapper.xml文件中的方法需要指定数据表的信息,比如表名、列名、数据类型等。通常情况下,我们需要先创建一个配置文件,指定数据库的连接信息和要生成代码的目标文件路径等。 在配置文件中,可以通过配置表名的规则、列名的规则以及其他定制化的配置项,来指定生成代码的方式和风格。配置完成后,执行生成器程序,它会根据配置文件中的规则和信息自动读取数据库表结构,并生成对应的mapper.xml文件生成的mapper.xml文件会包含CRUD操作的基础方法,比如插入、删除、更新、查询等,这些方法的具体实现会根据数据库表结构自动生成生成的方法会根据表结构的主键、索引等信息生成对应的条件查询方法,方便根据特定的条件进行查询操作。 此外,MyBatis Generator还可以生成动态SQL查询的方法,可以根据不同的查询条件生成不同的查询语句,方便根据不同的需求进行灵活的查询。 总而言之,通过配置文件和执行生成器程序,可以使用MyBatis Generator自动化生成mapper.xml文件中的方法,从而减少手工编写重复繁琐的代码工作,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程洪同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值