Spring Boot整合MP

整体结构图

1. 配置依赖

1.1. pom文件

mybatisplus/MP起步依赖:是一个方便的操作数据库功能的代码工具。有一个叫mybatis的技术框架因为经常要自己配置各种文件,进行很多次重复操作,使得常常会不小心出错,这时把经常重复的东西直接封装起来,甚至可以设置属性生成代码能让工作量减少很多,就在原来mybatis基础上整合诞生了一个工具,叫mybatis-plus。

也就是说,mybatisplus就是在mybatis的基础上做了一些增强

druid起步依赖:druid是一个数据库连接池,有很多功能

  1. 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  2. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  5. 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。

所以Druid可以:
1,充当数据库连接池。
2,可以监控数据库访问性能
3,获得SQL执行日志

lombok依赖:

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。

  1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
  2. 让代码变得简洁,不用过多的去关注相应的方法
  3. 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

1.2. application.yml配置文件

数据库信息如下:

注意配置MP的表前缀,如果不配置会默认将数据库名作为前缀,可能出现以下报错:

Caused by: java.sql.SQLSyntaxErrorException: Table 'ssm_db.book' doesn't exist

server:
    port: 80//配置端口号
    
//数据库配置
spring:
    datasource:
     druid://配置数据源为druid
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db
        username: root
        password: dem

mybatis-plus:
    global-config:
        db-config:
            table-prefix: tbl_ //配置访问所有实体类的表的前缀
            id-type: auto //配置id的自增策略
    configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
            //此配置将使MyBatis-Plus将执行的SQL语句打印到控制台

2. 实体类pojo/domain

根据操作数据库表中的数据一一对应,生成一个实体类

与domain、pojo类似,是存放实体的类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个pojo类。主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

@Data
public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
}

@Data注解

是 Lombok 库的一部分,Lombok 库是一个 Java 库,它通过自动生成常用方法(如 getter、setter、equals、hashCode 和 toString 方法)来帮助减少样板代码。

3. 数据层dao/mapper

对数据库进行持久化操作,他的方法是针对数据库操作的,基本用到的就是增删改查。它只是个接口,只有方法名字,具体实现可以在mapper.xml中,也可以直接通过注解的形式编写sql语句。

一个Controller对应一个Service,一个Service对应一个Dao,一个Dao对应一个数据库表,当然根据项目或业务复杂程度,一个Controller可以调用多个Service,而一个Service也可以调用多个Dao,但是Controller层不允许互调,Service层也不允许互调,意思就是AController不能直接调用BController,AService也不能直接去调用BService,遵循高内聚低耦合原则!

@Mapper 是 Mybatis 的注解,和 Spring 没有关系,@Repository 是 Spring 的注解,用于声明一个 Bean。

extends BaseMapper<Book>此行告诉编译器接口正在从 MyBatis-Plus 库扩展接口。该接口提供了一组可用于与数据库交互的常用 CRUD(创建、读取、更新、删除)方法。

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

4. 业务层service

service层叫业务逻辑层,存放业务逻辑处理,不直接对数据库进行操作,有接口和接口实现类,提供controller层调用的方法。servise可以操作数据是因为使用dao对象,用dao的方法来获取数据库数据

业务层,所有的内部的业务逻辑都会放在这里处理,比如用户的增删改查,或者发送个验证码或邮件,或者做一个抽奖活动等等等等,都会在Service中进行,当然,业务离肯定是离不开数据的支持,因此Dao层是必不可少的,

4.1. bookservice接口

在该接口中定义一系列要用的方法,

public interface BookService {
    Boolean save(Book book);
    Boolean update(Book book);
    Boolean delete(Integer id);
    Book getById(Integer id);
    List<Book> getAll();
    IPage<Book> getPage(int currentPage,int pageSize);
}

4.2. 实现类

实现接口中的方法。

在Service实现类应使用@Service注解,将该类设置为bean,交给IOC容器管理

注意,需要注入BookDao对象来实现对数据库数据的操作

@Service
public class BookServiceImpl2  implements BookService {
    @Autowired
    private BookDao bookDao;

    @Override
    public Boolean save(Book book) {
        return bookDao.insert(book) > 0;
    }

    @Override
    public Boolean update(Book book) {
        return bookDao.updateById(book) > 0;
    }

    @Override
    public Boolean delete(Integer id) {
        return bookDao.deleteById(id) > 0;
    }

    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    @Override
    public List<Book> getAll() {
        return bookDao.selectList(null);
    }

    @Override
    public IPage<Book> getPage(int currentPage, int pageSize) {
        IPage page = new Page(currentPage,pageSize);
        bookDao.selectPage(page,null);
        return page;
    }

}

5. 表现层controller

业务控制,就是控制业务层Service的,它的作用主要是架起了外界与业务层沟通的桥梁,移动端,前端在调用接口访问相关业务时,都会通过Controller,由Controller去调相关的业务层代码并把数据返回给移动端和前端;

使用@RestController注解,用restful风格编写代码

注意函数参数如果有类似 Book book的引用类型,需要加上@RequestBody注解

如果参数为路径地址上的数,需要加@PathVariable注解,如果有多个参数,要加@Param注解

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private IBookService bookService;
    @GetMapping
    public R getAll(){
        return new R(true,bookService.list());
    }
    @PostMapping
    public R save(@RequestBody Book book) throws IOException {
        if(book.getName().equals("123")) {
            throw new IOException();
        }
        Boolean flag = bookService.save(book);
        return new R(flag,flag?"添加成功^-^":"添加失败-_-!");
    }
    @DeleteMapping("{id}")
    public R delete(@PathVariable Integer id){
        return new R(bookService.removeById(id));
    }
    @GetMapping("{id}")
    public R getById(@PathVariable Integer id){
        return new R(true,bookService.getById(id));
    }

    @GetMapping("/{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage,@PathVariable int pageSize, Book book){
        IPage<Book> page = bookService.getPage(currentPage, pageSize,book);
        //如果当前页码值大于了总页码值,那么重新执行查询操作,使用最大页码值作为当前页码值
        if( currentPage > page.getPages()){
            page = bookService.getPage((int)page.getPages(), pageSize,book);
        }
        return new R(true, page);
    }
}

6. sql拦截器

在使用分页查询功能时,需要在原有的sql语句上加limit语句,这时候需要拦截器拦截sql语句,然后动态拼接sql语句

@Configuration//声明为配置类
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor interceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

7. 前后端联

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值