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
}
含义:
提交一个包含 name 和 age 的用户对象,用于创建用户
@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);
}
}