mybatis架構提供了非常好用的逆向工程外掛程式,但是在使用過程中會有很多問題。
我在使用中就遇到了只產生insert和insertSeletive方法,而不產生其他根據primary key查詢更新刪除的方法。
解決方案:
1.檢查資料庫中的表是否有主鍵,如果沒有主鍵是不會產生類似selectByPrimaryKey之類的方法的。
2.檢查generatorConfig.xml設定檔中的table標籤是否把這些屬性設為了false,預設是true,如果設為了false則無法產生。
enableSelectByPrimaryKey="true"enableUpdateByPrimaryKey="true"enableDeleteByPrimaryKey="true"
前兩點都是網上很容易找到的,第三點是真正的坑點,希望大家不要被坑了。
3.如果使用的mysql驅動是6.x的,那就無法產生,使用5.x版本的就可以產生。
順便附上一份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> <!--匯入屬性配置--> <properties resource="datasource.properties"/> <!--指定特定資料庫的jdbc驅動jar包的位置--> <classPathEntry location="E:/JavaWeb_WorkSpace/YYMall/src/main/resources/mysql-connector-java-5.1.41.jar"/> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在建立class時,對注釋進行控制 --> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--jdbc的資料庫連接 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="${db.url}" userId="${db.username}" password="${db.password}"> </jdbcConnection> <!-- 非必需,類型處理器,在資料庫類型和java類型之間的轉換控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型產生器,用來產生含有主鍵key的類,記錄類 以及查詢Example類 targetPackage 指定產生的model產生所在的包名 targetProject 指定在該項目下所在的路徑 --> <!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">--> <javaModelGenerator targetPackage="com.yykj.mall.pojo" targetProject="./src/main/java"> <!-- 是否允許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否對model添加 建構函式 --> <property name="constructorBased" value="true"/> <!-- 是否對類CHAR類型的列的資料進行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model對象是否 不可改變 即產生的Model對象不會有 setter方法,只有構造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!--mapper對應檔產生所在的目錄 為每一個資料庫的表產生對應的SqlMap檔案 --> <!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">--> <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 用戶端代碼,產生便於使用的針對Model對象和XML設定檔 的代碼 type="ANNOTATEDMAPPER",產生Java Model 和基於註解的Mapper對象 type="MIXEDMAPPER",產生基於註解的Java Model 和相應的Mapper對象 type="XMLMAPPER",產生SQLMap XML檔案和獨立的Mapper介面 --> <!-- targetPackage:mapper介面dao產生的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.yykj.mall.dao" targetProject="./src/main/java"> <!-- enableSubPackages:是否讓schema作為包的尾碼 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <table tableName="shipping" domainObjectName="Shipping" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true" /> <table tableName="cart" domainObjectName="Cart" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="cart_item" domainObjectName="CartItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="order" domainObjectName="Order" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="order_item" domainObjectName="OrderItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="pay_info" domainObjectName="PayInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> <table tableName="product" domainObjectName="Product" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"> <columnOverride column="detail" jdbcType="VARCHAR" /> <columnOverride column="sub_images" jdbcType="VARCHAR" /> </table> <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true"/> </context></generatorConfiguration>