SpringBoot框架超详细笔记

这篇博客详细介绍了如何手动创建SpringBoot项目,包括从Maven项目开始配置,添加依赖,编写启动类,以及SpringBoot的核心优势。还涵盖了yaml文件的使用,包括读取单一数据和引用类型数据的方法。此外,博主讲解了整合第三方技术如Junit、Mybatis及Mybatis_Plus的步骤,并讨论了SSMP框架的使用。最后,提到了静态资源管理和完整的代码结构。

1.1 SpringBoot项目创建

  • 从官网创建
  • idea中联网从官网创建
  • idea中联网从阿里云创建
  • SpringBoot项目手动创建

前三种创建方式都需要联网创建,需要等待的时间很长,我一般习惯手动创建。通过创建一个普通的Maven项目自己手动配置得到一个SpringBoot项目。

1.2 手动创建SpringBoot项目

1.2.1 Maven项目的创建

新建项目

 选择Maven,下一步

 只需要修改命名就行

 

       项目创建成功

 1.2.2 手动配置将Maven项目变为SpringBoot项目

pom.xml中添加依赖项

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.2</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>    

编写启动类

package com.ylh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemo4Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemo4Application.class);
    }
}

至此,Maven项目成功变成SpringBoot项目

 1.3 概述

SpringBoot是由Pivotal团队提供的全新的框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程

Spring程序的缺点

依赖设置繁琐、配置繁琐

SpringBoot程序的优点

  • 起步依赖【简化配置】

  • 自动配置【简化常用工程相关配置】

  • 辅助功能【内置服务器……】

项目创建总结:

1、开发springboot程序要继承spring-boot-starter-parent

2、spring-boot-starter-parent中定义了很多个依赖管理

3、继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突

4、继承parent的形式也可以采用引入依赖的形式实现效果

starter

SpringBoot项目中常见的项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的

parent

所有SpringBoot项目要继承的项目,定义了若干个坐标的版本号【依赖管理,而非真正的依赖】,以达到减少依赖冲突的目的

spring-boot-starter-parent个版本之间存在着诸多坐标的不同

springboot提供了3中配置文件的格式

- properties【传统的格式/默认的格式】
- yml【主流格式】
- yaml

springboot配置文件的加载顺序

application.properties>application.yml>application.yaml

不同配置文件中相同的配置按照加载的优先级相互覆盖,不同配置文件中不同的配置全部保留

1.4 yaml文件

概述

