MyBatis Generator生成代碼及使用方式詳解
為什么要有mybatis
mybatis 是一個(gè) Java 的 ORM 框架,ORM 的出現(xiàn)就是為了簡(jiǎn)化開(kāi)發(fā)。最初的開(kāi)發(fā)方式是業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)查詢邏輯是分開(kāi)的,或者在程序中編寫(xiě) sql 語(yǔ)句,或者調(diào)用 sql 存儲(chǔ)過(guò)程。這樣導(dǎo)致思維需要在語(yǔ)言邏輯和 sql 邏輯之間切換,導(dǎo)致開(kāi)發(fā)效率低下。所以出現(xiàn)了一系列的 ORM 框架,ORM 框架將數(shù)據(jù)庫(kù)表和 Java 對(duì)象對(duì)應(yīng)起來(lái),當(dāng)操作數(shù)據(jù)庫(kù)時(shí),只需要操作對(duì)象的 Java 對(duì)象即可,例如設(shè)置幾個(gè) and 條件,只需要設(shè)置幾個(gè)屬性即可。
為什么要有mybatis generator
雖然說(shuō)有了 mybatis 框架,但是學(xué)習(xí) mybatis 也需要學(xué)習(xí)成本,尤其是配置它需要的 XML 文件,那也是相當(dāng)繁瑣,而且配置中出現(xiàn)錯(cuò)誤,不容易定位。當(dāng)出現(xiàn)莫名其妙的錯(cuò)誤或者有大批量需要生成的對(duì)象時(shí),時(shí)常會(huì)有種生無(wú)可戀的感覺(jué)在腦中徘徊。故此, mybatis generator 應(yīng)運(yùn)而生了。
它只需要簡(jiǎn)單配置,即可完成大量的表到 mybatis Java 對(duì)象的生成工作,不僅速度快,而且不會(huì)出錯(cuò),可讓開(kāi)發(fā)人員真正的專(zhuān)注于業(yè)務(wù)邏輯的開(kāi)發(fā)。
官方提供的 mybatis generator 功能比較簡(jiǎn)單,對(duì)于稍微復(fù)雜但是開(kāi)發(fā)中必然用到的分頁(yè)功能、批量插入功能等沒(méi)有實(shí)現(xiàn),但已經(jīng)有成熟的插件功能支持。
我已經(jīng)將我們平時(shí)用的mybatis生成工具放到 github ,其中已集成了分頁(yè)、批量插入、序列化功能??傻?這里 查看,已經(jīng)介紹了使用方法。
mybatis generator 生成的文件結(jié)構(gòu)
生成的文件包含三類(lèi):
1.Model 實(shí)體文件,一個(gè)數(shù)據(jù)庫(kù)表生成一個(gè) Model 實(shí)體;
2.ModelExample 文件,此文件和實(shí)體文件在同一目錄下,主要用于查詢條件構(gòu)造;
3.Mapper 接口文件,數(shù)據(jù)數(shù)操作方法都在此接口中定義;
4.Mapper XML 配置文件;
在配置文件中配置好文件的生成路徑,并設(shè)置好對(duì)應(yīng)的包名,即可生成對(duì)應(yīng)的目錄結(jié)構(gòu)和文件。我將生成目錄設(shè)置為 test 目錄,實(shí)體包名設(shè)置為 com.fengzheng.dao.entity ,接口包名設(shè)置為 com.fengzheng.dao.mapper ,然后生成的文件目錄結(jié)構(gòu)如下圖所示:

