Java Persistence API,即 jpa 定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库。
@Entity
一个类对应一个数据库实体。
@Entitypublic class Man { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name = "name") //设置插入表中的字段名 private String name;}点击运行项目之后,你的本地数据库里就会创建了一个表,名为 man ,该表里存在两个字段,一个是 id ,一个是 name。
@Table
设置表的属性,包括表名等。
如果只是想写普通的类(不与数据库关联)就用@Data(或@Transient)和@Component注解
@Id
@Id注释指定表的主键
@Column
设置字段的属性,包括字段名、字段长度等
@GeneratedValue
标注主键的生成策略,通过 strategy 属性指定。
例如:
@GeneratedValue(strategy = GenerationType.IDENTITY)IDENTITY 表示采用数据库 ID自增长的方式来自增主键字段(Oracle 不支持)
二、dao 层
dao 持久层,主要是对数据库操作,要继承 JpaRepository<实体类,主键的数据类型>
@Repository
持久层即 Dao 层,主要用于数据库相关操作。
例如:
@Repositorypublic interface ManDao extends JpaRepository<Man,Long> { List<Man> findAll(); //从这往下的方法都是spring boot提供的,不用实现,看名知意,供service层使用 Man findByName(String name); Man findById(Integer id); void deleteById(Integer id);}该注解是告诉Spring,让Spring创建一个ManDao的实例。当Service需要使用Spring创建的ManDao实例时,就可以使用@Resource(或者使用@Autowired)注解告诉Spring,Spring把创建好的ManDao的实例注入给Service即可。
三、service 层
@Service
服务层:业务类代码和对dao的调用
@Servicepublic class MyService implements MyServiceInterface{ @Resource private ManDao manDao ; @Override public String getManInfo(){ Man man = manDao.findById(1); return man.toString(); }}四、controller 层
@Controller
对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
@Controllerpublic class MyContrller { @Resource private MyService myService; @RequestMapping("/101") @ResponseBody public String function(){ return myService.getManInfo(); }}此时就可以启动工程了,然后在浏览器输入 http://localhost:8080/101
@RequestMapping
用来处理 url 请求地址映射的注解
(1) value: 指定request的地址
(2) method: 指定请求的method类型, GET、POST、PUT、DELETE等(如果不指定接收请求的方式,则表示都接收)
(3) params:指定request中包含的某些参数值,作为方法的输入
参考:https://www.jianshu.com/p/6bfc7e0f56a0
@ResponseBody
1)java对象转为json格式的数据,接着直接写入HTTP response body中
例如:
@ResponseBody public User function(){ User user = new User("10","zxdbb"); return user; }那么这里就会返回user的json格式到前端
@RequestBody
读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
例如:
@PostMapping("/sign-up")public ResponseEntity signUp(@RequestBody @Valid UserRegisterRequest userRegisterRequest) { userService.save(userRegisterRequest); return ResponseEntity.ok().build();}发送 post 请求到这个接口,并且 body 携带 JSON 数据,我们的后端就可以直接把 json 格式的数据映射到我们的 UserRegisterRequest 类上。
需要注意的是:一个请求方法只可以有一个@RequestBody,但是可以有多个@RequestParam和@PathVariable。 如果你的方法必须要用两个 @RequestBody来接受数据的话,大概率是你的数据库设计或者系统设计出问题了!
参考文章:https://zhuanlan.zhihu.com/p/135987318
@RequestParam
获取请求体中的查询参数
例如
@Controllerpublic class MyContrller { @Resource private MyService myService; @RequestMapping("/101") @ResponseBody public String function(@RequestParam(value = "string",required = false,defaultValue = "") String str){ return myService.getManInfo() + str; }}在浏览器中输入 http://localhost:8080/101/?string=hello
那么在function()中,str = "hello"
@PathVariable
获取请求体中的路径参数
例如:
@GetMapping("/klasses/{klassId}/teachers")public List<Teacher> getKlassRelatedTeachers( @PathVariable("klassId") Long klassId) {...}
我们请求的 url 是:/klasses/{123456}/teachers
那么 klassId=123456
参考文章:https://zhuanlan.zhihu.com/p/135987318
五、其他组件
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Configuration
配置类,程序启动时就会执行里面的@Bean
六、其他注解
@Bean
相当于XML中的Bean,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。可以用@AutoWired注入
例如:
@Configurationpublic class BeanTester { @Bean(name = "testBean") public String test() { String str = "测试@Bean注解"; return str; }}注意: @Configuration 注解相当于 XML 文件的根元素,必须要,有了才能解析其中的 @Bean 注解
@AutoWired
自动导入对象到类中,被注入进的类同样要被 Spring 容器管理。
@value
从application.yml中读取数据
例如:
application.yml
value01:ABCD @Value("${value01}")String value01;
@Aspect
spring 的 AOP,Aspect Oriented Program 面向切面编程
通俗点说,一个切点,有上切面,有下切面,切点是一个函数
当需要函数执行的时候,会有这么个流程:上切面 -> 切点 -> 下切面