Maven插件 mybatis-generator Mybatis自动生成实体代码的插件

在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。


Maven 是一个优秀的项目构建和管理工具,mybatis-generator 插件用于快速生成 Mybatis xml 与实体 Bean。

分为三步,在pom.xml中做两处配置,第二步创建generatorConfig.xml,第三步运行执行命令生成代码

1 mybatis-generator 插件 Maven 配置

首先在你项目的 pom.xml 中配置插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <!-- 配置数据库链接及mybatis generator core依赖 生成mapper时使用 -->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.40</version>
                    </dependency>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.4.0</version>
                    </dependency>
                </dependencies>
            </plugin>

        </plugins>
    </build>
2 mybatis-generator 插件 配置文件创建

在第一步中 我们通过 configurationFile 标签配置了 mybatis-generator 使用的配置文件。

<configurationFile>...generatorConfig.xml</configurationFile>

所以第二步就是创建配置文件

在这里插入图片描述

<?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"/>
            <!-- 是否去除自动生成的注释 true:是 : false:-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test_mybatis"
                        userId="zhaolong"
                        password="123456">
        </jdbcConnection>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用BigDecimals,false可自动转化以下类型(Long Integer Short等) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.example.demo.m" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.m" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="false"/>
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>

</generatorConfiguration>

大家在使用时,直接复制我这个配置文件,然后修改里面的数据库连接以及要生成的表的 tableName就可以了。

3 第三步就是执行命令生成代码

在这里插入图片描述
生成的 User.java 文件内容如下


public class User {
    private Long id;

    private String idCard;

    private String uName;

    private String uPhone;

    private Integer uAge;

    private String uImage;

    private Date createTime;

     ... get set 方法省略
     
}

生成的 UserMapper.java 文件内容如下

public interface UserMapper {
    int deleteByPrimaryKey(Long id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

生成的 UserMapper.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.example.demo.m.UserMapper">
  <resultMap id="BaseResultMap" type="com.example.demo.m.User">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="id_card" jdbcType="VARCHAR" property="idCard" />
    <result column="u_name" jdbcType="VARCHAR" property="uName" />
    <result column="u_phone" jdbcType="VARCHAR" property="uPhone" />
    <result column="u_age" jdbcType="INTEGER" property="uAge" />
    <result column="u_image" jdbcType="VARCHAR" property="uImage" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
  </resultMap>
  <sql id="Base_Column_List">
    id, id_card, u_name, u_phone, u_age, u_image, create_time
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from t_user
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    delete from t_user
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.example.demo.m.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into t_user (id_card, u_name, u_phone, 
      u_age, u_image, create_time
      )
    values (#{idCard,jdbcType=VARCHAR}, #{uName,jdbcType=VARCHAR}, #{uPhone,jdbcType=VARCHAR}, 
      #{uAge,jdbcType=INTEGER}, #{uImage,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.example.demo.m.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into t_user
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="idCard != null">
        id_card,
      </if>
      <if test="uName != null">
        u_name,
      </if>
      <if test="uPhone != null">
        u_phone,
      </if>
      <if test="uAge != null">
        u_age,
      </if>
      <if test="uImage != null">
        u_image,
      </if>
      <if test="createTime != null">
        create_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="idCard != null">
        #{idCard,jdbcType=VARCHAR},
      </if>
      <if test="uName != null">
        #{uName,jdbcType=VARCHAR},
      </if>
      <if test="uPhone != null">
        #{uPhone,jdbcType=VARCHAR},
      </if>
      <if test="uAge != null">
        #{uAge,jdbcType=INTEGER},
      </if>
      <if test="uImage != null">
        #{uImage,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.example.demo.m.User">
    update t_user
    <set>
      <if test="idCard != null">
        id_card = #{idCard,jdbcType=VARCHAR},
      </if>
      <if test="uName != null">
        u_name = #{uName,jdbcType=VARCHAR},
      </if>
      <if test="uPhone != null">
        u_phone = #{uPhone,jdbcType=VARCHAR},
      </if>
      <if test="uAge != null">
        u_age = #{uAge,jdbcType=INTEGER},
      </if>
      <if test="uImage != null">
        u_image = #{uImage,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        create_time = #{createTime,jdbcType=TIMESTAMP},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.example.demo.m.User">
    update t_user
    set id_card = #{idCard,jdbcType=VARCHAR},
      u_name = #{uName,jdbcType=VARCHAR},
      u_phone = #{uPhone,jdbcType=VARCHAR},
      u_age = #{uAge,jdbcType=INTEGER},
      u_image = #{uImage,jdbcType=VARCHAR},
      create_time = #{createTime,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>

完毕

不局限于思维,不局限语言限制,才是编程的最高境界。

以小编的性格,肯定是要录制一套视频的,随后会上传

有兴趣 你可以关注一下 西瓜视频 — 早起的年轻人
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

早起的年轻人

创作源于分享

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

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

打赏作者

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

抵扣说明:

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

余额充值