JDBC-springboot注解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: -

错误

Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.] with root cause


数据库问题

mysql8.0必须设置时区url

spring:

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true

username: root

password: wj


500但是添加成功了


注解

Config

springboot项目中的mvc配置大概有两种写法,一种是基于实现接口WebMvcConfigurer,一种是基于继承WebMvcConfigurationSupport,这两种写法会冲突,最终spring容器会执行继承WebMvcConfigurationSupport类中的重写方法,而忽略实现接口WebMvcConfigurer所重写的方法。

因此,一个应用中,应只选择一种方法进行配置。


@Configuration

@Bean

DAO

注意update,delete,insert不要返回对象(也返回不了,会报错),全返回int或者boolean

@mapper:在接口上添加了这个注解表示这个接口是基于注解实现的CRUD(增删改查)

@Repository:将数据访问层(Dao层)的类标识为Spring Bean(Bean是被实例的,组装的及被Spring容器管理的Java对象,Spring容器会自动完成@bean对象的实例化),创建应用对象之间的协作关系的行为称为:装配(wiring)这就是依赖注入的本质。

Results:返回的map结果集,property表示User类的字段,column表示对应数据库的字段

Param:sql条件的字段

@Mapper

@Repository

@Insert

@Select

@Delete

@Update

@Param("id")

id必须和SQL语句的id一致

Service

@Service

Controller

model.addAttribute("a","123");

向前端传数据,类似于request.setAttribute("a","123")

@RestController

添加位置:Controller类上

用thymeleaf时还是用@Controller使用

作用:相当于@Controller+@ResponseBody两个注解的结合,告诉容器Controller,返回json数据;不需要在方法前面加@ResponseBody注解了

但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

@RequestMapping("/user")

添加请求前缀

@Autowired

自动注入组件

@resource

两种情况:

name属性有值

  1. 按照name值去spring容器找bean,找不到报错

name属性无值

  1. 先判断该属性名字在spring容器是否存在bean对象,不存在执行下一步
  2. 根据属性类型去spring容器找bean对象,找到一个就注入

区别:

  • @Autowired注解由Spring提供@resource注解由J2EE提供
  • @Autowired默认按类型进行装配,存在多个类型则通过名称注入,也可以配合@Qualifier中指定bean的名字来注入bean@Resource默认按照名称进行装配,如名称无法找到则通过类型注入。

RESTFUL风格请求---------------

@GetMapping("/get")

@PostMapping("/add")

@DeleteMapping("/del")

@PutMapping("/update")

获取JSON数据-----------------

@RequestBody

可以封装json数据为java对象

单个pojo对象

{

   "id" : 5,

   "name" : "wuliuqi",

}

@PostMapping("/saveUser")

   public User saveUser(@RequestBody User user) {

   return userService.saveUser(user);

}

@PostMapping("/saveUser")

@ResponseBody

public Map<String,Object> getJsonVal(@RequestBody Map<String,Object> user) {

   System.out.println("id = " + user.get("id"));

   System.out.println("name = " + user.get("name"));

   return user;

}

集合--多个pojo对象

[{"id": 1, "name": "小明"},{"id": 2, "name": "小红"}]

@PostMapping("/getJson")

@ResponseBody

public List<User> getJsonVal(@RequestBody List<User> users) throws IOException {

   for(User user : users){

       System.out.println("user = " + user);

   }

   return users;

}

@RequestParam

接受json对象

{

   "id": 1,

   "name": "小明"

};

@PostMapping("/getJson")

@ResponseBody

public User getJsonVal(@RequestParam("id") String id,@RequestParam("name") String name) {

   User user = new User();

   user.setId(Integer.parseInt(id));

   user.setName(name);

   return user;

}

@PathVariable

看图

@DeleteMapping("/delUser/{id}")

public Integer DELETE(@PathVariable Integer id){

   return userService.DELETE(id);

};

Entity

@Data

get和set方法

@AllArgsConstructor

有参

@NoArgsConstructor

无参

案例

注解开发

application.yml

spring:

 datasource:

   driver-class-name: com.mysql.cj.jdbc.Driver

   url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC

   username: root

   password: 123456


