基于boot-starter方式
1、【microboot项目】修改配置文件,引入所需要的相关依赖库:
dependences.gradle
ext.versions = [
springboot : '2.4.3',
junit : '5.7.1',
junitPlatformLauncher : '1.7.1',
lombok : '1.18.18',
mysql : '8.0.25',
druid : '1.2.6',
mybatisplus : '3.4.3',
]
ext.libraries = [
'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",
'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",
'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",
'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",
'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",
'junit-bom': "org.junit:junit-bom:${versions.junit}",
'lombok': "org.projectlombok:lombok:${versions.lombok}",
'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",
'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",
'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",
'druid': "com.alibaba:druid:${versions.druid}",
'mybatis-plus-boot-starter': "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",
]
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 # 不缓存PSTMT
max-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")
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 {
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 {
@Bean
public MybatisPlusInterceptor getMybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(
new PaginationInnerInterceptor(DbType.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> {
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);
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 {
@Autowired
private IMemberDAO memberDAO;
@Override
public List<Member> list() {
return this.memberDAO.findAll();
}
@Override
public Member get(String mid) {
return this.memberDAO.selectById(mid);
}
@Override
public boolean add(Member vo) {
return this.memberDAO.insert(vo) > 0;
}
@Override
public boolean delete(Set<String> ids) {
return this.memberDAO.deleteBatchIds(ids) == ids.size();
}
@Override
public 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)
@WebAppConfiguration
@SpringBootTest(classes = StartSpringBootDatabaseApplication.class)
public class TestMemberService {
@Autowired
private IMemberService memberService;
@Test
public void testFindAll() {
System.out.println(this.memberService.list());
}
@Test
public void testGet() {
System.out.println(this.memberService.get("yootk"));
}
@Test
public 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));
}
@Test
public 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));
}
@Test
public 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 {
@Autowired
private 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
ext.versions = [
springboot : '2.4.3',
junit : '5.7.1',
junitPlatformLauncher : '1.7.1',
lombok : '1.18.18',
mysql : '8.0.25',
druid : '1.2.6',
mybatisplus : '3.4.3',
]
ext.libraries = [
'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",
'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",
'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",
'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",
'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",
'junit-bom': "org.junit:junit-bom:${versions.junit}",
'lombok': "org.projectlombok:lombok:${versions.lombok}",
'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",
'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",
'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",
'druid': "com.alibaba:druid:${versions.druid}",
'mybatis-plus': "com.baomidou:mybatis-plus:${versions.mybatisPlus}",
]
project('microboot-database') {
dependencies {
compile(project(':microboot-common'))
compile(libraries.'druid')
compile(libraries.'mysql-connector-java')
compile(libraries.'mybatis-plus')
}
}
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 {
private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
@Bean
public MybatisPlusInterceptor getMybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(
new PaginationInnerInterceptor(DbType.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,
@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内部也只是封装了这样的一种配置类而已,本质上都是相同的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)