YAML[Yaml ain't Markup Language]一种数据序列化格式

优点:

- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式

扩展名

- .yml【主流】
- .yaml

语法规则

- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许空格【不允许使用tab】
- 属性值前添加空格【属性名与属性名之间使用冒号+空格作为分隔】

字面值表示方式

boolean: True  # True true False FALSE false均可
float: 12.23
int: 123 
null: ~   # 使用~表示null
string: Helloword
string1: "Helloworld"  # 字符串可以直接书写,也可以使用双引号引起来
date: "2023-05-27"
datetime: 2023-05-27T11:46:23+08:00  # 时间和日期使用T连接,最后使用+代表时区


# 数组表示方式:在属性名书写位置的下方使用减号作为数据开始的符号,每行书写一个数据,减号与数据间空格分隔
students:
  - 小明
  - 小红
  
student:
  name: 袁~
  age: 18
  subject:
    - java
    - web
    - javaEE
    
hobbys: [ 唱歌,跳舞 ]   # 数组书写的缩略格式

读取单一数据

province: 陕西
city: 西安

student:
  name: 袁李慧
  age: 21

school:
  - 西交
  - 西电
     
package com.ylh.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class UserController {

    @Value("${province}")
    private String province;

    @Value("${city}")
    private String city;

    @Value("${student.name}")
    private String name;

    @Value("${student.age}")
    private int age;

    @Value("${school[1]}")
    private String school;

    @GetMapping
    public String hello(){
        System.out.println(province);
        System.out.println(city);
        System.out.println(name);
        System.out.println(age);
        System.out.println(school);
        return "hello springboot is running"+province+"=="+city;
    }
}

使用@Value读取单个数据,属性名引用方式:¥{以及属性名.二级属性名……}

//使用自动装配将所有的数据封装到一个Environment对象中
@Autowired
private Environment env;

@GetMapping("/getData")
public String getYamlData(){
    System.out.println(env);
    System.out.println(env.getProperty("province"));
    System.out.println(env.getProperty("city"));
    System.out.println(env.getProperty("school[2]"));
    System.out.println(env.getProperty("student.name"));
    return "get yaml data is success";
}

使用Environment对象封装全部配置信息

使用@Autowired自动装配数据到Environment对象中

读取引用类型数据

定义yml文件

datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql:///test
  username: root
  password: 123mysql

定义实体类

package com.ylh.util;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

@Controller

@Autowired
private MyDataSource dataSource;

@GetMapping("/ds")
public String getDataSource() {
    System.out.println(dataSource);
    return dataSource.toString();
}

使用@ConfigurationProperties注解绑定配置信息到封装类中

封装类需要定义为spring管理的bean,否则无法进行属性注入

1.5 整合第三方技术

1.5.1 整合Junit

引入依赖——导入对应的starter

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

在测试类上使用@SpringBootTest注解修饰

package com.ylh;
​
import org.springframework.boot.test.context.SpringBootTest;
​
@SpringBootTest
public class SpringBootDemo4Test {
    public void testUser(){
​
    }
}

使用自动装配的形式添加要测试的对象

1.5.2 整合mybatis

引入依赖——导入对应的starter

<!--导入对应的starter MaBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
​
<!--导入数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

设置数据源的参数

#配置数据源信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///springboot_db
    username: root
    password: 123mysql

测试类

package com.ylh;
​
import com.ylh.dao.StuDao;
import com.ylh.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
@SpringBootTest
public class SpringBootDemo2Test {
​
    @Autowired
    private StuDao stuDao;
​
    @Test
    public void testStuById(){
        Student stuById = stuDao.findStuById(1);
        System.out.println(stuById);
    }
}

Tips:

MyBatis8.x驱动要求设置时区

a.url后边添加serverTime设定Asia/ShangHai或者使用UTC

如果是映射配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
​
<mapper namespace="com.ylh.dao.StuMapper">
    <!--查询-->
    <select id="findAll" resultType="Stu">
        select * from stu
    </select>
</mapper>
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml  # mapper映射文件路径
  type-aliases-package: com.ylh.pojo  # 配置是哪个包下的类的默认的别名

1.5.3 整合Mybatis_Plus

1.导入坐标

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>  <!--这里必须写版本, 因为mybatis_plus未收录在boot中-->
</dependency>

2.创建Dao接口

继承BaseMapper,泛型就是封装数据的实体类,该接口中常用的CRUD方法已经写好了,直接用

@Mapper
public interface StuDao extends BaseMapper<Stu> {
}

3.测试,便可以查到数据

@Test
public void testStu() {
    Stu stu = stuDao.selectById(1);
    System.out.println(stu);
}


@Test
void testPage() {
    IPage page = new Page(3,2);
    IPage pageData = stuDao.selectPage(page,null);
    System.out.println(pageData.getRecords());
}

分页查询 

@Test
void testPage() {
    IPage page = new Page(3,2);
    IPage pageData = stuDao.selectPage(page,null);
    System.out.println(pageData.getRecords());
}

分页操作需要设定分页对象IPage,IPage对象中封装了分页操作中的所有数据,数据、当前页面值、每页数据总量、最大页码、数据总量……

直接上述代码我们发现未达到分页的效果,因为分页操作实在MyBatisPlus常规操作基础上增强得到的,内部是动态的拼写sql语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现

@Configuration
public class MyConfig {
​
 @Bean
 public MybatisPlusInterceptor mybatisPlusInterceptor(){
     //定义mp拦截器
     MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
     //添加具体的拦截器
     interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
     return interceptor;
 }
}

条件查询

@Test
void testGetByCondition() {
    //select * from stu where name like '%sql%'
    QueryWrapper<Stu> qw = new QueryWrapper<>();
    qw.like("name","sql");
    List<Stu> selectList = stuDao.selectList(qw);
    for ( Stu stu : selectList ) {
        System.out.println(stu);
    }
}
​
@Test
void testGetByCondition2() {
    //select * from stu where name like '%sql%'
    LambdaQueryWrapper<Stu> wq = new LambdaQueryWrapper<>();
    //wq.like(Stu::getName,"sql");
    String name = null;
    wq.like(name!=null,Stu::getName,name);
    List<Stu> selectList = stuDao.selectList(wq);
    for ( Stu stu : selectList ) {
        System.out.println(stu);
    }
}

1.5.4 SSMP

持久层

@Mapper
public interface StuDao extends BaseMapper<Stu> {
}

业务层

public interface StuService extends IService<Stu> {
}
@Service
public class StuServiceImpl extends ServiceImpl<StuDao,Stu> implements StuService {
}

1.使用通用的接口IService快速开发业务层

2.使用通用的实现类ServiceImpl快速开发业务层的实现类

3.可以在通用接口的基础上做功能重载或者功能追加

4.注意重载的时候不需要覆盖原始操作,避免原始操作提供的功能丢失

表现层

package com.ylh.controller;
​
import com.ylh.pojo.Stu;
import com.ylh.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
​
import java.util.List;
​
/**
 * 控制器类
 */
@RestController
@RequestMapping("/students")
public class StuController {
​
    @Autowired
    private StuService stuService;
​
    @GetMapping
    public List<Stu> getAll() {
        return stuService.list();
    }
​
    @PostMapping
    public boolean save(@RequestBody Stu stu) {
        return stuService.save(stu);
    }
​
    @PutMapping
    public boolean update(@RequestBody Stu stu) {
        return stuService.updateById(stu);
    }
​
    @DeleteMapping("/{id}")
    public boolean deleteById(@PathVariable Integer id) {
        return stuService.removeById(id);
    }
​
    @GetMapping("/{id}")
    public Stu getById(@PathVariable Integer id) {
        return stuService.getById(id);
    }
​
​
}
​

分页功能

//分页
IPage<Stu> getPage(int currentPage,int pageSize);
@Override
public IPage<Stu> getPage(int currentPage, int pageSize) {
IPage page = new Page(currentPage, pageSize);
return baseMapper.selectPage(page,null);
}
@GetMapping("/{current}/{pageSize}")
public IPage<Stu> getPage(@PathVariable Integer current,
@PathVariable Integer pageSize) {
return stuService.getPage(current, pageSize);
}

表现层统一

package com.ylh.controller;
​
import com.ylh.pojo.Stu;
import com.ylh.service.StuService;
import com.ylh.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
​
​
/**
 * 控制器类
 */
@RestController
@RequestMapping("/students")
public class StuController {
​
    @Autowired
    private StuService stuService;
​
    @GetMapping
    public Result getAll() {
        return new Result(true,stuService.list());
    }
​
    @PostMapping
    public Result save(@RequestBody Stu stu) {
        return new Result(stuService.save(stu),null);
    }
​
    @PutMapping
    public Result update(@RequestBody Stu stu) {
        return new Result(stuService.updateById(stu),null);
    }
​
    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable Integer id) {
        return new Result(stuService.removeById(id),null);
    }
​
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        return new Result(true,stuService.getById(id));
    }
