springboot中数据层标准开发(增删改查等数据操作)

第一步:模块创建

①创建springboot项目,勾选spring Web模板+MySQL Driver驱动

②在pom.xml文件中手动添加MyBatis-Plus 、Druid  (插件的左边可以去官网查询)、lombok(具体左右在下文会介绍)

<!--        手动添加mybatis-plus-->
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
<!--手动添加德鲁伊-->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>
<!--手动加入Lombook-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

③将application.properties文件修改为 application.yml文件

第二步:书写代码

   ①application.yml配置文件:

#第二种方法:Druid专用配置  推荐
spring:
  datasource:
    druid:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
     username: root
     password: admin

#开启MP运行日志
mybatis-plus:
  configuration:
#    标准输出 打印到控制台上   以后我们就不用sout输出了,  这个东西会帮我们输出
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

②实体类:

    其中@Data的注释来源于lombok,一个java的类库,提供了一组注解,简化了POJO实体类开发

    但是需要在配置文件中导入坐标

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

//@Getter所有的get方法
//@Setter所有的set方法
//@NoArgsConstructor 无参构造
//@AllArgsConstructor//全部的构造

@Data  //get+set+toString+hashcode+equals  但是没有构造方法
@TableName(value = "t_book")
public class Book {
    //    这里的属性名 要和数据库表中的属性名一致,要不然最终的查询结果是null
//    将数据库中的结果对此变量名进行注入
    @TableId(value="id",type = IdType.AUTO)  //代表自增算法
    @TableField(value = "id")
    private int id;
    @TableField(value = "bookName")
    private String bookName;
    @TableField(value = "statue")
    private String statue;

}

③数据库SQL映射需添加@Mapper被容器识别

    定义数据层接口与映射配置

@Mapper
public interface BookDao  extends BaseMapper<Book> {//指定泛型才能知道操作谁

}

④定义拦截器  (在下文的代码中会使用到),可以在一个类中加入多个拦截器,我们这里加入的是分页的拦截器,只有加入分页的拦截器之后,我们的分页才能最终成功

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  //第一步:配置类  交给Spring管理  确保在启动类的包或子包下,才能被扫描到
public class NPCConfig {
// 第二步:做对应Bean
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
//        第三步:创建拦截器(这只是一个壳子)
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        第四步:添加内部拦截器  (分页的)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//        可以添加多个内部拦截器
        return interceptor;
    }
}

⑤测试代码:

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.company.dao.BookDao;
import com.company.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.management.Query;

@SpringBootTest
class Springboot08SsmpApplicationTests {

    @Autowired
    private BookDao bookDao;

    @Test
    void contextLoads() {
//        System.out.println(bookDao.selectById(10086));
        bookDao.selectById(10086);//这个能在控制台输出是因为我们开启了MP运行日志
    }

    @Test
    void testSave(){
        Book book = new Book();
//        这里采用的是主键自增,我们不用手动给主键赋值(数据库默认的是雪花算法)
//        book.setId(10092);
        book.setBookName("信息技术");
        book.setStatue("优秀");

        bookDao.insert(book);
    }

    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(10086);
        book.setBookName("zhanghangzhang");

        bookDao.updateById(book);
    }

    @Test
    void testDelete(){
        bookDao.deleteById(10093);//通过id删除
    }

     @Test
    void testGetAll(){
         System.out.println( bookDao.selectList(null)); //给null查全部
     }

     @Test  //分页  单纯运行这个是不行的,需要写一个配置类(拦截器)
    void testGetPage(){
//        接口不能new  只能new实现类
        IPage page = new Page(1,5);  //获取第一页的数据,显示五条
//        IPage对象中封装了分页操作中的所有数据:
//        数据/当前页码值/每页数据总量/最大页码值/数据总量
//        IPage page = new Page(2,5);  获取第二页的数据,显示五条
        bookDao.selectPage(page,null);
     }

     @Test  //按条件查询
    void testGetBy(){
        QueryWrapper<Book>  qw = new QueryWrapper<>();//如果不传泛型,它会自己从查询的那个地方取
       qw.like("bookName","zhang"); //模糊查询  对bookName进行模糊查询 %zhang%

        bookDao.selectList(qw);
    }

    @Test
    void testGetBy2(){
        String val="zhangzhang";
        //上面testGetBy()方法中,查询的字段名很容易写错,但是我们采用lambda表达式之后,如果写错了就会报错(有语法检查)
        LambdaQueryWrapper<Book> qw = new LambdaQueryWrapper<>();
          qw.like(val!=null,Book::getBookName,val);  //我们要判定val不是空,才能进行查询,要不回来查询的结果和我们要的结果不一致
//        在like方法中就可以判断,加个参数 val!=null  就不用写if了
          bookDao.selectList(qw);

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱布朗熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值