1. 程式人生 > >Mybatis學習---Mybatis逆向工程自動生成程式碼(代替手寫pojo類,Mapper和對映檔案)

Mybatis學習---Mybatis逆向工程自動生成程式碼(代替手寫pojo類,Mapper和對映檔案)

學習Mybatis後,學會使用dao層對映檔案和Mapper,從資料庫獲取資料,並將資料封裝為相應的物件儲存。

將Mybatis框架使用到SSM專案中,實現了:檢視層 + 業務邏輯層 + 資料訪問層。

  • 對於資料庫表不多的情況,正常的使用Mybatis框架:手寫pojo類檔案、dao層Mapper、對映檔案即可;
  • 對於資料庫中表比較多的情況,如果手寫同上程式碼工作量會很大,而且容易出錯,此時就需要Mybatis逆向工程幫助我們自動生成程式碼怎麼生成呢?

【Mybatis官方提供逆向工程可以針對 單表 自動生成執行所需要的程式碼:mapper.java、mapper.xml……】

先理清思路:

我要完成的專案是crm_system,這個專案中需要我手動書寫很多實體類檔案,mapper以及對映檔案,我覺得很繁瑣,也怕寫錯,於是現在我藉助三方工具(也就是Mybatis逆向工程)去幫我寫好,然後我複製貼上到我的專案對應包下,這樣就節省了很多時間,也可以避免編碼錯誤。

            mybatis逆向工程自己也是一個專案,修改它的配置檔案,然後執行專案下的啟動generator檔案,即可在 該專案下生成所需程式碼檔案,然後直接拷貝到要完成的原始專案即可。

步驟如下:

1.    下載逆向工程 

下載連結1/方法1——完整逆向工程專案 ( generatorSqlmapCustom.zip ):

將解壓後的工程generatorSqlmapCustom專案直接匯入eclipse,需要的核心包工程中都包含在工程lib下,只需在genneatorConfig.xml檔案中做相應配置修改,然後執行GeneratorSqlmap.java即可。

附:百度網盤下載連結: https://pan.baidu.com/s/1y_jo0Q7VcQKFcdajpQ-tQA

密碼:iebb

下載連結2/方法2——mybatis-generator-core-1.3.2-bundle.zip

   該方法適合想對mybatis逆向工程有更多瞭解的程式設計師們,因為只下載這一個包並不夠,而且還需要手寫一些檔案,所以我選擇了方法1,至於該方法具體操作請參考網路資源:https://blog.csdn.net/qr719169236/article/details/51086997 

附:核心包_百度網盤連結:https://pan.baidu.com/s/1-nE0aWRB7srDKN9rHNu80g 密碼:538u

2.    修改配置檔案 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>
	<context id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/taotao" userId="root"
			password="root">
		</jdbcConnection>
		<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL 和 
			NUMERIC 型別解析為java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO類的位置 -->
		<javaModelGenerator targetPackage="com.taotao.pojo"
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
			<!-- 從資料庫返回的值被清理前後的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper對映檔案生成的位置 -->
		<sqlMapGenerator targetPackage="com.taotao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper介面生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.taotao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定資料庫表 -->
		<table schema="" tableName="tb_content"></table>
		<table schema="" tableName="tb_content_category"></table>
		<table schema="" tableName="tb_item"></table>
		<table schema="" tableName="tb_item_cat"></table>
		<table schema="" tableName="tb_item_desc"></table>
		<table schema="" tableName="tb_item_param"></table>
		<table schema="" tableName="tb_item_param_item"></table>
		<table schema="" tableName="tb_order"></table>
		<table schema="" tableName="tb_order_item"></table>
		<table schema="" tableName="tb_order_shipping"></table>
		<table schema="" tableName="tb_user"></table>

	</context>
</generatorConfiguration>

  以下程式碼是我根據自己專案需求修改之後的完整配置程式碼,與原配置檔案相比,改動之處如下(程式碼下方)

