杨枝小甘露
杨枝小甘露
发布于 2025-03-20 / 9 阅读
0
0

一、前置知识

1、面向对象

首先得了解分类的概念,现实生活中,很多东西都能够分类

画板

有了类这个概念,什么是对象?上述例子中,“苹果”“橘子”“香蕉”“猫”“狗”“大象”都是对象。类是抽象的(具有相同特征的抽象集合总结概括为"类"),对象是具体的,总结一下,对象是类的实例化。

面向对象编程就是“用对象来模拟现实”,让程序更像生活,更好理解、更好扩展。** **

面向对象有三个关键的概念:封装、继承、多态

1、 封装(把东西装起来)

就像你买了一辆车,你只需要踩油门、打方向盘,不需要知道里面发动机怎么工作的。

在程序里,也一样:

class Dog {
    private String name;  // 封起来,不让别人随便改

    public void setName(String name) {
        this.name = name;  // 提供方法来设置
    }

    public String getName() {
        return name;  // 提供方法来读取
    }
}

你不能直接动它的 name,只能通过 getName() / setName()

2. 继承(可以“复制”别人的本领)

比如说,狗和猫都是动物,它们都有“吃饭”的功能。我们可以把这个功能写在“动物”里,让狗和猫继承它:

class Animal {
    public void eat() {
        System.out.println("吃东西");
    }
}

class Dog extends Animal {
    public void bark() {
        System.out.println("汪汪叫");
    }
}

现在狗自动就能吃饭了,不用再重复写。 狗不仅能吃东西,还能汪汪叫。

3. 多态(一个动作,不同表现)

比如你说“动物叫一声”:

  • 狗会“汪汪”
  • 猫会“喵喵”
  • 老虎会“吼吼”

你只需要写一个 **<font style="color:#000000;">makeSound()</font>** 的方法,每种动物自己去实现它:

class Animal {
    public void makeSound() {
        System.out.println("动物在叫");
    }
}

class Cat extends Animal {
    public void makeSound() {
        System.out.println("喵喵");
    }
}

class Dog extends Animal {
    public void makeSound() {
        System.out.println("汪汪");
    }
}

注:Cat类和Dog类都是继承了Animal类,可以在前面写一个**@override**,表示覆盖

2、java的三层模型

画板

service层起承上启下的作用,Controller层负责和前端进行交互,Mapper层和数据库进行交互

一般写Java工程时,先写Mapper层,然后写service层,最后写controller层,

例如: CarMapper --CarMapper.xml--CarService--CarserviceImpl--CarParam--AdminCarController

CarService接口作用:前端调用CarService接口把东西传给CarServiceImpl类

CarServiceImpl类作用:接收前端的数据,调用CarMapper类,把结果返回给CarService接口,这样前端就能收到返回结果****(接收前端数据,新建实体对象,把前端数据通过实体对象传给mapper层,(如果需要的话)、再新建实体对象,把更新的数据从mapper层取出,返回给controller层【还涉及到实体对象向dto对象转换】)

用例子理解模型:

背景:我(职位产品经理)入职软通要去领电脑,我无法进入软通公司,因为保密协议,只能在门口传达消息

画板

3、Maven和springboot

https://blog.csdn.net/2303_77275067/article/details/142744399

1)springboot是什么?----开发框架(类比为前端的vue)

Java 开发框架 ,理解为代码框架, 最主要的作用就是: 👉 帮你更简单地写出结构清晰、功能强大的 Java 应用

🧠 Spring 的主要特点:

  • 帮你管理对象(依赖注入,叫 IoC)
  • 自动调用需要的组件(控制反转)
  • 轻松整合数据库、Web、缓存、安全等模块
  • 模块化结构(你需要啥就加啥)

🏗️** 类比现实:**

你可以把 Spring 想成一个“搭建房子的骨架系统”:

  • 提供基础设施(对象管理、配置)
  • 你只负责“装修和搬进去住”
  • 常用的插件像厨房、厕所(Spring Web、Spring Security、Spring Data 等)

2)Maven是什么?----包管理器(类比为前端的vite+npm)

Maven是包管理器,Maven 是一个“项目管理工具”,最主要的作用就是: 👉 帮你自动下载和管理项目需要的 jar 包(依赖)

📦** 类比生活:**

就像你做饭需要食材(油盐酱醋),Maven 就像是一个**智能“超市搬运工”**,
你只要告诉它你需要什么,它自动去网上帮你下载放好(不需要你一包包手动找 jar)。

🛠️** 它还能做的事:**

  • 帮你打包(生成 .jar.war 文件)
  • 帮你编译、测试
  • 保证不同开发者使用一样的依赖版本(统一标准)

4、数据类型问题

1)调用数据时,java通过mybatis调用数据库的数据,但是mybatis和java的数据类型不一样,不是一一对应的,

通常这一块内容的对应会在resorce->mapper.xml配置文件中遇到

