什么是通用mapper秩贰?
通用mapper 可以極大的方便開發(fā)人員進(jìn)行ORM贩猎,提供極其方便的單表增刪改查。
什么是通用mapper萍膛,一句話簡單說吭服,它就是個輔助mybatis極簡單表開發(fā)的組件。它不是為了替代mybatis蝗罗,而是讓mybatis的開發(fā)更方便艇棕。
可以按照自己的需要選擇通用方法,還能很方便的開發(fā)自己的通用方法串塑。
為什么要用通用mapper沼琉?
原生Mybatis的痛點(diǎn)
1、mapper.xml文件里有大量的sql桩匪,當(dāng)數(shù)據(jù)庫表字段變動打瘪,配置文件就要修改
2、需要自己實(shí)現(xiàn)sql分頁傻昙,select * from table where . . . limit 1,3
自己手寫分頁闺骚,除了傳參page、pageSize妆档,還需要返回條目總數(shù)count僻爽。
3、數(shù)據(jù)庫可移植性差:如果項目更換數(shù)據(jù)庫贾惦,比如oracle-->mysql胸梆,mapper.xml中的sql要重新寫,因為Oracle的PLSQL 和mysql 支持的函數(shù)是不同的须板。
4碰镜、生成的代碼量過大。
5习瑰、批量操作绪颖,批量插入,批量更新杰刽,需要自寫菠发。
快速開始
用過 Mybatis Geneator(MBG)都知道王滤,我們可以通過配置generatorConfig.xml,指定一個數(shù)據(jù)庫以及數(shù)據(jù)庫表滓鸠,可以使用MBG直接生成對應(yīng)的Java Bean實(shí)體類(POJO)雁乡、Mapper.java接口(DAO層接口)、Mapper.xml糜俗,以及實(shí)體類的Example.java踱稍。
這就是類似于Hibernate 的逆向工程。逆向從數(shù)據(jù)庫表生成了實(shí)體類悠抹。
但是這種原生的MBG生成的方式珠月,仍然有一些不足之處。如果再配合使用通用mapper 楔敌,會有更多方便之處啤挎。下面通過對比原生mybatis生成 和 集成通用mapper后的生成,看看具體有什么區(qū)別卵凑。
代碼對比(原生mybatis生成 VS 通用mapper生成)
以單表person庆聘,生成對應(yīng)的Person實(shí)體類為例:
原生mybatis生成:
PersonMapper.xml、Person.java勺卢、PersonMapper.java伙判、PersonExample.java
通用mapper生成:
PersonMapper.xml、Person.java黑忱、PersonMapper.java
原生mybatis生成的POJO中宴抚,純代碼,不包含注解甫煞。
通用mapper生成的POJO中菇曲,屬性加了 (持久化)注解,與數(shù)據(jù)庫字段進(jìn)行匹配危虱。
原生mybatis生成的PersonMapper.xml中羊娃,有很多sql唐全。
通用mapper生成的PersonMapper.xml中埃跷,只有一個POJO與數(shù)據(jù)庫字段的映射<resultMap>。
通用mapper生成的PersonMapper.java接口邮利,extends MyMapper<?>弥雹。
實(shí)際上,MyMapper<?>已經(jīng)提供常用的 單表CRUD方法的實(shí)現(xiàn)延届。
如果還有其他特殊CRUD需求(如多表連接查詢)剪勿,只需自己在PersonMapper.java接口添加方法,對應(yīng)在PersonMapper.xml寫sql就行了方庭。
原生mybatis生成的PersonExample.java類厕吉,是和具體的POJO類關(guān)聯(lián)酱固,生成POJO類時,對應(yīng)的Example類也生成(生成配置中头朱,可以選擇不生成)运悲。
PersonExample example = new PersonExample();
example.createCriteria().andEqualTo("id","1");
personMapper.selectByExample(example);
通用mapper的Example類,是通用的项钮,并不是和具體的POJO綁定班眯。構(gòu)造時,只需要傳入實(shí)體類的Class<?>類型烁巫。
原生mybatis的批量插入署隘,需要寫sql,進(jìn)行for循環(huán)亚隙。
通用mapper磁餐,天然的就支持批量操作。直接調(diào)用personMapper.insertList()
實(shí)戰(zhàn) SSM中使用通用mapper
A powerful GUI tool for MyBatisGenerator(MBG)