<?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>
	<context id="testTables" targetRuntime="MyBatis3">
		<!--javaBean 實現序列化介面 -->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
		<!-- 生成entity時,生成toString -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
		<!-- 自定義查詢指定欄位 -->
		<plugin type="org.mybatis.generator.plugins.field.FieldsPlugin"></plugin>
		<commentGenerator type="org.mybatis.generator.plugins.comment.MyCommentGenerator">
			<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
			<!-- <property name="suppressAllComments" value="true" /> -->
		</commentGenerator>
		<!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
		<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
			connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:XE" userId="temp"
			password="temp">
		</jdbcConnection>
		<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL 和 
			NUMERIC 型別解析為java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO類的位置 -->
		<javaModelGenerator targetPackage="com.briup.crm.common.bean"
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
			<!-- 從資料庫返回的值被清理前後的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper對映檔案生成的位置 -->
		<sqlMapGenerator targetPackage="com.briup.crm.dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper介面生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.briup.crm.dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>
		<!-- 指定資料庫表 -->
		<table schema="" tableName="cst_activity">
			<columnOverride column="atv_cust_id" javaType="java.lang.Long" />
			<columnOverride column="atv_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_customer">
			<columnOverride column="cust_id" javaType="java.lang.Long" />
			<columnOverride column="cust_manager_id" javaType="java.lang.Integer" />
			<columnOverride column="cust_level" javaType="java.lang.Integer" />
			<columnOverride column="cust_satisfy" javaType="java.lang.Integer" />
			<columnOverride column="cust_credit" javaType="java.lang.Integer" />
			<columnOverride column="cust_bankroll" javaType="java.lang.Long" />
			<columnOverride column="cust_turnover" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_linkman">
			<columnOverride column="lkm_id" javaType="java.lang.Long" />
			<columnOverride column="lkm_cust_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_log">
			<columnOverride column="log_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="cst_service">
			<columnOverride column="svr_id" javaType="java.lang.Long" />
			<columnOverride column="svr_satisfy" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="orders">
			<columnOverride column="odr_id" javaType="java.lang.Long" />
			<columnOverride column="odr_cust_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="orders_line">
			<columnOverride column="odd_id" javaType="java.lang.Long" />
			<columnOverride column="odd_order_id" javaType="java.lang.Long" />
			<columnOverride column="odd_count" javaType="java.lang.Long" />
			<columnOverride column="odd_price" javaType="java.lang.Long" />
			<columnOverride column="odd_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="product">
			<columnOverride column="prod_id" javaType="java.lang.Long" />
			<columnOverride column="prod_price" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="sal_chance">
			<columnOverride column="chc_id" javaType="java.lang.Long" />
			<columnOverride column="chc_rate" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sal_plan">
			<columnOverride column="pla_id" javaType="java.lang.Long" />
			<columnOverride column="pla_chc_id" javaType="java.lang.Long" />
		</table>
		<table schema="" tableName="storage">
			<columnOverride column="stk_id" javaType="java.lang.Long" />
			<columnOverride column="stk_count" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sys_role">
			<columnOverride column="role_id" javaType="java.lang.Long" />
			<columnOverride column="role_flag" javaType="java.lang.Integer" />
		</table>
		<table schema="" tableName="sys_user">
			<columnOverride column="usr_id" javaType="java.lang.Long" />
			<columnOverride column="usr_flag" javaType="java.lang.Integer" />
			<columnOverride column="usr_role_id" javaType="java.lang.Long" />
		</table>

	</context>
</generatorConfiguration>

        改動處如下:


3:執行src下的GeneratorSqlmap.java

        執行完畢後右擊generatorSqlmapCustom專案,選擇Refresh重新整理generator專案之後即可看到自動生成的包名與要完成的原始專案包名一致,且包中生成了所有的實體類檔案、對映檔案和mapper檔案

4. 將生成的所有檔案移到原始專案對應包下

