Spring和MyBatis整合自动生成代码里面text类型坑 - 简书

Spring和MyBatis整合以后,使用自动生成代码工具生成dao和mapper配置文件,生成步骤如下(以Intelli idea为例)。

  1. 编写生成代码配置文件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>
    <classPathEntry location="D:\dev\maven\repository\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar"/>
    <context id="DB2Tables" defaultModelType="flat" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mycollege?characterEncoding=utf-8"
                        userId="root"
                        password="root">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- 生成模型的包名和位置  -->
        <javaModelGenerator targetPackage="com.cx.elearnning.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- generate xml -->
        <sqlMapGenerator targetPackage="/"
                         targetProject="src/main/resources/mapper">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- generate Mapper -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.cx.elearnning.dao"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
      <!--需要自动生成的表名和对应的model名-->
        <table tableName="sys_user" domainObjectName="SysUser"></table>


    </context>
</generatorConfiguration>
  1. 配置如下maven运行命令。

    maven运行命令.png

  2. 运行generatorcode即可。

问题描述

假如数据库表里面存在text或者blob字段。自动生成的数据库配置文件如下,会多出几个以withBlobs结尾的方法和resultMap:

<!--仅仅贴上不一样的部分-->
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.cx.elearnning.model.EduWebsiteProfile">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <result column="DESCIPTION" jdbcType="LONGVARCHAR" property="desciption" />
  </resultMap>


<select id="selectByExampleWithBLOBs" parameterType="com.cx.elearnning.model.EduWebsiteProfileExample" resultMap="ResultMapWithBLOBs">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    ,
    <include refid="Blob_Column_List" />
    from edu_website_profile
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>

假如此时查询数据或者更新数据的使用仍然使用selectByExample或者updateByExample,得到的text或者blob数据是null。

正确做法

应该使用selectByExampleWithBLOBs或者updateByExampleWithBLOBs这两个方法。


Original url: Access
Created at: 2020-08-12 09:41:45
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论