引言:
最近的一個項目,由于數據庫表巨多,導致需要創建n多個java實體、dao、mapper.xml映射文件,如果均使用純手工編寫,無疑需要耗費大量時間和精力。于是上網學習了mybatis generator的使用。
現在項目寫完了,閑暇之余把干貨奉上,供大家直接使用。
需求場景:
當你的java 項目數據庫有n張表需要使用mybatis進行數據庫操作時,建議使用mybatis generator 自動生成工具??梢宰詣訋椭闵蒵ava實體類、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的使用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<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> |
結果:
當有所有字段均已設值時,使用insert;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<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> |
結果:
3.修改操作
updatebyexample
如果example定義了兩個字段,數據庫共4個字段,則修改數據庫的兩個字段,其余兩個字段改為null;
updatebyexampleselective
如果example定義了兩個字段,數據庫共4個字段,則修改數據庫的兩個字段,其余兩個字段不動;
updatebyexamplewithblobs
和updatebyexample相比此方法可以修改大字段類型,其余性質和updatebyexample相同
updatebyprimarykey
如果record定義了兩個字段,其中有一個字段是主鍵,數據庫共4個字段,則根據主鍵修改數據庫的兩個字段,其余兩個字段改為null;
updatebyprimarykeyselective
如果record定義了兩個字段,其中有一個字段是主鍵,數據庫共4個字段,則根據主鍵修改數據庫的兩個字段,其余兩個字段不動;
updatebyprimarykeywithblobs
和updatebyprimarykey相比此方法可以修改大字段類型,其余性質和updatebyprimarykey相同
以上這篇mybatis generator 使用方法教程(生成帶注釋的實體類)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/zhaojiatao/archive/2017/08/17/7380608.html