到這裡,逆向工程自動生成程式碼已全部完成,至於網上有說該逆向工程也可生成service層檔案等功能,有需要再去學習,目前對此還不大瞭解。

最後,總結一下我在完成generator自動生成程式碼專案時作出的修改 + 修改後遇到的一些問題:

修改【generator專案中】:

    1. 修改資料庫連線配置資訊

    2. 修改pojo類,mapper,xxMapper.xml的包名

    3. 修改要連線的資料庫表名

修改後仍然遇到了問題:

    1. 在配置檔案中添加了配置檔案,卻未向專案中匯入相應外掛(即上圖中的:可選改動項)

            解決:專案中新增相應外掛(下圖部分,需要哪個新增哪個即可)

            

    2.在我的原始專案pojo類中居然出現了BigDecimal型別

           分析原因是:我開始沒有在配置檔案中指定資料庫表中number欄位轉換後的java型別。

              解決: 新增指定轉換型別程式碼。具體程式碼見上文中的完整配置程式碼最後部分(指定資料庫表)

若文中出現不妥之處,歡迎路過的各路大蝦們指出來,灰常感謝。大笑

相關推薦

Mybatis學習---Mybatis逆向工程自動生成程式碼代替pojoMapper對映檔案

學習Mybatis後,學會使用dao層對映檔案和Mapper,從資料庫獲取資料,並將資料封裝為相應的物件儲存。將Mybatis框架使用到SSM專案中,實現了:檢視層 + 業務邏輯層 + 資料訪問層。對於資料庫表不多的情況,正常的使用Mybatis框架:手寫pojo類檔案、da

Mybatis逆向工程自動生成程式碼Ubuntu18.04-idea環境

 最近在學習taotao商城專案,有一節是關於mybatis逆向工程的,參考了這個博文,https://blog.csdn.net/yerenyuan_pku/article/details/71909325 是在windows+eclipse環境下完成的,我用的是Ubuntu18.04和idea

MyBatis框架的學習(七)——MyBatis逆向工程自動生成程式碼

