JDBC-springboot注解

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

错误

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
目录
相关文章
|
3天前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
3天前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
3天前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
3天前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
3天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
4天前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
14 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
17天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
43 3
|
18天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
41 2
|
23天前
|
Java Spring
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
41 7
|
26天前
|
数据库连接 数据库 开发者
Spring问题之使用@Transactional注解时需要注意哪些事项
Spring问题之使用@Transactional注解时需要注意哪些事项