您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用Spring Boot中的MyBatis-Plus”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
為什么說Mybatis-Plus是Mybatis的增強?
mybatis作為一款輕量級的持久層框架實現了比較簡單的操作數據庫的能力,但是它是一個半ORM(對象關系映射)的持久層框架,因為它需要我們在XML文件中寫SQL語句,不能完全專注于業務邏輯,即是它后來做了一些改進,有了逆向工程,有了example類,但依舊改變不了他是一個半ORM框架的事實。MyBatis-Plus作為mybatis的增強版,極大改善了mybatis的尷尬處境(其實并不尷尬,我還是非常喜歡用mybatis的)。
接下來進入正題了,Mybatis-plus框架他在Mybatis原有的基礎之上增加了一系列的簡單易用的javaAPI,非常的好用和牛逼,國人開發,必須要使勁的吹一下????。Mybatis-Plus官方有這么一句話:為簡化開發而生。這句話我覺得非常的好,的確,簡化了我們的開發,官方還有這么三句話:
潤物無聲
只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑。
效率至上
只需簡單配置,即可快速進行 CRUD 操作,從而節省大量時間。
豐富功能
熱加載、代碼生成、分頁、性能分析等功能一應俱全。
上面的這三句話其實就是Mybatis-plus的特點,他的確沒有改變mybatis的功能,只在它的基礎之上進行了一些增強,不需要example類,提供了Wrapper類,還提供了很多簡單的api操作數據庫。話不多說直接擼代碼。對于他的底層實現,我不說大家都知道,動態代理咯,具體實現大家可以自行查閱相關資料,在這個系列中只帶領大家學習和基本使用,各位大佬們如果覺得博主寫的還算不錯,給個關注唄,奧利給!
2.1 引入依賴
pom.xml
:
<!--springboot父工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!--mybatis-plus組件--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> <!--spring-web組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mysql數據庫連接驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <!--lombok組件--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency> </dependencies>
2.2 配置文件
application.yml
:
butterflytri: databaseurl-port: 127.0.0.1:3306 # 數據庫端口 database-name: student_db # 數據庫名 server: port: 8080 # 應用端口 servlet: context-path: /butterflytri # 應用映射 spring: application: name: mybatis-plus # 應用名稱 datasource: url: jdbc:mysql://${butterflytri.databaseurl-port}/${butterflytri.database-name}?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC driver-class-name: com.mysql.jdbc.Driver username: root password: root mybatis-plus: # mybatis-plus配置 mapper-locations: classpath:com/butterflytri/mapper/*Mapper.xml # mapper映射包掃描 type-aliases-package: com.butterflytri.entity # entity別名
mybatis-plus只需要這么一個配置文件就可以了,不需要其他的,官方也說了,只增強mybatis不修改它,所以我只會演示plus部分,即增強優化的部分。
2.3 正式代碼部分
首先我們看下啟動類:
MybatisPlusApplication.java
:
package com.butterflytri; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author: WJF * @date: 2020/6/23 * @description: MybatisPlusApplication */ @SpringBootApplication /** * xmlMapper包掃描,與yml中效果相同。 */ @MapperScan("com/butterflytri/mapper") public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class); } }
啟動類中就寫了一個Mapper的包掃描,說過的Mybatis-Plus只增強Mybatis,不改變它,所以寫Xml也是完全歐克的。
然后我們看實體類和數據庫字段的映射關系,先上代碼:
package com.butterflytri.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.io.Serializable; /** * @author: WJF * @date: 2020/5/16 * @description: Student */ @ToString @Getter @Setter /** * '@TableName':此注解將表名和實體類映射起來,不寫則默認以實體類名為表名進行數據庫操作。 * '@TableId':此注解將聲明的實體屬性作為數據庫表的主鍵字段,還有很多主鍵實現策咯,查看注解屬性{@link TableId#type()}。 * '@TableField':此注解將表字段(非主鍵)和實體類屬性映射起來,不寫則默認以實體類屬性名為表字段名進行數據庫操作。 */ @TableName("t_student") public class Student implements Serializable { @TableId("ID") private Long id; @TableField("STUDENT_NAME") private String studentName; @TableField("STUDENT_NO") private String studentNo; @TableField("SEX") private String sex; @TableField("AGE") private Integer age; @TableField("CLASS") private String clazz; }
實體類和表名的映射就是如此的簡單,如果實體類類名和表名一樣,字段名和屬性名一樣就不用寫這些注解。
接下來我們看下Mapper層代碼,這里繼承了BaseMapper接口,就已經獲取了基本的增刪改查方法。
package com.butterflytri.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.butterflytri.entity.Student; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * @author: WJF * @date: 2020/5/16 * @description: StudentMapper */ /** * 此處'StudentMapper'繼承了'BaseMapper<T>'接口,就擁有了mybatis-plus提供的公共基礎的CRUD方法。 */ @Mapper public interface StudentMapper extends BaseMapper<Student> { /** * 查詢所有學生信息 * @return List<Student> */ List<Student> findAll(); /** * 通過id查詢學生信息 * @param id:學生id * @return Student */ Student findOne(Long id); /** * 通過學號查詢學生信息 * @param studentNo:學生學號 * @return Student */ Student findByStudentNo(String studentNo); }
接下來我們看看service層代碼:
StudentService
:
package com.butterflytri.service; import com.butterflytri.entity.Student; import java.util.List; /** * @author: WJF * @date: 2020/6/23 * @description: StudentService */ public interface StudentService { /** * 通過id查詢某個學生的信息(BaseMapper<T>中的方法) * @param id: 學生id * @return Student */ public Student selectById(Long id); /** * 通過id查詢某個學生的信息(通過xmlMapper實現) * @param id: 學生id * @return Student */ public Student findById(Long id); /** * 保存一個學生對象(BaseMapper<T>中的方法) * @param student */ public void insert(Student student); /** * 查詢性別為sex,年齡大于age的學生(普通的Wrapper) * @param sex: 性別 * @param age: 年齡 * @return 學生list */ public List<Student> findByWrapper(String sex, Integer age); /** * 查詢性別為sex,年齡大于age的學生(Lambda形式的Wrapper) * @param sex: 性別 * @param age: 年齡 * @return 學生list */ public List<Student> findByWrapperLambda(String sex, Integer age); /** * 更新學生信息(Wrapper形式) * @param student: 需要更新的學生實體 */ public void updateByWrapper(Student student); /** * 更新學生信息(BaseMapper<T>中的方法) * @param student: 需要更新的學生實體 */ public void updateById(Student student); /** * 更新學生信息(Lambda形式的Wrapper) * @param student: 需要更新的學生實體 */ public void updateByWrapperLambda(Student student); }
StudentServiceImpl
:
package com.butterflytri.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.butterflytri.entity.Student; import com.butterflytri.mapper.StudentMapper; import com.butterflytri.service.StudentService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * @author: WJF * @date: 2020/6/23 * @description: StudentServiceImpl */ @Service public class StudentServiceImpl implements StudentService { @Resource private StudentMapper studentMapper; @Override public Student selectById(Long id) { return studentMapper.selectById(id); } @Override public Student findById(Long id) { return studentMapper.findOne(id); } @Override public void insert(Student student) { studentMapper.insert(student); } @Override public List<Student> findByWrapper(String sex, Integer age) { QueryWrapper<Student> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("SEX", sex); queryWrapper.gt("AGE", age); return studentMapper.selectList(queryWrapper); } @Override public List<Student> findByWrapperLambda(String sex, Integer age) { LambdaQueryWrapper<Student> queryWrapper = Wrappers.<Student>lambdaQuery().eq(Student::getSex, sex).gt(Student::getAge, age); return studentMapper.selectList(queryWrapper); } @Override public void updateByWrapper(Student student) { UpdateWrapper<Student> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("ID", student.getId()); studentMapper.update(student, updateWrapper); } @Override public void updateById(Student student) { studentMapper.updateById(student); } @Override public void updateByWrapperLambda(Student student) { LambdaUpdateWrapper<Student> updateWrapper = Wrappers.<Student>lambdaUpdate().set(Student::getId, student.getId()); studentMapper.update(student, updateWrapper); } }
service層的方法都很簡單,有通過剛剛繼承的BaseMapper中的方法,但是我們還看到了一個類叫Wrapper,這個類是條件構造器,可以通過這個類實現比較復雜的查詢,有直接通過字段名稱去查詢的,也有通過屬性和字段名映射的lambda方式去查詢數據庫,總之就是很簡單,也很好理解這些API,但是請記住,Wrapper很重,不是一個輕量級的東西,不要將這個對象在服務間進行傳遞,效率很低。請將條件放在DTO中傳遞到service層代碼中,在service代碼中創建Wrapper類進行查詢。
“怎么使用Spring Boot中的MyBatis-Plus”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。