為什麼要有mybatis
mybatis 是一個Java 的ORM 框架,ORM 的出現就是為了簡化開發。最初的開發方式是業務邏輯和數據庫查詢邏輯是分開的,或者在程序中編寫sql 語句,或者調用sql 存儲過程。這樣導致思維需要在語言邏輯和sql 邏輯之間切換,導致開發效率低下。所以出現了一系列的ORM 框架,ORM 框架將數據庫表和Java 對像對應起來,當操作數據庫時,只需要操作對象的Java 對象即可,例如設置幾個and 條件,只需要設置幾個屬性即可。
為什麼要有mybatis generator
雖然說有了mybatis 框架,但是學習mybatis 也需要學習成本,尤其是配置它需要的XML 文件,那也是相當繁瑣,而且配置中出現錯誤,不容易定位。當出現莫名其妙的錯誤或者有大批量需要生成的對象時,時常會有種生無可戀的感覺在腦中徘徊。故此, mybatis generator 應運而生了。
它只需要簡單配置,即可完成大量的表到mybatis Java 對象的生成工作,不僅速度快,而且不會出錯,可讓開發人員真正的專注於業務邏輯的開發。
官方提供的mybatis generator 功能比較簡單,對於稍微複雜但是開發中必然用到的分頁功能、批量插入功能等沒有實現,但已經有成熟的插件功能支持。
我已經將我們平時用的mybatis生成工具放到github ,其中已集成了分頁、批量插入、序列化功能。可到這裡查看,已經介紹了使用方法。
mybatis generator 生成的文件結構
生成的文件包含三類:
1.Model 實體文件,一個數據庫表生成一個Model 實體;
2.ModelExample 文件,此文件和實體文件在同一目錄下,主要用於查詢條件構造;
3.Mapper 接口文件,數據數操作方法都在此接口中定義;
4.Mapper XML 配置文件;
在配置文件中配置好文件的生成路徑,並設置好對應的包名,即可生成對應的目錄結構和文件。我將生成目錄設置為test 目錄,實體包名設置為com.fengzheng.dao.entity ,接口包名設置為com.fengzheng.dao.mapper ,然後生成的文件目錄結構如下圖所示:
如何編寫代碼呢
所有的方法調用都來自於生成的接口文件,在Spring MVC 中,需要在調用方聲明,用一個黑名單接口為例,生成的接口文件為BlackListIPMapper ,所以在調用方要聲明此接口,如下:
@Autowiredprivate BlackListIPMapper blackListipMapper;
數據庫查詢
查詢是最常用功能,如下方法是查詢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;}更新、添加、刪除方法調用方法類似,具體可查看相關文檔介紹。
排序
public BlackListIP get(String ip){BlackListIPExample example = new BlackListIPExample();example.setOrderByClause("CREATE_TIME desc"); //按創建時間排序example.createCriteria().andIpEqualTo(ip);List<BlackListIP> blackListIPList = blackListipMapper.selectByExample(example);if(blackListIPList!=null && blackListIPList.size()>0){return blackListIPList.get(0);}return null;}分頁
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;}實現a=x and (b=xx or b=xxx)這樣的查詢條件
雖然自動生成代碼很方便,但凡事有利即有弊,mybatis generator 沒有辦法生成表聯查(join)功能,只能手動添加。如下實現了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;但是需要修改一點代碼,修改org.mybatis.generator.codegen.mybatis3.model包下的ExampleGenerator的第524行代碼,將method.setVisibility(JavaVisibility.PROTECTED); 改為method.setVisibility(JavaVisibility.PUBLIC);
改動已同步到github上。
以上所述是小編給大家介紹的MyBatis Generator生成代碼及使用方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!