SpringBoot框架基础知识(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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向服务器提交异步请求,并处理返回的结果


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
Java 数据安全/隐私保护 Spring
Java 中 Spring Boot 框架下的 Email 开发
Java 中 Spring Boot 框架下的 Email 开发
28 2
|
3天前
|
缓存 前端开发 Java
【框架】Spring 框架重点解析
【框架】Spring 框架重点解析
18 0
|
3天前
|
XML Java 数据格式
Spring框架入门:IoC与DI
【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
17 4
|
3天前
|
安全 Java Spring
Spring框架中的单例Bean是线程安全的吗?
Spring框架中的单例Bean是线程安全的吗?
10 1
|
3天前
|
安全 Java 开发者
如何在Spring框架中实现横切关注点的集中管理和重用?
【4月更文挑战第30天】如何在Spring框架中实现横切关注点的集中管理和重用?
19 0
|
3天前
|
前端开发 Java 开发者
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
9 0
|
3天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(下)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
6 0
|
3天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(上)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
5 0
|
3天前
|
XML Java 应用服务中间件
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
6 0
|
3天前
|
XML Java 数据库连接
Spring框架与Spring Boot的区别和联系
Spring框架与Spring Boot的区别和联系
24 0