Java:MyBatis Generator自动生成代码

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Java:MyBatis Generator自动生成代码

文档:http://mybatis.org/generator/index.html

依赖 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mouday</groupId>
    <artifactId>generator-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.5</version>
                    </dependency>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.20</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

生成器配置 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="default" targetRuntime="MyBatis3">
        <!-- jdbc的数据库连接 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/data"
                        userId="root"
                        password="123456"/>
        <!-- Model模型生成器-->
        <javaModelGenerator targetPackage="com.mouday.demo.model" 
                            targetProject="src/main/java"/>
        <!-- Mapper映射文件-->
        <sqlMapGenerator targetPackage="com.mouday.demo.mapper" 
                         targetProject="src/main/java"/>
        <!-- Mapper接口-->
        <javaClientGenerator targetPackage="com.mouday.demo.mapper" 
                             targetProject="src/main/java"
                             type="XMLMAPPER"/>
        <table tableName="person"/>
    </context>
</generatorConfiguration>

参数说明

通用参数
targetPackage     指定包名
targetProject     指定路径
javaClientGenerator可选参数:
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
# 执行代码生成
$ mvn mybatis-generator:generate
# 生成的文件
$ tree
.
├── mapper
│   ├── PersonMapper.java
│   └── PersonMapper.xml
└── model
    ├── Person.java
    └── PersonExample.java

查看生成的文件里边有很多无用的代码,可以通过进一步的配置来控制代码生成

<?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="default" targetRuntime="MyBatis3">
        <!--创建class时,对注释进行控制-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!--注释掉这行可以解决生成重复xml代码-->
            <property name="suppressAllComments" value="true"/>
            <property name="javaFileEncoding" value="UTF-8"/>
        </commentGenerator>
        <!-- jdbc的数据库连接 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/data"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制 -->
        <javaTypeResolver>
            <!-- 是否使用BigDecimals,false可自动转化以下类型(Long Integer Short等) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- Model模型生成器-->
        <javaModelGenerator targetPackage="com.mouday.demo.model"
                            targetProject="src/main/java">
            <!--是否允许子包,即targetPackage.schemaName.tableName-->
            <property name="enableSubPackages" value="true"/>
            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- Mapper映射文件-->
        <sqlMapGenerator targetPackage="com.mouday.demo.mapper"
                         targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- Mapper接口-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.mouday.demo.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名
        domainObjectName是实体类名-->
        <table tableName="person"
               domainObjectName="Person"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

生成的代码就简洁了不少

Person.java

package com.mouday.demo.model;
public class Person {
    private Integer id;
    private String name;
    private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

PersonMapper.java

package com.mouday.demo.mapper;
import com.mouday.demo.model.Person;
public interface PersonMapper {
    int deleteByPrimaryKey(Integer id);
    int insert(Person record);
    int insertSelective(Person record);
    Person selectByPrimaryKey(Integer id);
    int updateByPrimaryKeySelective(Person record);
    int updateByPrimaryKey(Person record);
}

PersonMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mouday.demo.mapper.PersonMapper">
  <resultMap id="BaseResultMap" type="com.mouday.demo.model.Person">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="age" jdbcType="INTEGER" property="age" />
  </resultMap>
  <sql id="Base_Column_List">
    id, name, age
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from person
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from person
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.mouday.demo.model.Person">
    insert into person (id, name, age
      )
    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.mouday.demo.model.Person">
    insert into person
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="age != null">
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=INTEGER},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        #{age,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.mouday.demo.model.Person">
    update person
    <set>
      <if test="name != null">
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        age = #{age,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.mouday.demo.model.Person">
    update person
    set name = #{name,jdbcType=VARCHAR},
      age = #{age,jdbcType=INTEGER}
    where id = #{id,jdbcType=INTEGER}
  </update>
</mapper>


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL Java 数据库连接
Java系列技术之Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射SQL信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
75 0
|
2月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
131 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
6月前
|
SQL Java 关系型数据库
Java中的ORM框架——myBatis
Java中的ORM框架——myBatis
|
SQL Java 数据库连接
Java:MyBatis讲解
MyBatis是一个开源的Java持久化框架,它提供了一个简化数据库访问的方法。MyBatis的主要目标是减少编写SQL代码的工作量,并提供了将数据库操作与Java对象的映射功能。
58 1
Java:MyBatis讲解
|
Java 关系型数据库 数据库连接
Java——mybatis逆向工程生成实体类
Java——mybatis逆向工程生成实体类
|
SQL Java 数据库连接
Java 最常见的面试题:mybatis 如何编写一个自定义插件?
Java 最常见的面试题:mybatis 如何编写一个自定义插件?
205 0
|
XML SQL 数据可视化
Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器
Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器
302 0
|
XML 数据库 数据格式
Java--SpringBoot-43-Mybatis-11-MybatisPlus Generator代码生成器
MybatisPlus也提供了代码生成器,并且更加厉害,能直接生成controller、service、mapper、xml等,并且还支持各种配置。
224 0
Java--SpringBoot-43-Mybatis-11-MybatisPlus Generator代码生成器
|
XML Java 数据库连接
Java--SpringBoot-42-Mybatis-10-逆向工程
在开发中,我们使用Mybatis最麻烦的就是写每个表对应的Mapper接口及XML配置文件,当然还有实体类,既然每个单表都有对应的一套,那么肯定就有自动生成这些代码文件的工具,那就是代码生成器:逆向工程-MyBatis generator。
123 0
Java--SpringBoot-42-Mybatis-10-逆向工程
|
存储 SQL XML
Java--SpringBoot-41-Mybatis-9-调用存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。经编译后存储在数据库中。现在要使用Mybatis调用数据库的存储过程。我们来看下如何实现。
532 0
Java--SpringBoot-41-Mybatis-9-调用存储过程