分享

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

 程序员读书空间 2022-11-17 发布于浙江

在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界。


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 "-////DTD MyBatis Generator Configuration 1.0//EN"        "http:///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 "-////DTD Mapper 3.0//EN" "http:///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>



完毕

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约