mybatis generator 使用方法教程(生成帶注釋的實(shí)體類)
引言:
最近的一個(gè)項(xiàng)目,由于數(shù)據(jù)庫(kù)表巨多,導(dǎo)致需要?jiǎng)?chuàng)建N多個(gè)java實(shí)體、dao、mapper.xml映射文件,如果均使用純手工編寫,無疑需要耗費(fèi)大量時(shí)間和精力。于是上網(wǎng)學(xué)習(xí)了mybatis generator的使用。
現(xiàn)在項(xiàng)目寫完了,閑暇之余把干貨奉上,供大家直接使用。
需求場(chǎng)景:
當(dāng)你的java 項(xiàng)目數(shù)據(jù)庫(kù)有N張表需要使用mybatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),建議使用mybatis generator 自動(dòng)生成工具??梢宰詣?dòng)幫助你生成java實(shí)體類、dao、mapper.xml等。
首先給大家分享我自己封裝好的mybatis generator代碼自動(dòng)生成項(xiàng)目,里面集成了中文注釋、mysql的limit分頁功能。
git地址:git@github.com:zhaojiatao/com.zjt.mybatisGenerator.git
代碼克隆到自己的機(jī)器上,import到myeclipse中,需要重新編譯一下,就不會(huì)報(bào)錯(cuò)了。
此外需要注意需要重新引入一下jar文件夾中的mybatis-generator-plugin-1.0.0.jar,如圖:

最終目錄結(jié)構(gòu)如下:

接下來,請(qǐng)打開配置文件,如圖:
(關(guān)于generatorConfig.xml的具體教程可參見:http://blog.csdn.net/isea533/article/details/42102297)
![]()
接下來,打開generatorConfig.xml,根據(jù)你自己的需求,改變?nèi)缦屡渲茫?/p>
首先,修改數(shù)據(jù)庫(kù)連接地址。

期次,聲明本次需要操作的表及為即將生成的實(shí)體類命名。
![]()
再次,設(shè)置實(shí)體文件、dao、mapper.xml生成的路徑。

最后,運(yùn)行StartUp.java
![]()
的main方法執(zhí)行生成操作。
mysql中本地?cái)?shù)據(jù)庫(kù)表為

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
對(duì)照表,我們看一下生成的包和文件:



其中Student.java文件當(dāng)然就是數(shù)據(jù)庫(kù)表實(shí)體類,對(duì)應(yīng)表的相關(guān)字段。
下面,在我們的項(xiàng)目中導(dǎo)入生成的相關(guān)文件,如下:

打開Student.java 我們可以發(fā)現(xiàn)字段已經(jīng)生成了中文注釋;

打開StudentMapper.xml可以發(fā)現(xiàn)已經(jīng)可以使用mysql的limit分頁;

在配置好mybatis的數(shù)據(jù)庫(kù)連接后(mybatis相關(guān)配置請(qǐng)自行baidu,本文終點(diǎn)介紹mybatis generator的使用),我們開始數(shù)據(jù)庫(kù)的相關(guān)操作:
打開: testMybatis.java
在此,我主要講幾個(gè)容易出錯(cuò)的方法和區(qū)別:
1.selectByExample和selectByExampleWithBLOBs的區(qū)別(包含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();
}
}
結(jié)果:![]()
原因:
由于student表中,disc字段類型為longtext,故如果想要搜索結(jié)果包含大字段類型,則必須使用selectByExampleWithBLOBs。無需檢索大字段,則使用selectByExample;
2.insertSelective和insert的區(qū)別
當(dāng)有部分字段未設(shè)值時(shí),使用insertSelective:
<SPAN style="FONT-SIZE: 14px">@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();
}
}
</SPAN>
結(jié)果:

當(dāng)有所有字段均已設(shè)值時(shí),使用insert;
<SPAN style="FONT-SIZE: 14px">@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();
}
}
</SPAN>
結(jié)果:

3.修改操作

updateByExample
如果example定義了兩個(gè)字段,數(shù)據(jù)庫(kù)共4個(gè)字段,則修改數(shù)據(jù)庫(kù)的兩個(gè)字段,其余兩個(gè)字段改為null;
updateByExampleSelective
如果example定義了兩個(gè)字段,數(shù)據(jù)庫(kù)共4個(gè)字段,則修改數(shù)據(jù)庫(kù)的兩個(gè)字段,其余兩個(gè)字段不動(dòng);
updateByExampleWithBLOBs
和updateByExample相比此方法可以修改大字段類型,其余性質(zhì)和updateByExample相同
updateByPrimaryKey
如果record定義了兩個(gè)字段,其中有一個(gè)字段是主鍵,數(shù)據(jù)庫(kù)共4個(gè)字段,則根據(jù)主鍵修改數(shù)據(jù)庫(kù)的兩個(gè)字段,其余兩個(gè)字段改為null;
updateByPrimaryKeySelective
如果record定義了兩個(gè)字段,其中有一個(gè)字段是主鍵,數(shù)據(jù)庫(kù)共4個(gè)字段,則根據(jù)主鍵修改數(shù)據(jù)庫(kù)的兩個(gè)字段,其余兩個(gè)字段不動(dòng);
updateByPrimaryKeyWithBLOBs
和updateByPrimaryKey相比此方法可以修改大字段類型,其余性質(zhì)和updateByPrimaryKey相同
以上這篇mybatis generator 使用方法教程(生成帶注釋的實(shí)體類)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java FtpClient 實(shí)現(xiàn)文件上傳服務(wù)
本文主要對(duì)Java FtpClient實(shí)現(xiàn)簡(jiǎn)單的圖片上傳到服務(wù)器的方法進(jìn)行介紹,并且展示的小demo中,對(duì)配置過程中主要碰到的問題:關(guān)于文件權(quán)限的問題也進(jìn)行了說明,下面跟著小編一起來看下吧2016-12-12
Java實(shí)現(xiàn)把窗體隱藏到系統(tǒng)托盤方法
這篇文章主要介紹了Java實(shí)現(xiàn)把窗體隱藏到系統(tǒng)托盤方法,本文直接給出核心功能代碼,需要的朋友可以參考下2015-05-05
Spring SmartLifecycle:如何精準(zhǔn)控制Bean的生命周期
這篇文章主要介紹了Spring SmartLifecycle:如何精準(zhǔn)控制Bean的生命周期問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Redis內(nèi)存數(shù)據(jù)庫(kù)示例分析
Redis本身的內(nèi)容比較復(fù)雜。如果你上來,你應(yīng)該研究一個(gè)細(xì)節(jié)點(diǎn),比如連接池和數(shù)據(jù)結(jié)構(gòu)。雖然可以直接了解某一點(diǎn)的詳細(xì)來源內(nèi)容,甚至盡快解決一些意外,但是容易淹沒在失眠的細(xì)節(jié)中,整體控制不了Redis2022-12-12
eclipse啟動(dòng)tomcat無法訪問的解決方法
這篇文章介紹了eclipse啟動(dòng)tomcat無法訪問的解決方法,有需要的朋友可以參考一下2013-10-10
Java?HttpURLConnection使用方法與實(shí)例演示分析
這篇文章主要介紹了Java?HttpURLConnection使用方法與實(shí)例演示,HttpURLConnection一個(gè)抽象類是標(biāo)準(zhǔn)的JAVA接口,該類位于java.net包中,它提供了基本的URL請(qǐng)求,響應(yīng)等功能,下面我們來深入看看2023-10-10

