mybatis generator 使用教程(生成帶註釋的實體類)

来源:http://www.cnblogs.com/zhaojiatao/archive/2017/08/17/7380608.html
-Advertisement-
Play Games

引言: 最近的一個項目,由於資料庫表巨多,導致需要創建N多個java實體、dao、mapper.xml映射文件,如果均使用純手工編寫,無疑需要耗費大量時間和精力。於是上網學習了mybatis generator的使用。 現在項目寫完了,閑暇之餘把乾貨奉上,供大家直接使用。 需求場景: 當你的java ...


引言:

最近的一個項目,由於資料庫表巨多,導致需要創建N多個java實體、dao、mapper.xml映射文件,如果均使用純手工編寫,無疑需要耗費大量時間和精力。於是上網學習了mybatis generator的使用。

現在項目寫完了,閑暇之餘把乾貨奉上,供大家直接使用。


 需求場景:

當你的java 項目資料庫有N張表需要使用mybatis進行資料庫操作時,建議使用mybatis generator 自動生成工具。可以自動幫助你生成java實體類、dao、mapper.xml等。


 首先給大家分享我自己封裝好的mybatis generator代碼自動生成項目,裡面集成了中文註釋、mysql的limit分頁功能。

git地址:[email protected]:zhaojiatao/com.zjt.mybatisGenerator.git

代碼克隆到自己的機器上,import到myeclipse中,需要重新編譯一下,就不會報錯了。

此外需要註意需要重新引入一下jar文件夾中的mybatis-generator-plugin-1.0.0.jar,如圖:

最終目錄結構如下

接下來,請打開配置文件,如圖:

