1、创建entity实体类 Lombok,简化POJO实体类开发,导入依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>mybatisplus</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatisplus</name> <description>mybatisplus</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter-test</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </pluginRepository> </pluginRepositories> </project>
package com.example.demo20231.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("course")
public class Course {
@TableId(type = IdType.AUTO)
private int id;
private String name;
}
为当前实体类在编译期设置对应的get/set方法,toString方法,hashCode方法,equals方法
2、数据层开发
mybatisPlus
Druid
配置数据源与mybatisPlus对应的基础配置(id生成策略使用数据库自增策略)
server:
port: 8888
spring:
application:
name: mp
datasource: # 配置数据源信息
url: jdbc:mysql://localhost:3306/liangting?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置MyBatis日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
继承BaseMapper并指定泛型
package com.example.demo20231.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo20231.entity.Course;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CourseMapper extends BaseMapper<Course> {
}
分页功能
分页操作需要设定分页对象IPage
@Test
public void listCategory1() {
IPage ipage=new Page(1,3);
courseMapper.selectPage(ipage,null);
System.out.println(ipage.getSize());
System.out.println(ipage.getTotal());
}
分页操作是在MyBatisPlus 的常规基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.demo20231.mapper")
public class Config {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
条件查询功能
使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
@Test
public void listCategory2() {
QueryWrapper<Course> qw=new QueryWrapper<>();
qw.like("name","spring");
courseMapper.selectList(qw);
}
@Test
public void listCategory3() {
IPage page=new Page(1,2);
LambdaQueryWrapper<Course> lqw=new LambdaQueryWrapper<Course>();
lqw.like(Course::getId,1);
courseMapper.selectPage(page,lqw);
}
支持动态拼写查询条件
@Test
public void listCategory4() {//条件查询功能
String name="Spring";
IPage page=new Page(1,2);
LambdaQueryWrapper<Course> lqw=new LambdaQueryWrapper<Course>();
lqw.like(Strings.isNotEmpty(name),Course::getName,"spring");
courseMapper.selectPage(page,lqw);
}
业务层开发
Service层接口定义与数据层定义具有较大区别,不要混用,
Service接口名称定义成业务名称,并与Dao接口名称进行区分
接口定义
package com.example.demo20231.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.demo20231.entity.Course;
import org.springframework.stereotype.Service;
import java.util.List;
public interface CourseService {
boolean save(Course course);
boolean delete(Integer id);
boolean update(Course course);
Course getById(Integer id);
List<Course> getAll();
IPage<Course> getByPage(int currentPage,int pageSize);
}
实现类定义
package com.example.demo20231.serviceimp;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo20231.entity.Course;
import com.example.demo20231.mapper.CourseMapper;
import com.example.demo20231.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CourseServiceImpl implements CourseService {
@Autowired
private CourseMapper courseMapper;
@Override
public boolean save(Course course) {
return courseMapper.insert(course)>0;
}
@Override
public boolean delete(Integer id) {
return courseMapper.deleteById(id)>0;
}
@Override
public boolean update(Course course) {
return courseMapper.updateById(course)>0;
}
@Override
public Course getById(Integer id) {
return courseMapper.selectById(id);
}
@Override
public List<Course> getAll() {
return courseMapper.selectList(null);
}
@Override
public IPage<Course> getByPage(int currentPage, int pageSize) {
IPage<Course> page=new Page<Course>(currentPage,pageSize);
courseMapper.selectPage(page,null);
return page;
}
}
测试类定义
package com.example.demo20231;
import com.example.demo20231.entity.Course;
import com.example.demo20231.service.CourseService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class CourseServiceTest {
@Autowired
private CourseService courseService;
@Test
void testGetById(){
courseService.getById(1);
}
@Test
void testGetAll(){
courseService.getAll();
}
@Test
void testGetByPage(){
courseService.getByPage(1,5);
}
@Test
void testSave(){
Course course=new Course();
course.setName("sss");
courseService.save(course);
}
@Test
void testUpdate(){
Course course=new Course();
course.setId(12);
course.setName("1111");
courseService.update(course);
}
@Test
void testDelete(){
courseService.delete(13);
}
}