MyBatisPlus(基于starter和Bean方式)
文章目錄
- 基于boot-starter方式
- 基于Bean方式
基于boot-starter方式
1、【microboot項目】修改配置文件,引入所需要的相關依賴庫:
dependences.gradle
build.gradle
project('microboot-database') { // 子模塊dependencies { // 配置子模塊依賴compile(project(':microboot-common')) // 引入其他子模塊compile(libraries.'mysql-connector-java')compile(libraries.'druid') // 添加原始依賴compile(libraries.'mybatis-plus-boot-starter')} }2、【microboot-database子模塊】application.yml
spring:datasource:type: com.alibaba.druid.pool.DruidDataSource # 配置數據源的類型driver-class-name: com.mysql.cj.jdbc.Driver # MySQL8之后的驅動url: jdbc:mysql://localhost:3306/yootk # 數據庫的JDBC連接地址username: root # 用戶名password: mysqladmin # 密碼druid: # 定義數據庫連接池所需要的相關配置項initial-size: 5 # 初始化連接池大小min-idle: 10 # 最小維持的連接池大小max-active: 50 # 最大可提供的連接數量max-wait: 60000 # 最長等待時間time-between-eviction-runs-millis: 6000 # 關閉空閑連接間隔(毫秒)min-evictable-idle-time-millis: 30000 # 連接最小的生存時間validation-query: SELECT 1 FROM dual # 數據庫的狀態檢測test-while-idle: true # 判斷連接是否可用test-on-borrow: false # 在獲得連接之前是否要進行測試test-on-return: false # 歸還連接前是否需要進行測試pool-prepared-statements: false # 不緩存PSTMTmax-pool-prepared-statement-per-connection-size: 20 # 配置PSTMT緩存個數mybatis-plus:config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑type-aliases-package: com.yootk.vo # 定義所有操作類的別名所在包mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件global-config: # 全局配置db-config: //logic-not-delete-value: 0 # 數據刪除前logic-delete-value: 1 # 數據刪除后此時在member表中存在有一個isdel字段,那么這個字段的內容就是邏輯刪除項,如果是O(false)表示未刪除,如果是1 (true)表示刪除操作。
3、【microboot-database子模塊】修改 Member程序類,追加邏輯刪除的配置項:
package com.yootk.vo;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;import java.util.Date;@Data @TableName("member") // 定義該VO類對應的數據表名稱 public class Member {@TableId // 配置主鍵列private String mid;private String name;private Integer age;private Double salary;private Date birthday;private String content;@TableLogic // 邏輯刪除處理private Integer isdel; // 邏輯刪除字段 }4、【microboot-database子模塊】創建IMemberDAO接口實現member數據表的配置
package com.yootk.dao;import com.yootk.vo.Member; import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper public interface IMemberDAO { // 定義DAO接口public List<Member> findAll(); // 查詢全部 }5、 【microboot-database子模塊】分頁配置
package com.yootk.config;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 MybatisPlusConfig { // Mybatis攔截器配置@Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分頁實現);return interceptor;} }6、 【microboot-database子模塊】修改IMemberDAO數據接口,要存在有繼承的父接口
package com.yootk.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yootk.vo.Member; import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper public interface IMemberDAO extends BaseMapper<Member> { // 定義DAO接口public List<Member> findAll(); // 查詢全部,這個方法一定要存在有映射實現 }7、【microboot-database子模塊】修改IMemberService 業務接口,在該接口之中實現核心的CRUD數據處理操作
package com.yootk.service;import com.baomidou.mybatisplus.core.metadata.IPage; import com.yootk.vo.Member;import java.util.List; import java.util.Set;public interface IMemberService {public List<Member> list();public Member get(String mid); // 根據ID查詢public boolean add(Member vo); // 增加數據public boolean delete(Set<String> ids); // 數據刪除public Map<String, Object> listSplit(String column, String keyword,Integer currentPage, Integer lineSize); // 分頁查詢 }8、【microboot-database子模塊】MemberServiceImpl
package com.yootk.service.impl.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yootk.dao.IMemberDAO; import com.yootk.service.IMemberService; import com.yootk.vo.Member; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List; import java.util.Set;@Service public class MemberServiceImpl implements IMemberService {@Autowiredprivate IMemberDAO memberDAO;@Overridepublic List<Member> list() {return this.memberDAO.findAll();}@Overridepublic Member get(String mid) {return this.memberDAO.selectById(mid);}@Overridepublic boolean add(Member vo) {return this.memberDAO.insert(vo) > 0;}@Overridepublic boolean delete(Set<String> ids) {return this.memberDAO.deleteBatchIds(ids) == ids.size();}@Overridepublic Map<String, Object> listSplit(String column, String keyword, Integer currentPage, Integer lineSize) {QueryWrapper<Member> wrapper = new QueryWrapper<>();wrapper.like(column, keyword); // 設置模糊查詢操作int count = this.memberDAO.selectCount(wrapper); // 統計個數// 實現數據的查詢處理IPage<Dept> page = this.memberDAO.selectPage(new Page<>(currentPage, lineSize, count), wrapper);Map<String, Object> map = new HashMap<>(); // 包裝返回結果map.put("allMembers", page.getRecords()); //數據記錄map.put("allRecorders", page.getTotal()); //總數map.put("allPages", page.getPages()); //頁數return map;} }9、【microboot-database子模塊】編寫一個測試類,對當前的業務接口的功能進行測試
package com.yootk.test;import com.baomidou.mybatisplus.core.metadata.IPage; import com.yootk.StartSpringBootDatabaseApplication; import com.yootk.service.IMemberService; import com.yootk.vo.Member; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration;import java.util.Date; import java.util.Set;@ExtendWith(SpringExtension.class) // 使用JUnit5測試工具 @WebAppConfiguration // 啟動WEB運行環境 @SpringBootTest(classes = StartSpringBootDatabaseApplication.class) // 配置程序啟動類 public class TestMemberService { // 編寫測試類@Autowiredprivate IMemberService memberService;@Testpublic void testFindAll() {System.out.println(this.memberService.list());}@Testpublic void testGet() {System.out.println(this.memberService.get("yootk"));}@Testpublic void testAdd() {Member vo = new Member();vo.setMid("yootk - " + Math.random());vo.setName("沐言科技");vo.setBirthday(new Date());vo.setSalary(865.0);vo.setContent("www.yootk.com");vo.setAge(16);System.out.println(this.memberService.add(vo));}@Testpublic void testSplit() {Map<String, Object> map = this.memberService.listSplit("name", "沐言", 1, 5);System.out.println("總頁數:" + map.get(allPages));System.out.println("總記錄數:" + map.get(allRecorders));System.out.println("響應內容:" + map.get(allMembers));}@Testpublic void testDelete() {Set<String> ids = Set.of("muyan", "yootk", "lixinghua");this.memberService.delete(ids);} }10、【microboot-database子模塊】
package com.yootk.action;import com.yootk.common.action.abs.AbstractBaseAction; import com.yootk.service.IMemberService; import com.yootk.vo.Member; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.Arrays; import java.util.HashSet; import java.util.Set;@RestController @RequestMapping("/member/*") @Slf4j public class MemberAction extends AbstractBaseAction {@Autowiredprivate IMemberService memberService;@RequestMapping("list")public Object list() {log.info("查詢全部Member數據。");return this.memberService.list();}@RequestMapping("get")public Object get(String mid) {log.info("查詢用戶數據:{}", mid);return this.memberService.get(mid);}@RequestMapping("add")public Object add(Member member) {log.info("增加新的用戶數據:{}", member);return this.memberService.add(member);}@RequestMapping("delete")public Object delete(String ... id) {log.info("根據ID刪除數據:{}", id);Set<String> ids = new HashSet<>();ids.addAll(Arrays.asList(id));return this.memberService.delete(ids);}@RequestMapping("split")public Map<String, Object> split(String column, String keyword, int currentPage, int lineSize) {log.info("數據分頁顯示,查詢模糊列:{}、查詢關鍵字:{}、當前頁:{}、每頁行數:{}");return this.memberService.listSplit(column, keyword, currentPage, lineSize);} }基于Bean方式
現在為止實現的Mybatis 整個的流程都是基于starter組件“mybatis-plus-boot-starter”實現的,所以所有的配置項只需要在 application.yml里面進行定義即可,但是除了這種操作之外,也可以直接基于Bean的模式手工配置。
1、【microboot項目】修改配置文件,引入所需要的相關依賴庫:
dependences.gradle
2、【microboot項目】如果要想進行Bean的配置,則一些相關的配置內容也應該定義在資源文件里面,那么本次就直接繼續使用之前自動配置時所提供的配置項:
mybatis-plus:config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑type-aliases-package: com.yootk.vo # 定義所有操作類的別名所在包mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件global-config: # 全局配置db-config:logic-not-delete-value: 0 # 數據刪除前logic-delete-value: 1 # 數據刪除后3、【microboot-database子模塊】創建MyBatisPlusConfig 配置類,引入SqlSessionFactoryBean 實例,并且進行MyBatisPlus相關環境定義
package com.yootk.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver;import javax.sql.DataSource;@Configuration public class MybatisPlusConfig { // Mybatis攔截器配置private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();@Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分頁實現);return interceptor;}@Bean("mybatisSqlSessionFactoryBean")public MybatisSqlSessionFactoryBean getMybatisSqlSessionFactoryBean(@Autowired DataSource dataSource, // 要使用的數據源@Value("${mybatis-plus.config-location}") Resource configLocation, // 資源文件路徑@Value("${mybatis-plus.type-aliases-package}") String typeAliasesPackage, // 掃描別名@Value("${mybatis-plus.mapper-locations}") String mapperLocations, // Mapping映射路徑@Value("${mybatis-plus.global-config.db-config.logic-not-delete-value}") String logicNotDeleteValue,@Value("${mybatis-plus.global-config.db-config.logic-delete-value:}") String logicDeleteValue) throws Exception {MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();mybatisPlus.setDataSource(dataSource); // 配置項目中要使用的數據源mybatisPlus.setVfs(SpringBootVFS.class); // 配置程序的掃描類mybatisPlus.setTypeAliasesPackage(typeAliasesPackage); // 掃描包的別名Resource[] mappings = this.resourcePatternResolver.getResources(mapperLocations);mybatisPlus.setMapperLocations(mappings);GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig(); // 數據配置dbConfig.setLogicNotDeleteValue(logicNotDeleteValue); // 未刪除時的數據內容dbConfig.setLogicDeleteValue(logicDeleteValue); // 刪除時的數據內容GlobalConfig globalConfig = new GlobalConfig(); // 定義全局配置globalConfig.setDbConfig(dbConfig); // 全局配置項mybatisPlus.setGlobalConfig(globalConfig);return mybatisPlus;} }此時已經成功的使用了自定義的MybatisPlus配置Bean代替了starter配置 (starter內部也只是封裝了這樣的一種配置類而已,本質上都是相同的)。
總結
以上是生活随笔為你收集整理的MyBatisPlus(基于starter和Bean方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么打开电脑独立显卡设置如何打开电脑设置
- 下一篇: AOP案例(日志)