5.基于SpringBoot的SSMP整合案例-数据层开发

目录

1.新建项目

2.实体类开发:

2.1在pom.xml中增加Lombok坐标:

2.2添加Book实体类

3.数据层开发:

3.1 配置MyBatisPlus与Druid

3.2创建数据层接口

3.3写测试类

3.4点击运行:

4.数据层快速开发:

4.1配置MyBatisPlus与Druid

4.2创建数据层接口:

4.3写测试类:

4.4点击运行:

4.5 测试Dao其他功能

5.开始MV运行日志:

5.1 使用配置方式开启日志,设置日志输出方式为标准输出

5.2 去掉System.out.println(),点击运行

6.分页

6.1使用IPage封装分页数据

6.2 IPage对象中封装了分页操作中的所有数据

6.3 分页操作依赖MyBatisPlus分页拦截器实现功能

6.4借助MyBatisPlus日志查阅执行SQL语句

7.条件查询功能

7.1使用QueryWrapper对象封装查询条件

7.2推荐使用LambdaQueryWrapper对象

7.3 所有查询操作封装成方法调用

7.4查询条件支持动态条件拼装

7.5  LambdaQueryWrapper其他查询条件示例:

7.5.1 添加查询条件

7.5.2 链式调用

7.5.3 使用 OR 和 AND 条件

7.5.4 模糊查询

7.5.5 排序

7.5.6 选择特定字段

7.5.7 组合查询

7.5.8 使用 LambdaQueryWrapper 进行查询


1.新建项目

点击下一步,勾选Web下的Spring web 和 SQL下面的MySQL Driver,点击创建。

打开pomxml,添加mybatis以及druid依赖到pomxml

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.20</version>
</dependency>

修改运行程序名称SpringBootJdk8SsmApplication为Application

修改application.properties配置文件的格式为 yml格式

2.实体类开发:

2.1在pom.xml中增加Lombok坐标:

Lombok,一个]ava类库,提供了一组注解,简化POJO实体类开发

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

2.2添加Book实体类

代码如下:

package com.summer.domain;

import lombok.Data;

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

3.数据层开发:

3.1 配置MyBatisPlus与Druid

在1. 新建项目的时候,已经在pom.xml中导入MyBatisPlus与Druid对应的starter坐标,这时只需要在application.yml配置中 增加相应的配置就可以了

#端口配置
server:
  port: 8081

#数据库 用户名 密码 配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: root

#数据库前缀配置
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_

3.2创建数据层接口

代码如下所示:

package com.summer.dao;

import com.summer.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface BookDao {
    @Select("select * from tbl_book where id = #{id}")
    Book getById(Integer id);

}

3.3写测试类

在test下写一个book的测试类

代码如下所示:

package com.summer.dao;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetById() {
        System.out.println(bookDao.getById(1));

    }

}

3.4点击运行:

4.数据层快速开发:

4.1配置MyBatisPlus与Druid

     同 3.1 

4.2创建数据层接口:

只要数据层接口集成 BaseMapper<T> 就可以了

代码如下所示:

package com.summer.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.summer.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface BookDao extends BaseMapper<Book> {
//    @Select("select * from tbl_book where id = #{id}")
//    Book getById(Integer id);

}

4.3写测试类:

同3.3一样创建测试类,测试类内容如下:

package com.summer.dao;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetById() {
        System.out.println(bookDao.selectById(1));

    }

}

4.4点击运行:

4.5 测试Dao其他功能

具体代码如下:

package com.summer.dao;

import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetById() {
        System.out.println(bookDao.selectById(1));

    }

    @Test
    void testSave() {
        Book book = new Book();
        book.setType("历史");
        book.setName("历史的温度");
        book.setDescription("通过讲述历史人物的故事,展现了历史的温情和人性的光辉");
        System.out.println(bookDao.insert(book));

    }

    @Test
    void testGetAll()
    {
        System.out.println(bookDao.selectList(null));
    }


    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(7);
        book.setType("历史");
        book.setName("历史的温度1");
        book.setDescription("通过讲述历史人物的故事,展现了历史的温情和人性的光辉");
        System.out.println(bookDao.updateById(book));

    }

    @Test
    void testDelete()
    {
        bookDao.deleteById(6);
    }
    
}

在测试保存数据功能时,要在application.yml内加一行id-type: auto ,不然系统会默认assign_id,运行会报错

5.开始MV运行日志:

5.1 使用配置方式开启日志,设置日志输出方式为标准输出

代码如下:

#端口配置
server:
  port: 8081

#数据库 用户名 密码 配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
      username: root
      password: root

#数据库前缀配置
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5.2 去掉System.out.println(),点击运行

去掉1处的System.out.println(), 执行步骤 2.点击运行,出现如下图3所示,具体的日志信息