User

package com.curd.entity;



import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;


/**

* 注释

*

* @author ss

* @date 2022-09-06 15:27

*/

@Data

@AllArgsConstructor

@NoArgsConstructor

public class User {


   /**

    * 主键ID

    */

   private Long id;


   /**

    * 姓名

    */

   private String name;


   /**

    * 年龄

    */

   private Integer age;


   /**

    * 邮箱

    */

   private String email;

}


UserMapper

package com.curd.mapper;


import org.apache.ibatis.annotations.*;

import com.curd.entity.User;

import org.springframework.stereotype.Repository;


import java.util.List;


/**

* 注释 Mapper

*

* @author ss

* @date 2022-09-06 15:27

*/

@Mapper

@Repository

public interface UserMapper {


   /**

    * 添加信息

    * @param user

    * @return

    */

   @Insert("insert into user(id,name,age,email) values(#{id},#{name},#{age},#{email})")

   public User saveUser(User user);


   /**

    * 返回所有用户

    * @return

    */

   @Select("select * from user")

   public List<User> listUser();


   @Delete("delete from user where id = #{id}")

   public Integer DELETE(Integer id);


   @Update("update user set name = #{name},age = #{age},email = #{email} where id = #{id}")

   public User updateUser(User user);

}


UserService

package com.curd.service;



import com.curd.entity.User;


import java.util.List;


/**

*  服务类接口

*

* @author ss

* @date 2022-09-06 15:27

*/

public interface UserService {


   public User saveUser(User user);


   public List<User> listUser();


   public Integer DELETE(Integer id);


   public User updateUser(User user);


}


UserServiceImpl

package com.curd.service.serviceImpl;


import com.curd.entity.User;

import com.curd.mapper.UserMapper;

import com.curd.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;


import java.util.List;


/**

*  服务实现类

*

* @author ss

* @date 2022-09-06 15:27

*/

@Service

public class UserServiceImpl implements UserService {


   //注入属性

   @Autowired

   UserMapper userMapper;


   @Override

   public User saveUser(User user) {

       return userMapper.saveUser(user);

   }


   @Override

   public List<User> listUser() {

       List<User> users = userMapper.listUser();

       return users;

   }


   @Override

   public Integer DELETE(Integer id) {

       Integer delete = userMapper.DELETE(id);

       return delete;

   }


   @Override

   public User updateUser(User user) {

       return userMapper.updateUser(user);

   }

}


UserController

package com.curd.controller;


import com.curd.entity.User;

import com.curd.service.serviceImpl.UserServiceImpl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;


import java.util.List;


/**

*  前端控制器

*

* @author ss

* @date 2022-09-06 15:27

*/

@RestController

@RequestMapping("/user")

public class UserController {

   @Autowired

   UserServiceImpl userService;



   @PostMapping("/saveUser")

   public User saveUser(@RequestBody User user) {

       return userService.saveUser(user);

   }


   @GetMapping("/list")

   public List<User> listUser() {

       return userService.listUser();

   }


   @DeleteMapping("/delUser/{id}")

   public Integer DELETE(@PathVariable Integer id){

       return userService.DELETE(id);

   }


   @PutMapping("/updateUser")

   public User updateUser(@RequestBody User user){

       return userService.updateUser(user);

   }

}

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
49 0
|
2月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
118 3
|
18天前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
33 4
|
1月前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
60 4
SpringBoot必须掌握的常用注解!
|
18天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
52 2
|
18天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
40 2
|
21天前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
26 2
|
22天前
|
JSON Java 数据格式
springboot常用注解
@RestController :修饰类,该控制器会返回Json数据 @RequestMapping(“/path”) :修饰类,该控制器的请求路径 @Autowired : 修饰属性,按照类型进行依赖注入 @PathVariable : 修饰参数,将路径值映射到参数上 @ResponseBody :修饰方法,该方法会返回Json数据 @RequestBody(需要使用Post提交方式) :修饰参数,将Json数据封装到对应参数中 @Controller@Service@Compont: 将类注册到ioc容器
|
22天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
36 2
|
2月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
76 9
Spring从入门到入土(bean的一些子标签及注解的使用)