电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

瀏覽:8日期:2023-10-18 12:57:27
目錄三者實現(xiàn)對比使用fluent mybatis 來實現(xiàn)上面的功能換成mybatis原生實現(xiàn)效果換成mybatis plus實現(xiàn)效果生成代碼編碼比較fluent mybatis生成代碼設(shè)置mybatis plus代碼生成設(shè)置FluentMybatis特性一覽三者對比總結(jié)Fluent Mybatis介紹和源碼

使用fluent mybatis可以不用寫具體的xml文件,通過java api可以構(gòu)造出比較復(fù)雜的業(yè)務(wù)sql語句,做到代碼邏輯和sql邏輯的合一。不用再需要在Dao中組裝查詢或更新操作,在xml或mapper中再組裝次參數(shù)。那對比原生Mybatis, Mybatis Plus或者其他框架,F(xiàn)luentMybatis提供了哪些便利呢?

我們通過一個比較典型的業(yè)務(wù)需求來具體實現(xiàn)和對比下,假如有學(xué)生成績表結(jié)構(gòu)如下:

create table `student_score`( id bigint auto_increment comment ’主鍵ID’ primary key, student_id bigint not null comment ’學(xué)號’, gender_man tinyint default 0 not null comment ’性別, 0:女; 1:男’, school_term int null comment ’學(xué)期’, subject varchar(30) null comment ’學(xué)科’, scoreint null comment ’成績’, gmt_create datetime not null comment ’記錄創(chuàng)建時間’, gmt_modified datetime not null comment ’記錄最后修改時間’, is_deleted tinyint default 0 not null comment ’邏輯刪除標(biāo)識’) engine = InnoDB default charset=utf8;

現(xiàn)在有需求:統(tǒng)計2000年三門學(xué)科(‘英語’, ‘?dāng)?shù)學(xué)’, ‘語文’)及格分數(shù)按學(xué)期,學(xué)科統(tǒng)計最低分,最高分和平均分,且樣本數(shù)需要大于1條,統(tǒng)計結(jié)果按學(xué)期和學(xué)科排序我們可以寫SQL語句如下

select school_term, subject, count(score) as count, min(score) as min_score, max(score) as max_score, avg(score) as max_scorefrom student_scorewhere school_term >= 2000 and subject in (’英語’, ’數(shù)學(xué)’, ’語文’) and score >= 60 and is_deleted = 0group by school_term, subjecthaving count(score) > 1order by school_term, subject;

那上面的需求,分別用fluent mybatis, 原生mybatis 和 Mybatis plus來實現(xiàn)一番。

三者實現(xiàn)對比使用fluent mybatis 來實現(xiàn)上面的功能

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

具體代碼

我們可以看到fluent api的能力,以及IDE對代碼的渲染效果。

換成mybatis原生實現(xiàn)效果

定義Mapper接口

public interface MyStudentScoreMapper { List<Map<String, Object>> summaryScore(SummaryQuery paras);}

定義接口需要用到的參數(shù)實體 SummaryQuery

@Data@Accessors(chain = true)public class SummaryQuery { private Integer schoolTerm; private List<String> subjects; private Integer score; private Integer minCount;}

定義實現(xiàn)業(yè)務(wù)邏輯的mapper xml文件

<select resultType='map' parameterType='cn.org.fluent.mybatis.springboot.demo.mapper.SummaryQuery'> select school_term, subject, count(score) as count, min(score) as min_score, max(score) as max_score, avg(score) as max_score from student_score where school_term >= #{schoolTerm} and subject in <foreach collection='subjects' item='item' open='(' close=')' separator=','>#{item} </foreach> and score >= #{score} and is_deleted = 0 group by school_term, subject having count(score) > #{minCount} order by school_term, subject</select>

實現(xiàn)業(yè)務(wù)接口(這里是測試類, 實際應(yīng)用中應(yīng)該對應(yīng)Dao類)

