使用MyBatis进行数据库操作已经很方便了,MyBatis-Puls对MyBatis做了进一步的简化,用于常见的CURD操作
一、项目配置
1. 导入依赖
安装插件:
代码语言:javascript复制 <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
2. 配置yml
需要修改的也只是将mybatis改为mybatis-plus
代码语言:javascript复制# 使用mybatis-plus配置类别名
mybatis-plus:
type-aliases-package: com.aruba.mybatisplus.bean
spring:
datasource:
# 使用阿里的Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 填写你数据库的url、登录名、密码和数据库名
url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
druid:
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 127.0.0.1,192.168.8.109
# IP黑名单 (存在共同时,deny优先于allow)
deny: 192.168.1.188
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: 123456
二、使用MyBatis-Plus
1. 新建实体类
在实体类上使用@TableName注解指定数据库表 在属性上可以使用@TableField注解指定表字段
代码语言:javascript复制@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("emp")
public class Emp implements Serializable {
@TableField(exist = false)
private String aaa;
/**
* 员工编号
*/
@TableField("empno")
private Integer eno;
/**
* 姓名
*/
private String ename;
/**
* 职位
*/
private String job;
/**
* 上级
*/
private Integer mgr;
/**
* 入职日期
*/
private Date hiredate;
/**
* 薪水
*/
private Double sal;
/**
* 奖金
*/
private Double comm;
/**
* 部门编号
*/
private Integer deptno;
}
2. Mapper层
新建Mapper接口继承BaseMapper,泛型传入实体类类型
代码语言:javascript复制@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}
3. Service层
新建Service接口继承IService,泛型传入实体类类型:
代码语言:javascript复制public interface EmpService extends IService<Emp> {
}
新建Service实现类继承ServiceImpl,泛型传入Mapper和实体类类型,并实现Service接口:
代码语言:javascript复制@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
}
测试方法:
代码语言:javascript复制@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private EmpService empService;
@Test
void contextLoads() {
List<Emp> list = empService.list();
System.out.println(list);
}
}
三、实现CURD
1. where条件
MyBatis实现条件通过QueryWrapper对象,其内置了丰富的api
实现查询员工姓名包含a的:
代码语言:javascript复制 @Test
void find() {
QueryWrapper<Emp> empQueryWrapper = new QueryWrapper<>();
empQueryWrapper.like("ename",'a');
List<Emp> list = empService.list(empQueryWrapper);
System.out.println(list);
}
实现查询员工编号为7499的单个员工:
代码语言:javascript复制 @Test
void findOne() {
QueryWrapper<Emp> empQueryWrapper = new QueryWrapper<>();
empQueryWrapper.eq("empno", 7499);
Emp emp = empService.getOne(empQueryWrapper);
System.out.println(emp);
}
2. 新增
实现新增一个员工:
代码语言:javascript复制 @Test
void add() {
boolean success = empService.save(new Emp(null, null, "xiaoming", "SALESMAN", 7499, new Date(), 1800.0, 0.0, 20));
System.out.println(success);
}
3. 修改
实现更新7499员工的薪水为1900:
代码语言:javascript复制 @Test
void update() {
QueryWrapper<Emp> empQueryWrapper = new QueryWrapper<>();
empQueryWrapper.eq("empno", 7499);
Emp emp = new Emp();
emp.setSal(1900.0);
boolean update = empService.update(emp, empQueryWrapper);
System.out.println(update);
}
4. 删除
实现删除员工名字为xiaoming的员工:
代码语言:javascript复制 @Test
void delete() {
QueryWrapper<Emp> empQueryWrapper = new QueryWrapper<>();
empQueryWrapper.eq("ename", "xiaoming");
boolean remove = empService.remove(empQueryWrapper);
System.out.println(remove);
}
四、分页
MyBatis-Plus自带分页功能,需要手动配置
1. 配置分页插件
代码语言:javascript复制@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor =new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor =new PaginationInnerInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
//paginationInnerInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
//paginationInnerInterceptor.setMaxLimit(500L);
// 设置数据库类型
paginationInnerInterceptor.setDbType(DbType.MYSQL);
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;
}
}
2. 使用分页
实现以每页5个数据,查询第一页员工信息:
代码语言:javascript复制 @Test
void page() {
QueryWrapper<Emp> empQueryWrapper = new QueryWrapper<>();
//查询第一页,每页5条数据
Page<Emp> page = empService.page(new Page<>(1, 5), empQueryWrapper);
List<Emp> records = page.getRecords();
System.out.println(records);
System.out.println("总页数:" page.getPages());
System.out.println("总数据量:" page.getTotal());
System.out.println("当前页:" page.getCurrent());
System.out.println("页大小:" page.getSize());
}
项目地址:
https://gitee.com/aruba/spring-boot-study.git