​
    @GetMapping("/{current}/{pageSize}")
    public Result getPage(@PathVariable Integer current,
                              @PathVariable Integer pageSize) {
        return new Result(true,stuService.getPage(current, pageSize));
    }
}
​

1.设置统一的返回值类型结果,便于前端开发读取数据

2.返回结果类型可以根据需求自行设定,没有固定格式

3.返回值结果模型用于后端和前端进行数据格式统一,也称之为前后端数据协议1.6 静态资源

1.6 静态资源

在resources下创建static目录,将所有静态资源放入

yml中

mvc:
  static-path-pattern: /res/**

修改前:http://localhost:8080/demo1.html

修改后:http://localhost:8080/res/demo1.html

修改静态资源存放的位置

  web:
    resources:
      static-locations:
        - classpath:/static/
        - classpath:/ylhstatic/

1.7 完整代码呈现

目录

1.1 SpringBoot项目创建

1.2 手动创建SpringBoot项目

1.2.1 Maven项目的创建

 1.2.2 手动配置将Maven项目变为SpringBoot项目

pom.xml中添加依赖项

编写启动类

 1.3 概述

1.4 yaml文件

概述

读取单一数据

读取引用类型数据

1.5 整合第三方技术

1.5.1 整合Junit

1.5.2 整合mybatis

1.5.3 整合Mybatis_Plus

分页查询 

条件查询

1.5.4 SSMP

表现层统一

1.6 静态资源

1.7 完整代码呈现

config.MyConFig

controller.StuController

dao.StuDao

pojo.Stu

service

util.Result

SpringBootDemo1Application

static.demo1

application.yml

test:SpringBootDemo1Test

pom.xml


 完整目录

config.MyConFig

package com.ylh.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 MyConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

controller.StuController

package com.ylh.controller;

import com.ylh.pojo.Stu;
import com.ylh.service.StuService;
import com.ylh.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


/**
 * 控制器类
 */
@RestController
@RequestMapping("/students")
public class StuController {

    @Autowired
    private StuService stuService;

    @GetMapping
    public Result getAll() {
        return new Result(true,stuService.list());
    }

    @PostMapping
    public Result save(@RequestBody Stu stu) {
        return new Result(stuService.save(stu),null);
    }

    @PutMapping
    public Result update(@RequestBody Stu stu) {
        return new Result(stuService.updateById(stu),null);
    }

    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable Integer id) {
        return new Result(stuService.removeById(id),null);
    }

    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        return new Result(true,stuService.getById(id));
    }

    @GetMapping("/{current}/{pageSize}")
    public Result getPage(@PathVariable Integer current,
                              @PathVariable Integer pageSize) {
        return new Result(true,stuService.getPage(current, pageSize));
    }



}

dao.StuDao

package com.ylh.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ylh.pojo.Stu;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StuDao extends BaseMapper<Stu> {
}