@RunWith(SpringRunner.class)@SpringBootTest(classes = QuickStartApplication.class)public class MybatisDemo { @Autowired private MyStudentScoreMapper mapper; @Test public void mybatis_demo() {// 構(gòu)造查詢參數(shù)SummaryQuery paras = new SummaryQuery() .setSchoolTerm(2000) .setSubjects(Arrays.asList('英語', '數(shù)學(xué)', '語文')) .setScore(60) .setMinCount(1);List<Map<String, Object>> summary = mapper.summaryScore(paras);System.out.println(summary); }}

總之,直接使用mybatis,實現(xiàn)步驟還是相當(dāng)?shù)姆爆崳侍汀D菗Q成mybatis plus的效果怎樣呢?

換成mybatis plus實現(xiàn)效果

mybatis plus的實現(xiàn)比mybatis會簡單比較多,實現(xiàn)效果如下

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

但正如紅框圈出的,寫mybatis plus實現(xiàn)用到了比較多字符串的硬編碼(可以用Entity的get lambda方法部分代替字符串編碼)。字符串的硬編碼,會給開發(fā)同學(xué)造成不小的使用門檻,個人覺的主要有2點:

字段名稱的記憶和敲碼困難 Entity屬性跟隨數(shù)據(jù)庫字段發(fā)生變更后的運行時錯誤

其他框架,比如TkMybatis在封裝和易用性上比mybatis plus要弱,就不再比較了。

生成代碼編碼比較fluent mybatis生成代碼設(shè)置

public class AppEntityGenerator { static final String url = 'jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8'; public static void main(String[] args) {FileGenerator.build(Abc.class); } @Tables(/** 數(shù)據(jù)庫連接信息 **/url = url, username = 'root', password = 'password',/** Entity類parent package路徑 **/basePack = 'cn.org.fluent.mybatis.springboot.demo',/** Entity代碼源目錄 **/srcDir = 'spring-boot-demo/src/main/java',/** Dao代碼源目錄 **/daoDir = 'spring-boot-demo/src/main/java',/** 如果表定義記錄創(chuàng)建,記錄修改,邏輯刪除字段 **/gmtCreated = 'gmt_create', gmtModified = 'gmt_modified', logicDeleted = 'is_deleted',/** 需要生成文件的表 ( 表名稱:對應(yīng)的Entity名稱 ) **/tables = @Table(value = {'student_score'}) ) static class Abc { }}mybatis plus代碼生成設(shè)置

public class CodeGenerator { static String dbUrl = 'jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8'; @Test public void generateCode() {GlobalConfig config = new GlobalConfig();DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setDbType(DbType.MYSQL) .setUrl(dbUrl) .setUsername('root') .setPassword('password') .setDriverName(Driver.class.getName());StrategyConfig strategyConfig = new StrategyConfig();strategyConfig .setCapitalMode(true) .setEntityLombokModel(false) .setNaming(NamingStrategy.underline_to_camel) .setColumnNaming(NamingStrategy.underline_to_camel) .setEntityTableFieldAnnotationEnable(true) .setFieldPrefix(new String[]{'test_'}) .setInclude(new String[]{'student_score'}) .setLogicDeleteFieldName('is_deleted') .setTableFillList(Arrays.asList(new TableFill('gmt_create', FieldFill.INSERT),new TableFill('gmt_modified', FieldFill.INSERT_UPDATE)));config .setActiveRecord(false) .setIdType(IdType.AUTO) .setOutputDir(System.getProperty('user.dir') + '/src/main/java/') .setFileOverride(true);new AutoGenerator().setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setPackageInfo(new PackageConfig() .setParent('com.mp.demo') .setController('controller') .setEntity('entity') ).execute(); }}FluentMybatis特性一覽

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

三者對比總結(jié)

看完3個框架對同一個功能點的實現(xiàn), 各位看官肯定會有自己的判斷,筆者這里也總結(jié)了一份比較。

- Mybatis Plus Fluent Mybatis 代碼生成 生成 Entity, Mapper, Wrapper等文件, 并且Generator很好用 只生成Entity, 再通過編譯生成 Mapper, Query, Update 和 SqlProvider 和Mybatis的共生關(guān)系 需要替換原有的SqlSessionFactoryBean 對Mybatis沒有任何修改,原來怎么用還是怎么用 動態(tài)SQL構(gòu)造方式 應(yīng)用啟動時, 根據(jù)Entity注解信息構(gòu)造動態(tài)xml片段,注入到Mybatis解析器 應(yīng)用編譯時,根據(jù)Entity注解,編譯生成對應(yīng)方法的SqlProvider,利用mybatis的Mapper上@InsertProvider @SelectProvider @UpdateProvider注解關(guān)聯(lián) 動態(tài)SQL結(jié)果是否容易DEBUG跟蹤 不容易debug 容易,直接定位到SQLProvider方法上,設(shè)置斷點即可 動態(tài)SQL構(gòu)造 通過硬編碼字段名稱, 或者利用Entity的get方法的lambda表達式 通過編譯手段生成對應(yīng)的方法名,直接調(diào)用方法即可 字段變更后的錯誤發(fā)現(xiàn) 通過get方法的lambda表達的可以編譯發(fā)現(xiàn),通過字段編碼的無法編譯發(fā)現(xiàn) 編譯時便可發(fā)現(xiàn) 不同字段動態(tài)SQL構(gòu)造方法 通過接口參數(shù)方式 通過接口名稱方式, FluentAPI的編碼效率更高 語法渲染特點 無 通過關(guān)鍵變量select, update, set, and, or可以利用IDE語法渲染, 可讀性更高

Fluent Mybatis介紹和源碼

Fluent Mybatis文檔&示例

Fluent Mybatis源碼, github

到此這篇關(guān)于Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比的文章就介紹到這了,更多相關(guān)Fluent Mybatis,原生Mybatis,Mybatis Plus內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | OpenI 启智 新一代人工智能开源开放平台 | CNC机加工-数控加工-精密零件加工-ISO认证厂家-鑫创盟 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械| 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 模切之家-专注服务模切行业的B2B平台!| arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 学生作文网_中小学生作文大全与写作指导 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 |