前端开发学习Spring boot,有关开发的一些基础知识
本文是Spring boot学习第四篇,前面分别是
这几天分别学习了Spring boot的项目模板怎么生成,生成后项目结构如何?之后是写一个简单的接口和使用数据库,在上几篇的学习中,涉及很多基础知识,本文说明一下。
java的包管理
paakage关键字
在Java中,package
关键字用于声明一个包(Package)。包是用来组织类和接口的一种机制,它可以避免类名冲突,并可以控制类的访问权限。
比如可能有一个名为User
的类,这个类在helloWorld.start
包中:
package helloWorld.start;
public class User {
// ...
}
这意味着User
类的全名是helloWorld.start.User
。
包还可以嵌套。例如有一个名为admin
的子包,在这个子包中有一个名为AdminUser
的类:
package helloWorld.start.admin;
public class AdminUser {
// ...
}
这意味着AdminUser
类的全名是helloWorld.start.admin.AdminUser
。
在大型项目中,合理地使用包可以更好地组织代码。例如,所有和用户相关的类都放在user
包中,所有和订单相关的类都放在order
包中。
package访问规则
在Java中,如果两个类在同一个包中,那么它们可以直接互相访问,不需要任何导入(import)语句。例如,如果ClassA
和ClassB
都在com.example
包中,那么ClassA
可以直接使用ClassB
,反之亦然。
package com.example;
public class ClassA {
ClassB b = new ClassB();
}
package com.example;
public class ClassB {
ClassA a = new ClassA();
}
但是,如果两个类在不同的包中,那么它们不能直接互相访问。需要在一个类中使用import
语句来导入另一个类。例如,如果ClassA
在com.example
包中,ClassB
在com.example.sub
包中,那么ClassA
想要使用ClassB
,就需要导入ClassB
:
package com.example;
import com.example.sub.ClassB;
public class ClassA {
ClassB b = new ClassB();
}
package com.example.sub;
public class ClassB {
// ...
}
需要注意的是,如果一个类是默认访问级别(没有public修饰符),那么它只能被同一个包中的其他类访问,即使使用了import
语句也无法在其他包中访问。
package我觉得就是官方出的一个帮助你分类的工具,顺便加了一些辅助功能。对于前端来说,本身文件就是分类啊,不用什么包之类的。
java的maven
maven这个包依赖管理工具,其实和nodejs的npm有相似之处。大家都知道npm有淘宝镜像。其实maven也有镜像,阿里云镜像。
在下载maven后可以直接修改其配置文件,Maven中央仓库默认的URL是https://repo.maven.apache.org/maven2/
,通常情况下不需要进行任何配置就可以使用它。但是考虑有些包下载非常慢,可以改变中央仓库的URL,或者添加其他的仓库,可以在settings.xml
文件中进行配置。
settings.xml
文件通常位于Maven安装目录的conf
目录下。可以在这个文件中的<mirrors>
元素下添加一个<mirror>
元素来配置仓库的镜像。以下的配置将中央仓库的URL改为了阿里云的镜像站点:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
在这个配置中,<id>
和<name>
元素可以随意填写,<url>
元素是镜像站点的URL,<mirrorOf>
元素指定了这个镜像是哪个仓库的镜像,central
表示中央仓库。
修改后可以覆盖当前项目maven的配置文件,具体修改步骤,我的idea是社区版的,打开偏好
然后搜索maven
可以将截图中马赛克改为电脑本地的maven配置。
示例项目中的注解解释
在我前几篇文章里面,涉及一些注解,在这里解释什么作用。
@Data、@NoArgsConstructor和@AllArgsConstructor
package helloWorld.start;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private int code;
private String message;
private Object data;
public static Result success(Object data) {
return new Result(200, "操作成功", data);
}
public static Result error(String message) {
return new Result(500, message, null);
}
}
上面中的@Data
、@NoArgsConstructor
和@AllArgsConstructor
都是什么作用?
@Data
:这个注解会自动为类的所有字段生成getter和setter方法,同时还会生成equals
、hashCode
和toString
方法。这样你就不需要手动编写这些方法了。
@NoArgsConstructor
和@AllArgsConstructor
都是Lombok库提供的注解,用于自动生成构造器。
@NoArgsConstructor
会生成一个无参构造器。例如:
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private String name;
private String email;
}
上述代码会生成如下的无参构造器:
public User() {
}
@AllArgsConstructor
会生成一个包含所有成员变量的构造器。例如:
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
private String name;
private String email;
}
上述代码会生成如下的构造器:
public User(String name, String email) {
this.name = name;
this.email = email;
}
这两个注解可以帮助你减少手动编写构造器的工作量。
@Mapper
package helloWorld.start.dba.mapper;
import helloWorld.start.dba.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(@Param("id") Long id);
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);
@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id=#{id}")
int deleteById(@Param("id") Long id);
@Select("SELECT * FROM user")
List<User> findAll();
}
@Mapper
是MyBatis框架中的一个注解,用于标记一个接口作为MyBatis的映射接口。 在MyBatis中,映射接口是一个定义了一组方法的接口,这些方法对应了SQL查询。MyBatis会为这个接口生成一个实现类,这个实现类中的方法会执行实际的SQL查询。
至于@Select
,@Insert
,@Update
等都是MyBatis框架提供的注解,它们用于在Mapper接口的方法上定义SQL语句。
@Autowired
@Autowired
是Spring框架的一个注解,用于自动装配bean。
至于bean,在Spring框架中,Bean是一个被Spring IoC容器管理的对象。这个对象的创建、初始化、销毁等生命周期都由Spring来管理。Bean可以是一个数据库连接、一个服务类、一个控制器类等等。
当Spring看到这个注解时,它会在容器中查找匹配的bean,并自动将它注入到被@Autowired
注解的字段、构造器或方法中。
使用@Autowired
的例子,字段注入:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// ...
}
在这个例子中,Spring会自动将UserRepository
的实例注入到userRepository
字段中。省去了new 类创建实例的过程。
转载自:https://juejin.cn/post/7372006887016054811