什麼是逆向工程 MyBatis的一個主要的特點就是需要程式設計師自己編寫sql,那麼如果表太多的話,難免會很麻煩,所以mybatis官方提供了一個逆向工程,可以針對單表自動生成mybatis執行所需要的程式碼(包括mapper.xml、mapper.java、

02 使用Mybatis逆向工程自動生成程式碼

1、逆向工程的作用 Mybatis 官方提供了逆向工程,可以針對資料庫表自動生成Mybatis執行所需要的程式碼(包括mapper.xml、Mapper.java、pojo)。 2、逆向工程的使用方法 逆向工程需要的jar包如下圖所示: 下載下來的專案目錄如下圖: 從上圖中看

SpringCloud+MyBatisoracle逆向工程自動生成程式碼

一、何為逆向工程?     平時我們的開發過程,除了系統框架的搭建。其他無非就是CRUD增刪改查的程式碼邏輯搬磚,CRUD也就避免不了要跟資料庫打交道。一般常見的資料庫操作insert(增)、update(改)、select(查)、delete(刪);常規傳統的資料庫層面

SSM+Maven整合時在Eclipse中使用Mybatis逆向工程自動生成程式碼

場景 MybatisGenerator 官方文件 http://www.mybatis.org/generator/configreference/xmlconfig.html 實現 專案搭建好完整的包,包括bean、dao、service、test、utils、mapper

MyBatis逆向工程自動生成程式碼(附資料庫表結構)

一、逆向工程介紹 逆向工程是一個專門為 MyBatis 框架使用者設計的程式碼生成器,可以根據資料庫中的表字段名,自動生成 POJO 類,mapper 介面與 SQL 對映檔案。支援基本的增刪改查功能,以及自定義條件的查詢。但是不支援複雜 SQL 與儲存過程

spring+springmvc+mybatis3--逆向工程自動生成程式碼

1.what? mybatis需要程式設計師自己寫sql語句,mybatis官方提供逆向工程,可以針對表單自動生成mybatis執行所需要的程式碼(mapper.java,mapper.xml,poj

回顧一下MyBatis逆向工程——自動生成代碼

ive def pre bool throws artifact 默認 config batis 前言 最近做的項目(SSM+Shiro)的數據庫表已經創建完成,一共有15張表,如果我們一個個去寫pojo/bean的代碼以及各種sql語句的話未免太過麻煩而且很容易出錯,這個

SpringBoot中使用Mybatis Generator進行資料庫表逆向工程自動生成實體mapping對映

1.首先在專案中建立一個GeneratorDisplay工具類,放在com.springbootdemo.util下 package com.springbootdemo.util; import java.io.File; import java.util.ArrayList; imp

MyBatis系列 逆向工程自動生成實體Mapper、SQL

說明:MyBatis 需要程式設計師自己編寫sql語句,mybatis官方提供逆向工程,可以針對單表自動生成mybatis執行所需要的程式碼。MyBatis Generator:簡稱MBG,是一個專門為MyBatis框架使用者定製的程式碼生成器,可以快速的根據表生成對應的對映檔案,介面,

mybatis逆向工程自動生成

MAVEN專案使用mybatis逆向生成: 首先新增pom依賴: <dependencies> <dependency> <groupId>org.mybatis.generator</g

mybatis 逆向工程 自動生成mapper檔案沒有 主鍵方法附解決方法

總結了一下網上的三大原因 1.資料表沒有設定主鍵     設定個主鍵就好 2.在mybits配置文件裡設定了某些屬性值為false    在mybatis配置文件裡檢視    enableSelectByPrimaryKey="true"   enableUpda

MyBatis逆向工程自動生成代碼

pan integer odin myba 部分 call res defaults 數據庫連接 MyBatis逆向工程根據數據庫表自動生成mapper.xml,entity類,mapper類,簡直不要 太方便好嘛 下面貼上關鍵配置代碼,以免以後找不到 generato

mybatis-generator-maven-plugin外掛自動生成程式碼的配置方法

1. 第一步,在pom檔案中引入如下外掛   //專案示例程式碼: <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-g

maven專案自動生成程式碼mybatis-generator 程式碼自動生成

1.本地安裝maven,配置好環境變數 2.在專案下的jdbc檔案中引用相關mapper外掛:(拷貝以下程式碼,修改相關路徑) jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?

maven+mybatis+mybatis-generator+sql server 2005自動生成程式碼加上自定義分頁外掛批量插入更新外掛

第一步:準備需要的jar包。由於maven只要配置pom.xml就可以從倉庫下載jar包。因此我們首先配置pom.xml。 注意com.microsoft.sqlserver需要自己加入maven倉庫的。 <dependencies> ......

mybatis學習系列--逆向工程簡單使用及mybatis原理

http idt class font lose file cor admin span 2逆向工程簡單測試(68-70) SqlSessionFactory sqlSessionFactory=getSqlSessionFactory(); SqlSession

mybatis自動生成對應表的實體、介面對映檔案

使用maven構建的專案,其中整合了mybatis,每次使用時都需要建立model實體類,dao介面和mapper對映檔案,為了方便開發,maven中有一種外掛可以直接生成資料庫表對應的實體類,介面和對映檔案 1.首先要在pom.xml檔案中加入外掛依賴,注意直接放在<

mybatis-generator自動建立資料庫中的表生成檔案有實體mapper.xml配置檔案

這兩天需要用到MyBatis的程式碼自動生成的功能,由於MyBatis屬於一種半自動的ORM框架,所以主要的工作就是配置Mapping對映檔案,但是由於手寫對映檔案很容易出錯,所以可利用MyBatis生成器自動生成實體類、DAO介面和Mapping對映檔案。這樣可以省去很多的