在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解
引言
MyBatis是一個優(yōu)秀的持久層框架,它對JDBC的操作數(shù)據(jù)庫的過程進行封裝。MyBatisPlus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生。
MyBatisPlus 官網(wǎng)是這么說的我們的愿景是成為 MyBatis 最好的搭檔,就像 魂斗羅 中的 1P、2P,基友搭配,效率翻倍。
1.特性
MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架
MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數(shù)以及獲取結(jié)果集
MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄
MyBatis 是一個 半自動的ORM(Object Relation Mapping)框架
MyBatisPlus 是一個基于 MyBatis 的擴展庫,它提供了一套通用的 CRUD 操作接口,自動生成 sql語句,提供了豐富的查詢條件構(gòu)造器等功能。MyBatisPlus 主要使用了注解進行配置和映射。
2.代碼的區(qū)別
MyBatis 的代碼主要分為以下幾個部分:
MyBatis 的配置文件(mybatis-config.xml),用于配置數(shù)據(jù)源、映射文件等。
映射文件(Mapper.xml),用于定義 SQL 語句和結(jié)果映射。
Mapper 接口,用于定義與映射文件對應的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實現(xiàn) Service 接口,調(diào)用 Mapper 接口進行數(shù)據(jù)庫操作。
MyBatisPlus 的代碼主要涉及到以下幾個部分:
MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置數(shù)據(jù)源、分頁插件等。
實體類(Entity),用于定義數(shù)據(jù)庫表對應的實體類。
Mapper 接口,用于定義與數(shù)據(jù)庫表對應的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實現(xiàn) Service 接口,調(diào)用 Mapper 接口進行數(shù)據(jù)庫操作。
3.兩者之間的差異
MyBatis 需要手動編寫 SQL 語句和結(jié)果映射,可以根據(jù)實際需求編寫 SQL 語句,但缺點是編寫映射文件和手動設置參數(shù)比較繁瑣。
MyBatisPlus 提供了一套通用的 CRUD 操作接口,自動生成 SQL 語句,簡化了 MyBatis 的開發(fā),提高了開發(fā)效率,但缺點是定制化能力較差,對于復雜的 SQL 語句無法滿足需求。
4.代碼解析
關(guān)于MyBatis 和MyBatisPlus的代碼分析用經(jīng)典的增刪查改來演示
MyBatis實現(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實現(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實現(xiàn)增刪查改
1.引入依賴
//引入依賴 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency>
2.創(chuàng)建用戶實體
//實體 @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)建一個 ServiceImpl 類,實現(xiàn)service接口
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
6.創(chuàng)建一個 Controller 類處理對應請求
@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沒有對復雜SQL查詢操作進行封裝,但是它提供了一些輔助功能,可以幫助開發(fā)者更加方便地進行復雜SQL查詢操作。
到此這篇關(guān)于在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Springboot Mybatis與Mybatis-plus區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis在Mapper中傳遞多個參數(shù)的四種方法詳解
這篇文章主要介紹了MyBatis在Mapper中傳遞多個參數(shù)的四種方法,文章通過代碼示例介紹的非常詳細,具有一定的參考價值,,需要的朋友可以參考下2023-09-09vue+springboot讀取git的markdown文件并展示功能
Markdown-it 是一個用于解析和渲染 Markdown 標記語言的 JavaScript 庫,使用 Markdown-it,你可以將 Markdown 文本解析為 HTML 輸出,并且可以根據(jù)需要添加功能、擴展語法或修改解析行為,本文介紹vue+springboot讀取git的markdown文件并展示,感興趣的朋友一起看看吧2024-01-01MyBatis Plus 將查詢結(jié)果封裝到指定實體的方法步驟
這篇文章主要介紹了MyBatis Plus 將查詢結(jié)果封裝到指定實體的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09一篇文章帶你理解Java Spring三級緩存和循環(huán)依賴
這篇文章主要介紹了淺談Spring 解決循環(huán)依賴必須要三級緩存嗎,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-09-09