在Springboot中Mybatis與Mybatis-plus的區(qū)別詳解
引言
MyBatis是一個(gè)優(yōu)秀的持久層框架,它對JDBC的操作數(shù)據(jù)庫的過程進(jìn)行封裝。MyBatisPlus (簡稱 MP)是一個(gè) MyBatis的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。
MyBatisPlus 官網(wǎng)是這么說的我們的愿景是成為 MyBatis 最好的搭檔,就像 魂斗羅 中的 1P、2P,基友搭配,效率翻倍。
1.特性
MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架
MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集
MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄
MyBatis 是一個(gè) 半自動的ORM(Object Relation Mapping)框架
MyBatisPlus 是一個(gè)基于 MyBatis 的擴(kuò)展庫,它提供了一套通用的 CRUD 操作接口,自動生成 sql語句,提供了豐富的查詢條件構(gòu)造器等功能。MyBatisPlus 主要使用了注解進(jìn)行配置和映射。
2.代碼的區(qū)別
MyBatis 的代碼主要分為以下幾個(gè)部分:
MyBatis 的配置文件(mybatis-config.xml),用于配置數(shù)據(jù)源、映射文件等。
映射文件(Mapper.xml),用于定義 SQL 語句和結(jié)果映射。
Mapper 接口,用于定義與映射文件對應(yīng)的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實(shí)現(xiàn) Service 接口,調(diào)用 Mapper 接口進(jìn)行數(shù)據(jù)庫操作。
MyBatisPlus 的代碼主要涉及到以下幾個(gè)部分:
MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置數(shù)據(jù)源、分頁插件等。
實(shí)體類(Entity),用于定義數(shù)據(jù)庫表對應(yīng)的實(shí)體類。
Mapper 接口,用于定義與數(shù)據(jù)庫表對應(yīng)的方法。
Service 接口,用于封裝 Mapper 接口,提供統(tǒng)一的 CRUD 方法。
ServiceImpl 類,實(shí)現(xiàn) Service 接口,調(diào)用 Mapper 接口進(jìn)行數(shù)據(jù)庫操作。
3.兩者之間的差異
MyBatis 需要手動編寫 SQL 語句和結(jié)果映射,可以根據(jù)實(shí)際需求編寫 SQL 語句,但缺點(diǎn)是編寫映射文件和手動設(shè)置參數(shù)比較繁瑣。
MyBatisPlus 提供了一套通用的 CRUD 操作接口,自動生成 SQL 語句,簡化了 MyBatis 的開發(fā),提高了開發(fā)效率,但缺點(diǎn)是定制化能力較差,對于復(fù)雜的 SQL 語句無法滿足需求。
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 類處理對應(yī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沒有對復(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot項(xiàng)目如何使用外部application.yml配置文件啟動JAR包
文章介紹了SpringBoot項(xiàng)目通過指定外部application.yml配置文件啟動JAR包的方法,包括設(shè)置spring.config.location參數(shù)、打包注意事項(xiàng)及路徑格式要求,強(qiáng)調(diào)外部配置優(yōu)先級和覆蓋機(jī)制,提供Linux/Windows啟動示例,需要的朋友跟隨小編一起學(xué)習(xí)吧2025-08-08
Java編程實(shí)現(xiàn)比對兩個(gè)文本文件并標(biāo)記相同與不同之處的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)比對兩個(gè)文本文件并標(biāo)記相同與不同之處的方法,涉及java針對文本文件的讀取、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Spring Boot 3.x 開發(fā)中分布式 Session 共享的序
分布式 Session 共享是構(gòu)建高可用應(yīng)用的關(guān)鍵技術(shù),而序列化則是其中的核心環(huán)節(jié),本文提供的方案和示例,希望能幫助開發(fā)者在Spring Boot 3.x 中從容應(yīng)對分布式Session 序列化的挑戰(zhàn),構(gòu)建穩(wěn)健的微服務(wù)架構(gòu),感興趣的朋友跟隨小編一起看看吧2026-03-03
從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理
這篇文章主要介紹了從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理,池化技術(shù)是一種編程技巧,當(dāng)程序出現(xiàn)高并發(fā)時(shí),能夠明顯的優(yōu)化程序,降低系統(tǒng)頻繁創(chuàng)建銷毀連接等額外開銷,下文更多的相關(guān)介紹需要的小伙伴可以參考一下2022-04-04
IDEA2020.2創(chuàng)建springboot項(xiàng)目卡死在reading maven project的問題
這篇文章主要介紹了關(guān)于2020.2IDEA用spring Initializr創(chuàng)建maven的springboot項(xiàng)目卡死在reading maven project的問題描述及解決方法,感興趣的朋友跟隨小編一起看看吧2020-09-09
Java中VM?options與Program?arguments的區(qū)別及說明
本文介紹了VMoptions和Programarguments的區(qū)別及用法,說明它們分別用于設(shè)置運(yùn)行環(huán)境變量和main方法參數(shù),且同名參數(shù)時(shí)Programarguments優(yōu)先,并展示了配置方法和結(jié)果2025-10-10