(關於generatorConfig.xml的具體教程可參見:http://blog.csdn.net/isea533/article/details/42102297)

接下來,打開generatorConfig.xml,根據你自己的需求,改變如下配置:

首先,修改資料庫連接地址。

期次,聲明本次需要操作的表及為即將生成的實體類命名。

再次,設置實體文件、dao、mapper.xml生成的路徑。

最後,運行StartUp.java

的main方法執行生成操作。


 

 

mysql中本地資料庫表為

CREATE TABLE `student` (
   `id` varchar(50) NOT NULL COMMENT '主鍵',
   `name` varchar(10) DEFAULT NULL COMMENT '姓名',
   `gender` int(2) DEFAULT NULL COMMENT '性別1男2女',
   `disc` longtext COMMENT '大文本描述',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

 對照表,我們看一下生成的包和文件:

 

其中Student.java文件當然就是資料庫表實體類,對應表的相關欄位。

 

下麵,在我們的項目中導入生成的相關文件,如下:

打開Student.java 我們可以發現欄位已經生成了中文註釋;

 

 

打開StudentMapper.xml可以發現已經可以使用mysql的limit分頁;

 


 

在配置好mybatis的資料庫連接後(mybatis相關配置請自行baidu,本文終點介紹mybatis generator的使用),我們開始資料庫的相關操作:

打開: testMybatis.java

在此,我主要講幾個容易出錯的方法和區別:

 1.selectByExample和selectByExampleWithBLOBs的區別(包含Example的使用)

@Test
    public void testQueryStudentExample() {
        SqlSession sqlSession = sqlSessionFactory.openSession(false);
        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        try {
            //分頁查詢性別為男、並且名稱中包含z的記錄,第一頁,每頁3條記錄,按性別排序
            StudentExample studentExample=new StudentExample();
            studentExample.or().andGenderEqualTo(1).andNameLike("%z%");
            studentExample.setOffset(0);
            studentExample.setLimit(3);
       studentExample.setOrderByClause("GENDER DESC");
List
<Student> list1 = studentMapper.selectByExample(studentExample); List<Student> list2 = studentMapper.selectByExampleWithBLOBs(studentExample); System.out.println(list1.get(0).getDisc()); System.out.println(list2.get(0).getDisc()); } catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally { sqlSession.close(); } }

 

結果:

原因:

由於student表中,disc欄位類型為longtext,故如果想要搜索結果包含大欄位類型,則必須使用selectByExampleWithBLOBs。無需檢索大欄位,則使用selectByExample;

 

 2.insertSelective和insert的區別

當有部分欄位未設值時,使用insertSelective:

@Test
	public void testInsertStudent() {
		SqlSession sqlSession = sqlSessionFactory.openSession(false);
		StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
		try {
			
			Student s=new Student();
			s.setId(java.util.UUID.randomUUID().toString().replaceAll("\\-", ""));
			s.setName("zjt");
			s.setGender(1);
			//s.setDisc("MyBatis Generator 真心好用");
			studentMapper.insertSelective(s);
			sqlSession.commit(); 
			
			
		} catch(Exception e){
			e.printStackTrace();
			sqlSession.rollback();  
		}finally {
			sqlSession.close();
		}
	}

  

結果:

當有所有欄位均已設值時,使用insert;

@Test
	public void testInsertStudent() {
		SqlSession sqlSession = sqlSessionFactory.openSession(false);
		StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
		try {
			
			Student s=new Student();
			s.setId(java.util.UUID.randomUUID().toString().replaceAll("\\-", ""));
			s.setName("zjt");
			s.setGender(1);
			s.setDisc("MyBatis Generator 真心好用");
			studentMapper.insertSelective(s);
			sqlSession.commit(); 
			
			
		} catch(Exception e){
			e.printStackTrace();
			sqlSession.rollback();  
		}finally {
			sqlSession.close();
		}
	}

  結果:

 

 

 

 

3.修改操作

 

updateByExample        如果example定義了兩個欄位,資料庫共4個欄位,則修改資料庫的兩個欄位,其餘兩個欄位改為null;

updateByExampleSelective    如果example定義了兩個欄位,資料庫共4個欄位,則修改資料庫的兩個欄位,其餘兩個欄位不動;

updateByExampleWithBLOBs   和updateByExample相比此方法可以修改大欄位類型,其餘性質和updateByExample相同

updateByPrimaryKey       如果record定義了兩個欄位,其中有一個欄位是主鍵,資料庫共4個欄位,則根據主鍵修改資料庫的兩個欄位,其餘兩個欄位改為null;

updateByPrimaryKeySelective   如果record定義了兩個欄位,其中有一個欄位是主鍵,資料庫共4個欄位,則根據主鍵修改資料庫的兩個欄位,其餘兩個欄位不動;

updateByPrimaryKeyWithBLOBs  和updateByPrimaryKey相比此方法可以修改大欄位類型,其餘性質和updateByPrimaryKey相同

 

 

 

 

綜上稍加練習,基本可以使用了。多說無益,不如敲起來。

 

我自己的demo:

[email protected]:zhaojiatao/testgenerator.git

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天有個大牛說我啰嗦,眼光比較細碎,看不到重點。太他爺爺的有道理了!要說看人品,還是女孩子強一些。原來記得看到一個男孩子的抱怨,說怎麼兩人剛剛開始在一起,女孩子在心裡就已經和他過完了一輩子。哥哥們,不想這麼遠行嗎?看看何潔,看看帶著倆娃跳樓的媽媽。所以現在的女孩子是很明白的,有些男孩子個子不高,其貌 ...
  • 關於Spring總結 Spring引入 傳統的基於mvc的項目框架結構:Entity / dao / service / action 簡單用戶訪問流程:/user.action Tomcat (伺服器創建Action、Service、dao 引出思考: 1. 對象創建創建能否寫死? 2. 對象創建 ...
  • 引言 記憶體管理一直是JAVA語言自豪與驕傲的資本,它讓JAVA程式員基本上可以徹底忽略與記憶體管理相關的細節,只專註於業務邏輯。不過世界上不存在十全十美的好事,在帶來了便利的同時,也因此引入了很多令人抓狂的記憶體溢出和泄露的問題。 可怕的事情還不只如此,有些使用其它語言開發的程式員,給JAVA程式員扣上 ...
  • 一springmvc項目中我新增記錄完全ok,編輯就是不行,後臺方法進不去。老是報錯HTTP ERROR 400 Bad Request。 經過查詢,說是400表示請求中的語法錯誤。 我把新增記錄的請求信息拷貝下來,把編輯的請求信息也拷貝下來,然後用notepad++比較兩個請求,終於發現原因就是i ...
  • 第一種原因: no Session 錯誤 dao層中get方法換成了load方法,或者其他原因引起. 原因分析: 真正用到代理對象的時候,代理對象沒有值,並且session的生命周期已經走完了. 解決方案:1,load()換成get(),或者立即查詢,比如列印一下. 2,延長session的存活時間 ...
  • spl_autoload_register() 函數可以註冊任意數量的自動載入器,當使用尚未被定義的類(class)和介面(interface)時自動去載入。通過註冊自動載入器,腳本引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類。_autoload()自動載入類:當我們實例化一個未定義的類時... ...
  • 1.工廠模式,在各種BeanFactory以及ApplicationContext創建中都用到了 2.模版模式,在各種BeanFactory以及ApplicationContext實現中也都用到了 3.代理模式,Spring AOP 利用了 AspectJ AOP實現的! AspectJ AOP 的 ...
  • 在開發django應用的過程中,使用開發者模式啟動服務是特別方便的一件事,只需要 python manage.py runserver 就可以運行服務,並且提供了非常人性化的autoreload機制,不需要手動重啟程式就可以修改代碼並看到反饋。剛接觸的時候覺得這個功能比較人性化,也沒覺得是什麼特別高 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...