Mybatis-plus的介紹及優(yōu)缺點,這里不再詳細說明,需要的朋友到官網(wǎng)支詳細了解
下面就用一個springboot項目mybatis-plus 的基礎(chǔ)操作
第一步:數(shù)據(jù)庫準備
CREATE TABLE `data0917`.`student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '男', `blood` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '血型', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
第二步:核心依賴
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
這些是核心依賴,用到了mysql驅(qū)動、lombok。集成mybatis-plus要把mybatis、mybatis-spring去掉,避免沖突;lombok是一個工具,添加了這個依賴,就可以使用它的簡化功能,最常用的用法就是在實體類中使用它的@Data注解,這樣實體類就不用寫set、get、toString等方法了。
第三步:application.yml配置
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #開啟sql日志 map-underscore-to-camel-case: true # 該配置就是將帶有下劃線的表字段映射為駝峰格式的實體類屬性 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/data0917?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8 username: root password: root
第四步:實體類Student.java
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class Student { @TableId(value = "id", type = IdType.AUTO)//指定自增策略 private Integer id; private String name; private String sex; private String blood; }
第五步:StudentMapper.java
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.springbootmybatisplus.entity.Student; import org.apache.ibatis.annotations.Mapper; @Mapper //表明這是一個Mapper,也可以在啟動類上加上包掃描 //Mapper 繼承該接口后,無需編寫 mapper.xml 文件,即可獲得CRUD功能 public interface StudentMapper extends BaseMapper<Student> { }
這樣就完成了mybatis-plus與springboot的整合。把mybatis和mybatis-spring依賴換成mybatis-plus的依賴,最后mapper繼承BaseMapper即可。
第六步:Mybatis分頁插件配置
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusPager { /** * 分頁插件 * * @return 分頁插件的實例 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //指定數(shù)據(jù)庫類型是 MySQL interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
第七步:StudentService.java
import com.example.springbootmybatisplus.entity.Student; import com.example.springbootmybatisplus.mapper.StudentMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class StudentService { @Autowired private StudentMapper studentMapper; //查詢?nèi)? public List<Student> selectAll() { return studentMapper.selectList(null); } //添加一條數(shù)據(jù) public int add(Student student) { return studentMapper.insert(student); } public Student queryById(Student student) { return studentMapper.selectById(student.getId()); } //多條件判斷判斷查詢 及 分頁 //當姓名,性別,血型不為空時, 進行條件查詢 public Page<Student> queryWhere(Student student,Page studentPage){ QueryWrapper<Student> wrapper = new QueryWrapper<>(); wrapper.like("".equals(student.getName()) == false && student.getName() != null, "name",student.getName()) .eq("".equals(student.getSex()) == false && student.getSex() != null, "sex",student.getSex()) .eq("".equals(student.getBlood()) == false && student.getBlood() != null, "blood",student.getBlood()); return studentMapper.selectPage(studentPage,wrapper); } }
第八步:測試類
import com.example.springbootmybatisplus.entity.Student; import com.example.springbootmybatisplus.service.StudentService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class StudentCURDTest { @Autowired private StudentService studentService; @Test public void queryAll() { studentService.selectAll().forEach(System.out::println); } @Test public void addOne(){ Student student = new Student(); student.setName("小小雨"); student.setSex("男"); student.setBlood("A"); System.out.println(studentService.add(student)); } @Test void queryOne(){ Student student = new Student(); student.setId(1); System.out.println(studentService.queryById(student)); } @Test void queryWhere(){ Page<Student> studentPage = new Page<Student>(1L, 2L); Student student = new Student(); student.setName("小"); //student.setBlood("A"); Page<Student> studentPage1 =studentService.queryWhere(student,studentPage); System.out.println("pages"+ studentPage1.getPages()); System.out.println("total:"+studentPage1.getTotal()); System.out.println("size:"+studentPage1.getSize()); studentPage1.getRecords().forEach(System.out::println); } }
Mybatis-plus之IService的使用(以上面的內(nèi)容為基礎(chǔ)), 簡單列具兩個實例
第一步:創(chuàng)建StuService.java接口, 繼承IService
import com.baomidou.mybatisplus.extension.service.IService; import com.example.springbootmybatisplus.entity.Student; public interface StuService extends IService<Student> { }
第二步: 定義實現(xiàn)類StuServiceImpl.java
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.springbootmybatisplus.entity.Student; import com.example.springbootmybatisplus.mapper.StudentMapper; import org.springframework.stereotype.Service; @Service public class StuServiceImpl extends ServiceImpl<StudentMapper, Student> implements StuService{ }
第三步:測試調(diào)用
@Test void iServiceSaveTest(){ Student student = new Student(); student.setName("小小雨"); student.setSex("男"); student.setBlood("A"); System.out.println(stuService.save(student)); } //IPage分頁及多條件查詢 @Test void iServiceIPageTest(){ IPage<Student> studentPage = new Page<>(1l,2l); Student student = new Student(); student.setName("小小雨"); student.setSex("男"); student.setBlood("A"); QueryWrapper<Student> wrapper = new QueryWrapper<>(); wrapper.like("".equals(student.getName()) == false && student.getName() != null, "name",student.getName()) .eq("".equals(student.getSex()) == false && student.getSex() != null, "sex",student.getSex()) .eq("".equals(student.getBlood()) == false && student.getBlood() != null, "blood",student.getBlood()); IPage<Student> studentPage1 =stuService.page(studentPage,wrapper); System.out.println("pages"+ studentPage1.getPages()); System.out.println("total:"+studentPage1.getTotal()); System.out.println("size:"+studentPage1.getSize()); studentPage1.getRecords().forEach(System.out::println); }