6.分页

6.1使用IPage封装分页数据

分页操作需要设定分页对象IPage,代码如下所示:

package com.summer.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetPage() {
        //分页操作需要设定分页对象IPage
        IPage page = new Page(1,5);
        bookDao.selectPage(page,null);
    }

}

6.2 IPage对象中封装了分页操作中的所有数据

  • 数据
  • 当前页码值
  • 每页数据总量
  • 最大页码值
  • 数据总量

6.3 分页操作依赖MyBatisPlus分页拦截器实现功能

分页操作是在MyBatisP1us的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现。

创建拦截器MPConfig,如下图所示:

代码如下所示:

package com.summer.config;

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 MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return  interceptor;

    }
}

6.4借助MyBatisPlus日志查阅执行SQL语句

运行testGetPage方法,打开日志,如下图所示:

7.条件查询功能

7.1使用QueryWrapper对象封装查询条件

package com.summer.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;


    @Test
    void testGetBy()
    {
        QueryWrapper<Book> qw = new QueryWrapper();
        qw.like("name","Spring");
        bookDao.selectList(qw);
    }

}

点击运行,如下图所示:


7.2推荐使用LambdaQueryWrapper对象

在下面testGetBy2测试方法中

        if(name != null){
            lqw.like( Book::getName,name);
        }

 lqw.like(name != null, Book::getName,name);

表达的意思是一样的, lqw.like(name != null, Book::getName,name);  表达的意思就是 当name 不等于 null的时候 sql执行like功能

package com.summer.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;


    @Test
    void testGetBy2()
    {
        String name = null;
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();

//        if(name != null){
//            lqw.like( Book::getName,name);
//        }

        lqw.like(name != null, Book::getName,name);
        bookDao.selectList(lqw);
    }


}

针对testGetBy2测试方法,点击运行,如下图所示,没有执行like条件语句:

如果testGetBy2测试方法里面的name变量赋上值,点击运行,如下图所示,执行了like语句:

7.3 所有查询操作封装成方法调用

分页查询Page所支持的函数如下所示

package com.summer.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.summer.domain.Book;
import org.apache.logging.log4j.util.Strings;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

    @Test
    void testGetByCondition()
    {
        IPage page = new Page(1,2);
        String name = "历史";
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
        lqw.like(name != null, Book::getName,name);
        bookDao.selectPage(page,lqw);
        System.out.println( page.getCurrent());//当前页
        System.out.println(page.getPages());//页数
        System.out.println(page.getSize());//每页显示数据条数
        System.out.println(page.getTotal());//总计数据条数
        System.out.println(page.getRecords());//当前页的所有记录
    }

}

点击运行,如下图所示:

7.4查询条件支持动态条件拼装

package com.summer.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

    @Autowired
    private BookDao bookDao;

  @Test
    void testGetByCondition()
    {
        IPage page = new Page(1,5);
        String name = "历史";
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
        lqw.like(name != null, Book::getName,name);
        bookDao.selectPage(page,lqw);
    }

}

7.5  LambdaQueryWrapper其他查询条件示例:

7.5.1 添加查询条件

  • 使用 Lambda 表达式添加条件,例如,添加一个条件来查询用户的年龄大于 18:

queryWrapper.gt(User::getAge, 18); // gt 表示 greater than

7.5.2 链式调用

  • LambdaQueryWrapper 支持链式调用,可以连续添加多个条件:

queryWrapper
    .eq(User::getName, "张三") // eq 表示 equal
    .lt(User::getAge, 30); // lt 表示 less than

7.5.3 使用 OR 和 AND 条件

  • 可以添加 OR 或 AND 条件组:

queryWrapper
    .eq(User::getName, "张三")
    .and(w -> w.lt(User::getAge, 30))
    .or(w -> w.gt(User::getSalary, 5000));

7.5.4 模糊查询

进行模糊查询,例如,查询用户名包含 "user" 的用户:

queryWrapper.like(User::getName, "user");

7.5.5 排序

对查询结果进行排序:

queryWrapper.orderByAsc(User::getAge); // 升序 queryWrapper.orderByDesc(User::getSalary); // 降序

7.5.6 选择特定字段

选择查询结果中的特定字段:

queryWrapper.select(User::getId, User::getName); // 只选择 id 和 name 字段

7.5.7 组合查询

可以组合多个条件,例如,组合 IN 和 LIKE:

queryWrapper
    .in(User::getId, Arrays.asList(1, 2, 3))
    .like(User::getName, "user");

7.5.8 使用 LambdaQueryWrapper 进行查询

最后,你可以使用 LambdaQueryWrapper 与 MyBatis-Plus 的 Mapper 接口一起使用,执行查询:

List<User> users = userMapper.selectList(queryWrapper);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值