在idea中使用逆向工程插件自動創建實體和mapper接口;
工具:idea+maven+mysql
當我們要寫一個javaWeb項目時,如果數據庫的表多了,用手動輸入實體類信息是比較麻煩的,所以下面就介紹一下在maven項目中使用逆向工程方法自動根據數據庫信息創建相關實體類。
1、首先需要創建一個maven項目,并將項目中相關的包創建完成,即pojo、dao/mapper等。
2、下載相關依賴,尤其是數據庫驅動;
3、首先在pom.xml文件中加入以下依賴,下載插件mybatis-generator-maven-plugin。
1 <build> 2 <plugins> 3 <plugin> 4 <groupId>org.mybatis.generator</groupId> 5 <artifactId>mybatis-generator-maven-plugin</artifactId> 6 <version>1.3.2</version> 7 <configuration> 8 <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile> 9 <overwrite>true</overwrite> 10 <verbose>true</verbose> 11 </configuration> 12 <!--如果在使用插件創建時失敗,可加入下面這個依賴(數據庫驅動,根據數據庫版本下載)--> 13 <dependencies> 14 <dependency> 15 <groupId>mysql</groupId> 16 <artifactId>mysql-connector-java</artifactId> 17 <version>8.0.15</version> 18 </dependency> 19 </dependencies> 20 </plugin> 21 </plugins> 22 </build>
2、在resources資源文件下創建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="jdbc.properties"/> <!--指定特定數據庫的jdbc驅動jar包的位置--> <classPathEntry location="/Users/lijincheng/mavenJar/repository/mysql/mysql-connector-java/8.0.15"/> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在創建class時,對注釋進行控制 --> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--jdbc的數據庫連接 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/jwzx" userId="root" password="root"> </jdbcConnection> <!-- 非必需,類型處理器,在數據庫類型和java類型之間的轉換控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類 targetPackage 指定生成的model生成所在的包名 targetProject 指定在該項目下所在的路徑 --> <javaModelGenerator targetPackage="com.mysjz.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="resources/mapperxmlconfig" targetProject="src/main"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 客戶端代碼,生成易于使用的針對Model對象和XML配置文件 的代碼 type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象 type="MIXEDMAPPER",生成基于注解的Java Model 和相應的Mapper對象 type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口 --> <javaClientGenerator targetPackage="com.mysjz.mapper" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="mgr" domainObjectName="Mgr" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <!-- 用來修改表中某個列的屬性,MBG會使用修改后的列來生成domain的屬性; column:要重新設置的列名; 注意,一個table元素中可以有多個columnOverride元素哈~ --> <columnOverride column="username"> <!-- 使用property屬性來指定列要生成的屬性名稱 <property name="property" value="userName"/> --> <!-- javaType用于指定生成的domain的屬性類型,使用類型的全限定名 <property name="javaType" value=""/> --> <!-- jdbcType用于指定該列的JDBC類型 <property name="jdbcType" value=""/> --> <!-- typeHandler 用于指定該列使用到的TypeHandler,如果要指定,配置類型處理器的全限定名 注意,mybatis中,不會生成到mybatis-config.xml中的typeHandler 只會生成類似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的參數描述 <property name="jdbcType" value=""/> --> <!-- 參考table元素的delimitAllColumns配置,默認為false <property name="delimitedColumnName" value=""/> --> </columnOverride> </table> <table tableName="teacher" domainObjectName="Teacher" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table tableName="proctor" domainObjectName="Proctor" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
在配置table標簽里的內容時,可以考慮以下東西:
選擇一個table來生成相關文件,可以有一個或多個table,必須要有table元素 選擇的table會生成一下文件: 1,SQL map文件 2,生成一個主鍵類; 3,除了BLOB和主鍵的其他字段的類; 4,包含BLOB的類; 5,一個用戶生成動態查詢的條件類(selectByExample, deleteByExample),可選; 6,Mapper接口(可選) tableName(必要):要生成對象的表名; 注意:大小寫敏感問題。正常情況下,MBG會自動的去識別數據庫標識符的大小寫敏感度,在一般情況下,MBG會 根據設置的schema,catalog或tablename去查詢數據表,按照下面的流程: 1,如果schema,catalog或tablename中有空格,那么設置的是什么格式,就精確的使用指定的大小寫格式去查詢; 2,否則,如果數據庫的標識符使用大寫的,那么MBG自動把表名變成大寫再查找; 3,否則,如果數據庫的標識符使用小寫的,那么MBG自動把表名變成小寫再查找; 4,否則,使用指定的大小寫格式查詢; 另外的,如果在創建表的時候,使用的""把數據庫對象規定大小寫,就算數據庫標識符是使用的大寫,在這種情況下也會使用給定的大小寫來創建表名; 這個時候,請設置delimitIdentifiers="true"即可保留大小寫格式; 可選: 1,schema:數據庫的schema; 2,catalog:數據庫的catalog; 3,alias:為數據表設置的別名,如果設置了alias,那么生成的所有的SELECT SQL語句中,列名會變成:alias_actualColumnName 4,domainObjectName:生成的domain類的名字,如果不設置,直接使用表名作為domain類的名字;可以設置為somepck.domainName,那么會自動把domainName類再放到somepck包里面; 5,enableInsert(默認true):指定是否生成insert語句; 6,enableSelectByPrimaryKey(默認true):指定是否生成按照主鍵查詢對象的語句(就是getById或get); 7,enableSelectByExample(默認true):MyBatis3Simple為false,指定是否生成動態查詢語句; 8,enableUpdateByPrimaryKey(默認true):指定是否生成按照主鍵修改對象的語句(即update); 9,enableDeleteByPrimaryKey(默認true):指定是否生成按照主鍵刪除對象的語句(即delete); 10,enableDeleteByExample(默認true):MyBatis3Simple為false,指定是否生成動態刪除語句; 11,enableCountByExample(默認true):MyBatis3Simple為false,指定是否生成動態查詢總條數語句(用于分頁的總條數查詢); 12,enableUpdateByExample(默認true):MyBatis3Simple為false,指定是否生成動態修改語句(只修改對象中不為空的屬性); 13,modelType:參考context元素的defaultModelType,相當于覆蓋; 14,delimitIdentifiers:參考tableName的解釋,注意,默認的delimitIdentifiers是雙引號,如果類似MYSQL這樣的數據庫,使用的是`(反引號,那么還需要設置context的beginningDelimiter和endingDelimiter屬性) 15,delimitAllColumns:設置是否所有生成的SQL中的列名都使用標識符引起來。默認為false,delimitIdentifiers參考context的屬性 注意,table里面很多參數都是對javaModelGenerator,context等元素的默認屬性的一個復寫;
生成主鍵的方法
如果設置了該元素,MBG會在生成的<insert>元素中生成一條正確的<selectKey>元素,該元素可選 column:主鍵的列名; sqlStatement:要生成的selectKey語句,有以下可選項: Cloudscape:相當于selectKey的SQL為: VALUES IDENTITY_VAL_LOCAL() DB2 :相當于selectKey的SQL為: VALUES IDENTITY_VAL_LOCAL() DB2_MF :相當于selectKey的SQL為:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1 Derby :相當于selectKey的SQL為:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相當于selectKey的SQL為:CALL IDENTITY() Informix :相當于selectKey的SQL為:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1 MySql :相當于selectKey的SQL為:SELECT LAST_INSERT_ID() SqlServer :相當于selectKey的SQL為:SELECT SCOPE_IDENTITY() SYBASE :相當于selectKey的SQL為:SELECT @@IDENTITY JDBC :相當于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty屬性 <generatedKey column="" sqlStatement=""/>
基本上就差不多了,如果需要了解更多關于這個配置的信息可以百度。
3、上面過程完成后。點擊idea右側maven,找到mybatis-generator插件,點擊運行

結果如下圖:

完畢,親測好用
浙公網安備 33010602011771號