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


引言:

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

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


 需求場景:

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


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

git地址:git@github.com: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:

git@github.com:zhaojiatao/testgenerator.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM