在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解
引言
MyBatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)JDBC的操作數(shù)據(jù)庫(kù)的過程進(jìn)行封裝。MyBatisPlus (簡(jiǎn)稱 MP)是一個(gè) MyBatis的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。
MyBatisPlus 官網(wǎng)是這么說的我們的愿景是成為 MyBatis 最好的搭檔,就像 魂斗羅 中的 1P、2P,基友搭配,效率翻倍。
1.特性
MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的持久層框架
MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集
MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄
MyBatis 是一個(gè) 半自動(dòng)的ORM(Object Relation Mapping)框架
MyBatisPlus 是一個(gè)基于 MyBatis 的擴(kuò)展庫(kù),它提供了一套通用的 CRUD 操作接口,自動(dòng)生成 sql語(yǔ)句,提供了豐富的查詢條件構(gòu)造器等功能。MyBatisPlus 主要使用了注解進(jìn)行配置和映射。
2.代碼的區(qū)別
MyBatis 的代碼主要分為以下幾個(gè)部分:
MyBatis 的配置文件(mybatis-config.xml),用于配置數(shù)據(jù)源、映射文件等。
映射文件(Mapper.xml),用于定義 SQL 語(yǔ)句和結(jié)果映射。
Mapper 接口,用于定義與映射文件對(duì)應(yīng)的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實(shí)現(xiàn) Service 接口,調(diào)用 Mapper 接口進(jìn)行數(shù)據(jù)庫(kù)操作。
MyBatisPlus 的代碼主要涉及到以下幾個(gè)部分:
MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置數(shù)據(jù)源、分頁(yè)插件等。
實(shí)體類(Entity),用于定義數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類。
Mapper 接口,用于定義與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實(shí)現(xiàn) Service 接口,調(diào)用 Mapper 接口進(jìn)行數(shù)據(jù)庫(kù)操作。
3.兩者之間的差異
MyBatis 需要手動(dòng)編寫 SQL 語(yǔ)句和結(jié)果映射,可以根據(jù)實(shí)際需求編寫 SQL 語(yǔ)句,但缺點(diǎn)是編寫映射文件和手動(dòng)設(shè)置參數(shù)比較繁瑣。
MyBatisPlus 提供了一套通用的 CRUD 操作接口,自動(dòng)生成 SQL 語(yǔ)句,簡(jiǎn)化了 MyBatis 的開發(fā),提高了開發(fā)效率,但缺點(diǎn)是定制化能力較差,對(duì)于復(fù)雜的 SQL 語(yǔ)句無法滿足需求。
4.代碼解析
關(guān)于MyBatis 和MyBatisPlus的代碼分析用經(jīng)典的增刪查改來演示
MyBatis實(shí)現(xiàn)增刪查改
1.配置文件
<insert id="addErrLevel" parameterType="ErrLevel"> insert into err_level values (#{errKey},#{errValue},#{errDec}) </insert> <update id="updateErrLevel" parameterType="ErrLevel"> update err_level set errKey = #{errKey},errDec=#{errDec} where errValue = #{errValue} </update> <select id="selectByErrLevel" resultType="ErrLevel"> select * from err_level </select> <delete id="deleteErrLevel"> delete from err_level WHERE errValue = #{errValue} </delete>
2.Mapper接口
int addErrLevel(ErrLevel errLevel); void updateErrLevel(ErrLevel errLevel); List<ErrLevel> selectByErrLevel(); void deleteErrLevel(ErrLevel errLevel);
3.Service 接口
int myAddErrLevel(ErrLevel errLevel); void updateErrLevel(ErrLevel errLevel); List<ErrLevel> selectByErrLevel(); void deleteErrLevel(ErrLevel errLevel);
4.ServiceImpl 類
@Resource ErrLevelMapper errLevelMapper ; @Override public int myAddErrLevel(ErrLevel errLevel) { return errLevelMapper.addErrLevel(errLevel); } public void updateErrLevel(ErrLevel errLevel){ errLevelMapper.updateErrLevel(errLevel); } @Override public List<ErrLevel> selectByErrLevel() { return errLevelMapper.selectByErrLevel(); } @Override public void deleteErrLevel(ErrLevel errLevel) { errLevelMapper.deleteErrLevel(errLevel); }
5.Controller實(shí)現(xiàn)類
@Resource IErrLevelService errLevelService ; @PostMapping("/add") public Result<Integer> addErrlvl(@RequestBody ErrLevel errLevel){ int num = errLevelService.myAddErrLevel(errLevel); return Result.success(num,"新增成功"); } @PutMapping("/update") public Result<?> updateUser(@RequestBody ErrLevel errLevel){ errLevelService.updateErrLevel(errLevel); return Result.success("更新成功"); } @GetMapping("/getByMainPage") public Result<List<ErrLevel>>selectByMainPage(){ List<ErrLevel> list = errLevelService.selectByErrLevel(); return Result.success(list,"查詢成功!"); } @DeleteMapping("/delete") public Result<?> deleteErr(@RequestBody ErrLevel errLevel){ errLevelService.deleteErrLevel(errLevel); return Result.success("刪除成功"); }
MyBatisPlus實(shí)現(xiàn)增刪查改
1.引入依賴
//引入依賴 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency>
2.創(chuàng)建用戶實(shí)體
//實(shí)體 @Data public class User { private Long id; private String username; private String password; }
3.創(chuàng)建Mapper接口
//Mapper接口 @Mapper public interface UserMapper extends BaseMapper<User> { }
4.創(chuàng)建service接口
//Service接口 public interface UserService extends IService<User> { }
5.創(chuàng)建一個(gè) ServiceImpl 類,實(shí)現(xiàn)service接口
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
6.創(chuàng)建一個(gè) Controller 類處理對(duì)應(yīng)請(qǐng)求
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/insert") public String createUser(@RequestBody User user) { userService.save(user); return "User created"; } @GetMapping("/get{id}") public User getUser(@PathVariable Long id) { return userService.getById(id); } @GetMapping("/list") public List<User> getUsers() { return userService.list(); } @PutMapping("/update{id}") public String updateUser(@PathVariable Long id, @RequestBody User user) { user.setId(id); userService.updateById(user); return "User updated"; } @DeleteMapping("/delete{id}") public String deleteUser(@PathVariable Long id) { userService.removeById(id); return "User deleted"; } }
以上就是MyBatis和MyBatis-Plus的代碼演示,雖然MyBatis-Plus沒有對(duì)復(fù)雜SQL查詢操作進(jìn)行封裝,但是它提供了一些輔助功能,可以幫助開發(fā)者更加方便地進(jìn)行復(fù)雜SQL查詢操作。
到此這篇關(guān)于在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Springboot Mybatis與Mybatis-plus區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法詳解
這篇文章主要介紹了MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,,需要的朋友可以參考下2023-09-09vue+springboot讀取git的markdown文件并展示功能
Markdown-it 是一個(gè)用于解析和渲染 Markdown 標(biāo)記語(yǔ)言的 JavaScript 庫(kù),使用 Markdown-it,你可以將 Markdown 文本解析為 HTML 輸出,并且可以根據(jù)需要添加功能、擴(kuò)展語(yǔ)法或修改解析行為,本文介紹vue+springboot讀取git的markdown文件并展示,感興趣的朋友一起看看吧2024-01-01Java實(shí)現(xiàn)二叉搜索樹的插入、刪除功能
這篇文章主要介紹了Java實(shí)現(xiàn)二叉搜索樹的插入、刪除,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01MyBatis Plus 將查詢結(jié)果封裝到指定實(shí)體的方法步驟
這篇文章主要介紹了MyBatis Plus 將查詢結(jié)果封裝到指定實(shí)體的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09一篇文章帶你理解Java Spring三級(jí)緩存和循環(huán)依賴
這篇文章主要介紹了淺談Spring 解決循環(huán)依賴必須要三級(jí)緩存嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01