SpringBoot框架基础知识(2)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: SpringBoot框架基础知识

7. 连接数据库


SpringBoot项目默认并没有集成数据库和数据库编程的框架所依赖的jar包,需要在创建项目时就勾选相关的依赖,或在创建项目之后再在pom.xml中添加相关的代码:


<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>


有许多依赖的使用中,SpringBoot框架都会自动的选取较高版本的依赖,并不需要在pom.xml中指定所使用的版本,例如以上mysql-connector-java就没有指定版本号!当然,如果一定要使用某个特定的版本,自行添加<version>节点进行配置也是可以的,则会使用所指定的版本!


一旦添加以上依赖后,当启动项目时,就会自动加载连接数据库的配置信息,如果尚且没有配置,则会启动失败!所以,必须在application.properties中添加配置:


spring.datasource.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root


当添加以上配置后,再次启动SpringBoot就不会报错了,即使以上配置信息是错误的,也不会报错!因为启动项目时只会“加载信息”,并不会“直接数据库”,所以,以上配置中,只要基本格式是正确的即可!


可以在src/test/java下编写单元测试,通过单元测试尝试连接数据库,以检查以上配置信息是否正确!则在cn.tedu.sample包下的SampleApplicationTests测试类中,添加以下代码进行测试:


@Autowired
public DataSource dataSource;
@Test
public void getConnection() throws SQLException {
    Connection conn = dataSource.getConnection();
    System.err.println(conn); // 使用err只是为了输出红色的日志,便于观察。
}


在使用SpringBoot框架编程时,凡在传统的SSM系列框架中通过getBean()可以获取的对象,都可以通过添加自动装配的注解来装配值!

8. 使用MyBatis实现数据库编程


【目标】向用户数据表中插入用户数据。


在cn.tedu.sample包下创建entity子包,专门用于存放实体类,并在这个包中创建User类:


public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
    private String email;
}


在cn.tedu.sample包下创建mapper子包,专门用于存放使用MyBatis编程时创建的接口,并在这个包中创建UserMapper接口,并在接口中添加抽象方法:


Integer addnew(User user);

1

然后,需要在启动类SampleApplication的声明之前补充@MapperScan注解,以指定接口的位置!


在src/main/resources下创建mappers文件夹,专门用于存放配置SQL语句的XML文件,并在这个文件夹,粘贴得到UserMapper.xml,并在其中配置以上抽象方法映射的SQL语句:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.sample.mapper.UserMapper">
  <insert id="addnew">
  INSERT INTO t_user (
    username, password, age, phone, email
  ) VALUES (
    #{username}, #{password}, #{age}, #{phone}, #{email}
  )
  </insert>
</mapper>


然后,还需要在application.properties中添加配置,以指定XML文件的位置:


mybatis.mapper-locations=classpath:mappers/*.xml


全部完成后,可以通过单元测试来检验以上代码是否可以正确执行,可以在src/test/java下的cn.tedu.sample包下创建子级的mapper包,并在这个包下创建UserMapperTests测试类,并参考原有的SampleApplicationTests类添加注解:


package cn.tedu.sample.mapper;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
}


然后,在测试类中编写并执行单元测试方法:


package cn.tedu.sample.mapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import cn.tedu.sample.entity.User;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
  @Autowired
  public UserMapper userMapper;
  @Test
  public void addnew() {
  User user = new User();
  user.setUsername("SpringBoot");
  user.setPassword("1234");
  user.setAge(28);
  user.setPhone("13900139008");
  user.setEmail("springboot@baidu.com");
  Integer rows = userMapper.addnew(user);
  System.err.println("rows=" + rows);
  }
}


【目标】根据用户名查询用户数据


需要执行的SQL语句大致是:


select * from t_user where username=?


则在UserMapper接口中添加抽象方法:


User findByUsername(String username);


并在UserMapper.xml中配置映射:


<select id="findByUsername" resultType="cn.tedu.sample.entity.User">

SELECT * FROM t_user WHERE username=#{username}

</select>


完成后,在UserMapperTests中编写并执行单元测试:


@Test

public void findByUsername() {
    String username = "test";
    User user = userMapper.findByUsername(username);
    System.err.println(user);
}


9. 完成用户注册功能


当用户尝试注册时,会先在页面中填写注册信息,然后点击按钮提交请求!请求会被服务器端的控制器所接收,但是,控制器并不负责处理增删改查,所以,会将数据交给UserMapper来执行!


接下来,需要开发控制器的功能,先在cn.tedu.sample下创建util子包,并在这个包中创建通常的响应JSON结果的类型:


public class JsonResult<T> {
    private Integer state;
    private String message;
    private T data;
}


在cn.tedu.sample.controller包中创建UserController控制器类,在类的声明之前添加@RestController和@RequestMapping("user")注解,并声明持久层对象:


@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserMapper userMapper;
}


然后,在类中添加处理“注册”请求的方法:


// http://localhost/user/reg?username=jsd2020&password=5678&age=19&phone=13700137777&email=jsd@baidu.com
@RequestMapping("reg")
public JsonResult<Void> reg(User user) {
    // 准备返回值对象
    JsonResult<Void> jsonResult = new JsonResult<Void>();
    // 根据参数user中的username查询数据库
    User result = userMapper.findByUsername(user.getUsername());
    // 判断查询结果是否为null
    if (result == null) {
        // 是:没有找到匹配的数据,则用户名没有被占用,允许注册,则执行注册,并返回注册成功
        userMapper.addnew(user);
        jsonResult.setState(1);
    } else {
        // 否:找到了匹配的数据,则用户名已经被占用,不允许注册,则返回注册失败
        jsonResult.setState(2);
        jsonResult.setMessage("注册失败!尝试注册的用户名已经被占用!");
    }
    // 返回
    return jsonResult;
}



完成后,重新启动项目,并打开浏览器,输入网址进行测试。


最后,再完成页面部分,先在static下创建注册页面,在页面中,通过ajax向服务器提交异步请求,并处理返回的结果


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
XML 安全 Java
|
26天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
39 0
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
60 4
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
181 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
46 0
|
1天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
8天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
25 5
|
18天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
47 8
|
28天前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
49 6