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

柔光的暖阳◎ 2023-10-07 16:04 126阅读 0赞

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

  • 优美的音乐节奏带你浏览这个效果的编码过程
  • 坚持每一天,是每个有理想青年的追求
  • 追寻年轻人的脚步,也许你的答案就在这里
  • 如果你迷茫 不妨来瞅瞅这里

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

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

1 mybatis-generator 插件 Maven 配置

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

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. <!-- mybatis generator 自动生成代码插件 -->
  8. <plugin>
  9. <groupId>org.mybatis.generator</groupId>
  10. <artifactId>mybatis-generator-maven-plugin</artifactId>
  11. <version>1.3.2</version>
  12. <configuration>
  13. <configurationFile>${
  14. basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
  15. <overwrite>true</overwrite>
  16. <verbose>true</verbose>
  17. </configuration>
  18. <!-- 配置数据库链接及mybatis generator core依赖 生成mapper时使用 -->
  19. <dependencies>
  20. <dependency>
  21. <groupId>mysql</groupId>
  22. <artifactId>mysql-connector-java</artifactId>
  23. <version>5.1.40</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.mybatis.generator</groupId>
  27. <artifactId>mybatis-generator-core</artifactId>
  28. <version>1.4.0</version>
  29. </dependency>
  30. </dependencies>
  31. </plugin>
  32. </plugins>
  33. </build>
2 mybatis-generator 插件 配置文件创建

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

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

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

在这里插入图片描述

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <!-- 配置生成器 -->
  6. <generatorConfiguration>
  7. <context id="DB2Tables" targetRuntime="MyBatis3">
  8. <commentGenerator>
  9. <property name="suppressDate" value="true"/>
  10. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  11. <property name="suppressAllComments" value="true"/>
  12. </commentGenerator>
  13. <!-- 数据库链接URL,用户名、密码 -->
  14. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  15. connectionURL="jdbc:mysql://localhost:3306/test_mybatis"
  16. userId="zhaolong"
  17. password="123456">
  18. </jdbcConnection>
  19. <!-- 类型转换 -->
  20. <javaTypeResolver>
  21. <!-- 是否使用BigDecimals,false可自动转化以下类型(Long Integer Short等) -->
  22. <property name="forceBigDecimals" value="false"/>
  23. </javaTypeResolver>
  24. <!-- 生成模型的包名和位置-->
  25. <javaModelGenerator targetPackage="com.example.demo.m" targetProject="src/main/java">
  26. <property name="enableSubPackages" value="true"/>
  27. <property name="trimStrings" value="true"/>
  28. </javaModelGenerator>
  29. <!-- 生成映射文件的包名和位置-->
  30. <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
  31. <property name="enableSubPackages" value="true"/>
  32. </sqlMapGenerator>
  33. <!-- 生成DAO的包名和位置 -->
  34. <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.m" targetProject="src/main/java">
  35. <property name="enableSubPackages" value="true"/>
  36. </javaClientGenerator>
  37. <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
  38. <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false"
  39. enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
  40. <property name="useActualColumnNames" value="false"/>
  41. <!-- 数据库表主键 -->
  42. <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
  43. </table>
  44. </context>
  45. </generatorConfiguration>

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

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

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

  1. public class User {
  2. private Long id;
  3. private String idCard;
  4. private String uName;
  5. private String uPhone;
  6. private Integer uAge;
  7. private String uImage;
  8. private Date createTime;
  9. ... get set 方法省略
  10. }

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

  1. public interface UserMapper {
  2. int deleteByPrimaryKey(Long id);
  3. int insert(User record);
  4. int insertSelective(User record);
  5. User selectByPrimaryKey(Long id);
  6. int updateByPrimaryKeySelective(User record);
  7. int updateByPrimaryKey(User record);
  8. }

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.example.demo.m.UserMapper">
  4. <resultMap id="BaseResultMap" type="com.example.demo.m.User">
  5. <id column="id" jdbcType="BIGINT" property="id" />
  6. <result column="id_card" jdbcType="VARCHAR" property="idCard" />
  7. <result column="u_name" jdbcType="VARCHAR" property="uName" />
  8. <result column="u_phone" jdbcType="VARCHAR" property="uPhone" />
  9. <result column="u_age" jdbcType="INTEGER" property="uAge" />
  10. <result column="u_image" jdbcType="VARCHAR" property="uImage" />
  11. <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
  12. </resultMap>
  13. <sql id="Base_Column_List">
  14. id, id_card, u_name, u_phone, u_age, u_image, create_time
  15. </sql>
  16. <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
  17. select
  18. <include refid="Base_Column_List" />
  19. from t_user
  20. where id = #{
  21. id,jdbcType=BIGINT}
  22. </select>
  23. <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
  24. delete from t_user
  25. where id = #{
  26. id,jdbcType=BIGINT}
  27. </delete>
  28. <insert id="insert" parameterType="com.example.demo.m.User">
  29. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
  30. SELECT LAST_INSERT_ID()
  31. </selectKey>
  32. insert into t_user (id_card, u_name, u_phone,
  33. u_age, u_image, create_time
  34. )
  35. values (#{
  36. idCard,jdbcType=VARCHAR}, #{
  37. uName,jdbcType=VARCHAR}, #{
  38. uPhone,jdbcType=VARCHAR},
  39. #{
  40. uAge,jdbcType=INTEGER}, #{
  41. uImage,jdbcType=VARCHAR}, #{
  42. createTime,jdbcType=TIMESTAMP}
  43. )
  44. </insert>
  45. <insert id="insertSelective" parameterType="com.example.demo.m.User">
  46. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
  47. SELECT LAST_INSERT_ID()
  48. </selectKey>
  49. insert into t_user
  50. <trim prefix="(" suffix=")" suffixOverrides=",">
  51. <if test="idCard != null">
  52. id_card,
  53. </if>
  54. <if test="uName != null">
  55. u_name,
  56. </if>
  57. <if test="uPhone != null">
  58. u_phone,
  59. </if>
  60. <if test="uAge != null">
  61. u_age,
  62. </if>
  63. <if test="uImage != null">
  64. u_image,
  65. </if>
  66. <if test="createTime != null">
  67. create_time,
  68. </if>
  69. </trim>
  70. <trim prefix="values (" suffix=")" suffixOverrides=",">
  71. <if test="idCard != null">
  72. #{
  73. idCard,jdbcType=VARCHAR},
  74. </if>
  75. <if test="uName != null">
  76. #{
  77. uName,jdbcType=VARCHAR},
  78. </if>
  79. <if test="uPhone != null">
  80. #{
  81. uPhone,jdbcType=VARCHAR},
  82. </if>
  83. <if test="uAge != null">
  84. #{
  85. uAge,jdbcType=INTEGER},
  86. </if>
  87. <if test="uImage != null">
  88. #{
  89. uImage,jdbcType=VARCHAR},
  90. </if>
  91. <if test="createTime != null">
  92. #{
  93. createTime,jdbcType=TIMESTAMP},
  94. </if>
  95. </trim>
  96. </insert>
  97. <update id="updateByPrimaryKeySelective" parameterType="com.example.demo.m.User">
  98. update t_user
  99. <set>
  100. <if test="idCard != null">
  101. id_card = #{
  102. idCard,jdbcType=VARCHAR},
  103. </if>
  104. <if test="uName != null">
  105. u_name = #{
  106. uName,jdbcType=VARCHAR},
  107. </if>
  108. <if test="uPhone != null">
  109. u_phone = #{
  110. uPhone,jdbcType=VARCHAR},
  111. </if>
  112. <if test="uAge != null">
  113. u_age = #{
  114. uAge,jdbcType=INTEGER},
  115. </if>
  116. <if test="uImage != null">
  117. u_image = #{
  118. uImage,jdbcType=VARCHAR},
  119. </if>
  120. <if test="createTime != null">
  121. create_time = #{
  122. createTime,jdbcType=TIMESTAMP},
  123. </if>
  124. </set>
  125. where id = #{
  126. id,jdbcType=BIGINT}
  127. </update>
  128. <update id="updateByPrimaryKey" parameterType="com.example.demo.m.User">
  129. update t_user
  130. set id_card = #{
  131. idCard,jdbcType=VARCHAR},
  132. u_name = #{
  133. uName,jdbcType=VARCHAR},
  134. u_phone = #{
  135. uPhone,jdbcType=VARCHAR},
  136. u_age = #{
  137. uAge,jdbcType=INTEGER},
  138. u_image = #{
  139. uImage,jdbcType=VARCHAR},
  140. create_time = #{
  141. createTime,jdbcType=TIMESTAMP}
  142. where id = #{
  143. id,jdbcType=BIGINT}
  144. </update>
  145. </mapper>

完毕

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读