https://blog.csdn.net/wei198621/article/details/113681660

2)java基本数据类型

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

5、Java中的抽象类和具体类,静态方法和非静态方法区别

1)抽象类与具体类的关系

通俗理解:

  • 抽象类就像“设计图”:不能直接用,但可以派生出实物(子类)
  • 具体类就像“成品”:能直接造出来用
abstract class Animal {
    abstract void makeSound(); // 抽象方法
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("汪汪");
    }
}

2)静态方法与非静态方法

class MathTool {
    static int add(int a, int b) {
        return a + b;
    }

    int multiply(int a, int b) {
        return a * b;
    }
}

MathTool.add(1, 2);          // 静态方法,类名调用
new MathTool().multiply(2, 3); // 非静态方法,需要 new 一个对象

6、resulttype和resultmap区别(mapper.xml中)

一、resultType

✅ 简单映射方式(自动匹配)

  • resultType 适用于 查询结果列名和 Java 类属性名一致 的情况。
  • MyBatis 会自动将列名与 Java 类中的属性名一一对应并封装
<select id="getUser" resultType="com.example.User">
  SELECT id, username, age FROM users WHERE id = #{id}
</select>

public class User {
    private Integer id;
    private String username;
    private Integer age;
    // getters and setters
}

二、resultMap

✅ 复杂映射方式(手动定义映射关系)

  • resultMap 提供了更灵活详细的控制,比如:
    • 列名和属性名不一致
    • 嵌套对象、关联对象、一对多、多对多
    • 自定义映射逻辑
<resultMap id="userMap" type="com.example.User">
    <id property="id" column="user_id" />
    <result property="username" column="user_name" />
    <result property="age" column="user_age" />
</resultMap>

<select id="getUser" resultMap="userMap">
  SELECT user_id, user_name, user_age FROM users WHERE user_id = #{id}
</select>

7、http传参,三种传参方式

Path 参数Query 参数Body 参数

1. Path 参数(路径参数)

📌 定义:

  • 参数直接写在 URL 路径中,常用于 资源定位

✅ 特点:

  • 写在 URL 路径中
  • 用来定位资源
  • 在后端用 @PathVariable 注解获取

🎯 场景:

获取用户详情。

GET /users/123

请求的是 ID 为 123 的用户

@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.getById(id);
}

2、Query 参数(查询参数)

✅ 特点:

  • 拼在 URL 后面,以 ? 开头,多个用 & 分隔
  • 用来传递筛选、分页、搜索等条件
  • 在后端用 @RequestParam 获取

🎯 场景:

根据条件筛选用户列表(比如名字和年龄)

GET /users?name=Tom&age=18

📦 含义:

查询所有名字叫 Tom 且年龄为 18 的用户

@GetMapping("/users")
public List<User> getUsers(@RequestParam String name, @RequestParam int age) {
    return userService.findByNameAndAge(name, age);
}

3、Body 参数(请求体参数)

✅ 特点:

  • 参数在请求体中,格式可以是 JSON、XML、表单等
  • 适合传递复杂对象
  • 后端用 @RequestBody 获取

🎯 场景:

新增用户(发送用户信息)

POST /users
Content-Type: application/json

{
  "name": "Tom",
  "age": 18
}

含义:

提交一个包含 nameage 的用户对象,用于创建用户

@PostMapping("/users")
public String addUser(@RequestBody User user) {
    userService.save(user);
    return "用户添加成功";
}

8、新增,更新内容时,需要返回给前端新增内容

前端提交新增或更新请求后,后端直接返回新增或更新后的完整 **Car** 对象,这样前端就不需要再额外发一次 GET 请求来获取更新后的内容了。

于是需要新建一个CarResponce的类,来放我后端返回给前端的内容。

(与之对应的是CarParam类,用于存放前端传给后端的类)

entity中的类是用于存放mapper和数据库层交互的

9、public,private,protect的区别

public class Person {
    public String name;       // 任何类都可以访问
    private int age;          // 只有 Person 类自己能访问
    protected String address; // 子类或同包的类可以访问

    void sayHello() {         // 默认的访问权限,只能被同包类访问
        System.out.println("Hello!");
    }
}

public class Person {
    public String name = "小明";           // 客厅:谁都能看名字
    private String bankPassword = "1234"; // 卧室:只有小明自己知道密码
    protected String familySecret = "祖传秘方"; // 厨房:子女或邻居知道
    String dailyMood = "今天天气不错";   // 阳台:邻居可以看到

    public void sayHello() {
        System.out.println("你好,我是" + name);
    }

    private void checkBank() {
        System.out.println("查看密码:" + bankPassword);
    }

    protected void tellSecret() {
        System.out.println("家庭秘密是:" + familySecret);
    }

    void shareMood() {
        System.out.println("今天心情:" + dailyMood);
    }
}


评论