SpringBoot--MyBatis-Plus

2022-06-05 10:42:31 浏览数 (1)

使用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

0 人点赞