pojo.Stu

package com.ylh.pojo;

import lombok.Data;

@Data
public class Stu {
    private Integer id;
    private String name;
    private String pass;
    private Integer age;
    private String sex;
}

service

impl.StuServiceImpl

package com.ylh.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ylh.dao.StuDao;
import com.ylh.pojo.Stu;
import com.ylh.service.StuService;
import org.springframework.stereotype.Service;

@Service
public class StuServiceImpl extends ServiceImpl<StuDao,Stu> implements StuService {
    @Override
    public IPage<Stu> getPage(int currentPage, int pageSize) {
        IPage page = new Page(currentPage, pageSize);
        return baseMapper.selectPage(page,null);
    }
}

StuService

package com.ylh.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ylh.pojo.Stu;

/**
 * 业务层接口
 */
public interface StuService extends IService<Stu> {

    //分页
    IPage<Stu> getPage(int currentPage,int pageSize);

}

util.Result

package com.ylh.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 封装结果数据类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private Boolean flag;
    private Object data;
}

SpringBootDemo1Application

package com.ylh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemo1Application.class,args);
    }
}

static.demo1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/jquery-3.5.1.min.js"></script>
    <script src="./js/vue.min.js"></script>
    <script src="./js/axios.js"></script>
</head>
<body>
<h1>hello springboot is running>>>>></h1>
<div id="app">
    <table>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
        <tr v-for="stu in stuList">
            <td>{{stu.id}}</td>
            <td>{{stu.name}}</td>
            <td>{{stu.pass}}</td>
            <td>{{stu.age}}</td>
            <td>{{stu.sex}}</td>
            <td><a href="">删除</a><a href="">修改</a></td>
        </tr>
    </table>
</div>
</body>
<script type="text/javascript">
    new Vue({
        el: "#app",
        data: {
            stuList: []
        },
        created() {
            this.findAll();
        },
        methods: {
            findAll() {
                //请求后台
                axios.get("/students").then(res => {
                    //请求成功
                    console.log(res.data.data);
                    this.stuList = res.data.data;
                }).catch(() => {
                    //请求失败
                });
            }
        }
    });
</script>
</html>

application.yml

server:
  port: 9090

##配置数据源信息
#spring:
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql:///student?serverTimezone=Asia/Shanghai
#    username: root
#    password: 123mysql

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql:///student?serverTimezone=Asia/Shanghai
      username: root
      password: 123mysql
  mvc:
    static-path-pattern: /res/**
#   static-path-pattern: /**
  web:
    resources:
      static-locations:
        - classpath:/static/

mybatis-plus:
  #  global-config:
  #    db-config:
  #      table-prefix:t_ # 如果表明有前缀则加该配置
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

test:SpringBootDemo1Test

package com.ylh;

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.ylh.dao.StuDao;
import com.ylh.pojo.Stu;
import com.ylh.service.StuService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class SpringBootDemo1Test {

    @Autowired
    private StuService stuService;

    @Autowired
    private StuDao stuDao;

    @Test
    void testSave() {
        Stu stu = new Stu();
        stu.setName("软件测试");
        stu.setPass("测试软件的健壮性以及是否符合上线要求");
        stu.setSex("软件测试");
        stu.setId(28);
        stuService.save(stu);
    }

    @Test
    public void textStu(){
        Stu byId = stuService.getById(28);
        System.out.println(byId);
    }

    @Test
    void testFindAll() {
        List<Stu> list = stuService.list();
        for ( Stu stu : list ) {
            System.out.println(stu);
        }
    }

    /**
     * 根据id查询
     */
    @Test
    public void testStu() {
        Stu stu = stuDao.selectById(1);
        System.out.println(stu);
    }

    /**
     * 分页查询
     */
    @Test
    void testPage() {
        IPage page = new Page(3,2);
        IPage pageData = stuDao.selectPage(page,null);
        System.out.println(pageData.getRecords());
    }

    /**
     * 条件查询
     */
    @Test
    void testGetByCondition() {
        //select * from stu where name like '%sql%'
        QueryWrapper<Stu> qw = new QueryWrapper<>();
        qw.like("name","李");
        List<Stu> selectList = stuDao.selectList(qw);
        for ( Stu stu : selectList ) {
            System.out.println(stu);
        }
    }

    @Test
    void testGetByCondition2() {
        //select * from stu where name like '%sql%'
        LambdaQueryWrapper<Stu> wq = new LambdaQueryWrapper<>();
        //wq.like(Stu::getName,"sql");
        String name = null;
        wq.like(name!=null,Stu::getName,name);
        List<Stu> selectList = stuDao.selectList(wq);
        for ( Stu stu : selectList ) {
            System.out.println(stu);
        }
    }
}

pom.xml

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值