如何編寫(xiě)代碼呢
所有的方法調(diào)用都來(lái)自于生成的接口文件,在 Spring MVC 中,需要在調(diào)用方聲明,用一個(gè)黑名單接口為例,生成的接口文件為 BlackListIPMapper ,所以在調(diào)用方要聲明此接口,如下:
@Autowired private BlackListIPMapper blackListipMapper;
數(shù)據(jù)庫(kù)查詢
查詢是最常用功能,如下方法是查詢 IP 為某值的記錄,如果知道主鍵的話,可以用 selectByPrimaryKey 方法。
public BlackListIP get(String ip){
BlackListIPExample example = new BlackListIPExample();
example.createCriteria().andIpEqualTo(ip);
List<BlackListIP> blackListIPList = blackListipMapper.selectByExample(example);
if(blackListIPList!=null && blackListIPList.size()>0){
return blackListIPList.get(0);
}
return null;
}
更新、添加、刪除方法調(diào)用方法類(lèi)似,具體可查看相關(guān)文檔介紹。
排序
public BlackListIP get(String ip){
BlackListIPExample example = new BlackListIPExample();
example.setOrderByClause("CREATE_TIME desc"); //按創(chuàng)建時(shí)間排序
example.createCriteria().andIpEqualTo(ip);
List<BlackListIP> blackListIPList = blackListipMapper.selectByExample(example);
if(blackListIPList!=null && blackListIPList.size()>0){
return blackListIPList.get(0);
}
return null;
}
分頁(yè)
public PageInfo list(Account account, PageInfo pageInfo,String startTime,String endTime) {
account.setIsDel(SysParamDetailConstant.IS_DEL_FALSE);
AccountExample example = getCondition(account,startTime,endTime);
if (null != pageInfo && null != pageInfo.getPageStart()) {
example.setLimitClauseStart(pageInfo.getPageStart());
example.setLimitClauseCount(pageInfo.getPageCount());
}
example.setOrderByClause(" CREATE_TIME desc ");
List<Account> list = accountMapper.selectByExample(example);
int totalCount = accountMapper.countByExample(example);
pageInfo.setList(list);
pageInfo.setTotalCount(totalCount);
return pageInfo;
}
實(shí)現(xiàn) a=x and (b=xx or b=xxx)這樣的查詢條件
雖然自動(dòng)生成代碼很方便,但凡事有利即有弊,mybatis generator 沒(méi)有辦法生成表聯(lián)查(join)功能,只能手動(dòng)添加。如下實(shí)現(xiàn)了a=x and (b=xx or b=xxx)這樣的條件拼接。
AccountExample accountExample = new AccountExample();
AccountExample.Criteria criteria = accountExample.createCriteria().andTypeEqualTo("4");
criteria.addCriterion(String.format(" (ID=%d or ID=%d) ",34,35));
List<Account> accounts = accountMapper.selectByExample(accountExample);
return accounts;
但是需要修改一點(diǎn)代碼,修改 org.mybatis.generator.codegen.mybatis3.model包下的ExampleGenerator的第524行代碼,將 method.setVisibility(JavaVisibility.PROTECTED); 改為 method.setVisibility(JavaVisibility.PUBLIC);
改動(dòng)已同步到github上。
以上所述是小編給大家介紹的MyBatis Generator生成代碼及使用方式,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解MyBatis-Plus updateById方法更新不了空字符串/null解決方法
這篇文章主要介紹了詳解MyBatis-Plus updateById方法更新不了空字符串/null解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
mybatis-plus分頁(yè)查詢?nèi)N方法小結(jié)
本文主要介紹了mybatis-plus分頁(yè)查詢?nèi)N方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Springboot項(xiàng)目javax.validation使用方法詳解
這篇文章主要介紹了Springboot項(xiàng)目javax.validation使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
IntelliJ?idea報(bào)junit?no?tasks?available問(wèn)題的解決辦法
這篇文章主要給大家介紹了關(guān)于IntelliJ?idea報(bào)junit?no?tasks?available問(wèn)題的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
Java利用Reflect實(shí)現(xiàn)封裝Excel導(dǎo)出工具類(lèi)
這篇文章主要為大家詳細(xì)介紹了Java如何利用Reflect實(shí)現(xiàn)封裝Excel導(dǎo)出工具類(lèi),文中的實(shí)現(xiàn)方法講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-11-11
Java HtmlEmail 郵件發(fā)送的簡(jiǎn)單實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇Java HtmlEmail 郵件發(fā)送的簡(jiǎn)單實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
Java實(shí)現(xiàn)京東聯(lián)盟API數(shù)據(jù)獲取功能
這篇文章介紹了Java獲取京東聯(lián)盟API數(shù)據(jù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
Java正則表達(dá)式Pattern和Matcher原理詳解
這篇文章主要介紹了Java正則表達(dá)式Pattern和Matcher原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Windows 10上JDK環(huán)境安裝配置圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows 10上JDK環(huán)境安裝配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
vscode開(kāi)發(fā)maven的javaweb項(xiàng)目并部署到tomcat及配置指南
這篇文章主要給大家介紹了關(guān)于vscode開(kāi)發(fā)maven的javaweb項(xiàng)目并部署到tomcat及配置的相關(guān)資料,在vscode中創(chuàng)建maven項(xiàng)目,需要逐一操作下面的環(huán)節(jié),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12

